#!/bin/bash logger="/usr/bin/logger -p local1.info -t backup" short=$( hostname -s ) RSYNC_DST="rsync://172.19.1.12/backup_$short" # find backup folder if [ -e /srv/backup ]; then folder=/srv/backup else folder=$1 fi if [ "$folder" = "" ]; then /usr/bin/logger -p local1.info -t backup "Crap. Can't find settings folder, give me a folder as option" echo "Crap. Can't find settings folder, give me a folder as option" exit 1 fi ## Settings file if [ -f $folder/settings ]; then /usr/bin/logger -p local1.info -t backup "Using settings file" echo "Using settings file" . $folder/settings fi ## Dump packages echo Dump packages dpkg --get-selections >$folder/packages.list ## MySQL backup if [ "${MYSQL_DATABASES:-}" != "" ]; then echo -n mysql dump /usr/bin/logger -p local1.info -t backup "Backup mysql" mkdir -p $folder/sql for i in $MYSQL_DATABASES do /usr/bin/logger -p local1.info -t backup "Backup of mysql database: $i" if [ "${MYSQL_PASSWORD:-}" != "" ]; then output=$( mysqldump --events --routines --triggers -p$MYSQL_PASSWORD $i | bzip2 >$folder/sql/$i.sql.bz2 2>&1) else output=$( mysqldump --events --routines --triggers $i | bzip2 >$folder/sql/$i.sql.bz2 2>&1) fi if [ $? -gt 0 ]; then echo $outlog | mail -s "Error on mysql backup $(hostname)" torben.egmose@gmail.com fi /usr/bin/logger -p local1.info -t backup "$outlog" echo $output done echo done fi RSYNC_EXTRA=${RSYNC_EXTRA:-} # dynamic rsync list if [ -e $folder/dont.list ]; then RSYNC_EXTRA="$RSYNC_EXTRA --exclude-from=$folder/dont.list " fi output=$( ( [ -e /etc/ntp.conf ] && echo /etc/ntp.conf [ -e /etc/iptables/rules ] && echo /etc/iptables/rules [ -e /etc/iptables/rules.v4 ] && echo /etc/iptables/rules.v4 [ -e /etc/iptables/rules.v6 ] && echo -e /etc/iptables/rules.v6 [ -e /etc/pure-ftpd ] && echo /etc/pure-ftpd/ [ -e /usr/bin/mysqld_safe ] && echo /etc/mysql/ [ -e /etc/cups ] && echo /etc/cups [ -e /etc/mdadm/mdadm.conf ] && echo /etc/mdadm/mdadm.conf [ -e /etc/sudoers ] && echo /etc/sudoers [ -e /opt/ ] && echo /opt/ [ -e /etc/auto.master.d/ ] && echo /etc/auto.master.d/ [ -e /etc/postfix/ ] && echo -e "/etc/postfix/\n/etc/aliases" [ -e /etc/samba/ ] && echo /etc/samba/ [ -e /etc/krb5.conf ] && echo /etc/krb5.conf [ -e /etc/bind/named.conf ] && echo -e "/etc/bind/named.conf\n/var/cache/bind/" [ -e /etc/sudoers.d ] && echo /etc/sudoers.d/ [ -e /usr/share/pam-configs ] && echo /usr/share/pam-configs/ [ -e /etc/ngnix ] && echo -e "/etc/nginx" [ -e /etc/stunnel ] && echo /etc/stunnel/ [ -e /etc/rsyncd.conf ] && echo /etc/rsyncd.conf [ -e /etc/modules ] && echo /etc/modules [ -e /lib/udev/devices ] && echo /lib/udev/devices [ -e /usr/bin/locate ] && /usr/bin/locate -r "^/\(home\|root\).*/\.ssh$" [ -e /etc/syslog-ng ] && echo /etc/syslog-ng [ -e /etc/rsyslog ] && echo /etc/rsyslog echo -e "/etc/fstab $folder /etc/apt/sources.list /etc/rc.local /etc/resolv.conf /etc/network/interfaces /etc/hosts /etc/pam.d/ /etc/nsswitch.conf /var/spool/cron/crontabs/ /usr/local/bin/" [ -e $folder/file.list ] && cat $folder/file.list ) | rsync -v --stats --recursive --copy-links --times --whole-file --delete --chmod=a+rwx --perms --files-from=- $RSYNC_EXTRA / $RSYNC_DST ) if [ $? -gt 0 ]; then echo $output | mail -s "Error on backup $(hostname)" torben.egmose@gmail.com echo $output fi /usr/bin/logger -p local1.info -t backup "$outlog" echo local backup script if [ -e /opt/bin/backup.sh ]; then output=$( /opt/bin/backup.sh 2>&1 ) if [ $? -gt 0 ]; then echo $output | mail -s "Error on backup localscript $(hostname)" torben.egmose@gmail.com fi /usr/bin/logger -p local1.info -t backup "$outlog" echo $output fi echo done #monitor backup if [ -e $folder/seen ]; then $folder/seen backup fi