summaryrefslogtreecommitdiff
path: root/backup.sh
diff options
context:
space:
mode:
authorTorben Egmose <torben.egmose@gmail.com>2021-02-07 11:44:20 +0100
committerTorben Egmose <torben.egmose@gmail.com>2021-02-07 11:44:20 +0100
commit2834582fcf6b540dc86ce35b3bde4ccc778df330 (patch)
treeb5d2d1a3729a710a6e1c2fb5b0b34254d0a9c82b /backup.sh
initial release
Diffstat (limited to 'backup.sh')
-rwxr-xr-xbackup.sh121
1 files changed, 121 insertions, 0 deletions
diff --git a/backup.sh b/backup.sh
new file mode 100755
index 0000000..bf0b125
--- /dev/null
+++ b/backup.sh
@@ -0,0 +1,121 @@
+#!/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