#!/bin/bash recipient="" dump="/tmp/bare_metal" bare_metal=bare_metal date=`date +%Y%m%d` error_log="/tmp/bare_metal_error.log" ###### Exclusions here ###### exclude="--exclude squid-reports --exclude pgsql" [ -f $error_log ] && rm $error_log error() { echo echo "Error: $1" echo $1 > $error_log mail -s "baremetal backup failed on $HOSTNAME" $recipient < $error_log exit 1 } ###### Checking that packages are installed ###### for i in "rsync" "sudo" "md5sum" do [ `which $i` ] || error "$i not found" done [ -d $dump ] || mkdir $dump ###### Gathering files ###### echo "Gathering files" for s in "/etc" "/boot" "/usr/local" "/usr/share/bugzilla" "/var/log" "/var/www" "/var/spool/cron" "/var/yp" "/var/lib/mailman" "/usr/share/request-tracker3" "/var/local/lib/rdp-wiki/" do [ -d $s ] || continue echo " $s" rsync -az --delete $exclude $s $dump/ done [ -f /etc/redhat-release ] && rpm -qa > $dump/package_list [ -f /etc/debian_version ] && dpkg -l > $dump/package_list [ -f /etc/SuSE-release ] && rpm -qa > $dump/package_list echo "Gathering complete" ###### Tarring and compressing files ###### echo echo "Tarring and compressing files" tar -zcf /tmp/bare_metal_$HOSTNAME\_$date.tgz $dump > /dev/null 2>&1 echo "Tarring complete" ###### Uploading files ###### echo echo "Uploading files" chown $bare_metal:$bare_metal /tmp/bare_metal_$HOSTNAME\_$date.tgz sudo -u $bare_metal /bin/cp -f /tmp/bare_metal_$HOSTNAME\_$date.tgz /home/$bare_metal/backups/ || error "upload to /home/$bare_metal/backups/ failed" ls -hl /home/$bare_metal/backups/bare_metal_$HOSTNAME\_$date.tgz echo "Upload complete" ###### Consolidating backups ###### echo echo "Consolidating backups" while [ "`ls -t /home/$bare_metal/backups/bare_metal* | grep -c $HOSTNAME`" -gt "1" ] do [ -d /home/$bare_metal/not-backed-up/ ] || break sudo -u $bare_metal mv `ls -ltra /home/$bare_metal/backups/bare_metal_$HOSTNAME* | grep -m 1 $HOSTNAME | awk '{print $NF}'` /home/$bare_metal/not-backed-up/ done echo "Consolidation complete" ###### Tidying up local files ###### echo echo "Tidying up local files" [ "`md5sum /tmp/bare_metal_$HOSTNAME\_$date.tgz | awk '{print $1}'`" == "`md5sum /home/$bare_metal/backups/bare_metal_$HOSTNAME\_$date.tgz | awk '{print $1}'`" ] && rm /tmp/bare_metal_$HOSTNAME* || error "checksum failed" echo "Tidying up complete" exit 0