| 1 | #!/bin/bash -e |
| 2 | |
| 3 | # |
| 4 | # run this script as root, on deleuze, in a directory that WILL NOT be |
| 5 | # part of the backup (/tmp is a good choice). |
| 6 | # |
| 7 | |
| 8 | # FIXME: |
| 9 | # postgres dumps |
| 10 | # mysql dumps |
| 11 | |
| 12 | # for catsync |
| 13 | PATH=$PATH:/home/megacz_admin/ |
| 14 | COMPRESS_EXT=.bz2 |
| 15 | COMPRESS_PROG=bzip2 |
| 16 | |
| 17 | #KEYFILE=$1 |
| 18 | KEYFILE=/etc/backup-encryption-key |
| 19 | BACKUPDIR=/afs/megacz.com/hcoop-backup/ |
| 20 | |
| 21 | cd $BACKUPDIR |
| 22 | find * -prune -ctime +5 -exec rm -rf {} \; |
| 23 | |
| 24 | SUBDIR=`date +%Y.%m.%d` |
| 25 | rm -rf $SUBDIR |
| 26 | mkdir -p $SUBDIR |
| 27 | cd $SUBDIR |
| 28 | |
| 29 | echo 'I am in:' |
| 30 | pwd |
| 31 | echo |
| 32 | |
| 33 | echo building package lists... |
| 34 | dpkg-query -W -f='${Package}\n' > packages |
| 35 | (cd /; sudo find / /usr/ /usr/local/ /var/ -xdev) | sort | uniq > allfiles |
| 36 | dpkg-query -W -f='${Package}\n' | xargs dpkg -L | sort | uniq > debfiles |
| 37 | dpkg-query -W -f='${Conffiles}\n' | grep / | cut -b2- | sed 's_ .*__' | sort | uniq > conffiles |
| 38 | |
| 39 | diff allfiles debfiles | grep '^<' | cut -b 3- | \ |
| 40 | grep -v ^/var/cache | \ |
| 41 | grep -v ^/var/tmp | \ |
| 42 | grep -v ^/var/lib/dpkg | \ |
| 43 | grep -v ^/var/backups | \ |
| 44 | grep -v ^/var/lib/changetrack | \ |
| 45 | grep -v ^/var/run | \ |
| 46 | grep -v ^/var/lock | \ |
| 47 | grep -v ^/var/lib/ucf | \ |
| 48 | grep -v ^/vicepa | \ |
| 49 | grep -v ^/home | \ |
| 50 | grep -v ^/tmp | \ |
| 51 | grep -v '^/afs$' | \ |
| 52 | grep -v '^/$' | \ |
| 53 | grep -v '^/usr/$' | \ |
| 54 | grep -v ^/usr/src | \ |
| 55 | grep -v '^/usr/.*pyc' | \ |
| 56 | grep -v '^/usr/.*elc' | \ |
| 57 | grep -v '^/usr/lib/gconv/gconv-modules\.cache$' | \ |
| 58 | grep -v '^/usr/lib/locale/locale-archive$' | \ |
| 59 | grep -v '^/usr/share/info/dir$' | \ |
| 60 | grep -v '^/usr/share/info/dir\.old$' | \ |
| 61 | grep -v '^/usr/share/emacs21/site-lisp/' | \ |
| 62 | grep -v '^/usr/share/emacs22/site-lisp/' | \ |
| 63 | grep -v '^/usr/share/vim/addons/doc/tags$' | \ |
| 64 | cat > backupfiles |
| 65 | |
| 66 | cat conffiles >> backupfiles |
| 67 | |
| 68 | cat backupfiles | \ |
| 69 | grep -v ^/home | \ |
| 70 | grep -v ^/usr/local | \ |
| 71 | grep -v ^/var/spool | \ |
| 72 | grep -v ^/var/log | \ |
| 73 | grep -v ^/usr/lib/python2.4/ | \ |
| 74 | grep -v ^/var/lib/python-support | \ |
| 75 | grep -v ^/usr/share/man | \ |
| 76 | grep -v ^/media | \ |
| 77 | grep -v ^/vmlinuz | \ |
| 78 | grep -v ^/vmlinuz.old | \ |
| 79 | grep -v '^/sbin/[a-z\-]*.modutils$' | \ |
| 80 | cat > annoyingfiles- |
| 81 | |
| 82 | for A in `cat annoyingfiles-` |
| 83 | do \ |
| 84 | test -L "$A" || echo "$A" |
| 85 | done > annoyingfiles |
| 86 | |
| 87 | cat annoyingfiles | \ |
| 88 | grep -v ^/opt/dell/srvadmin/ | \ |
| 89 | grep -v ^/boot/ | \ |
| 90 | grep -v ^/dev/ | \ |
| 91 | grep -v ^/etc/ | \ |
| 92 | grep -v ^/root/ | \ |
| 93 | grep -v ^/var/ | \ |
| 94 | grep -v ^/lib/modules/ | \ |
| 95 | grep -v ^/var/domtool/ | \ |
| 96 | grep -v ^/var/lib/mysql/ | \ |
| 97 | grep -v ^/var/lib/postgres/ | \ |
| 98 | grep -v ^/var/lib/postgresql/ | \ |
| 99 | cat > complain |
| 100 | |
| 101 | grep '[a-z/]' complain && \ |
| 102 | mail -a 'From: Adam Megacz <megacz@hcoop.net>' \ |
| 103 | -s "automated message: annoying files found on deleuze (please do something about them)" admins@hcoop.net \ |
| 104 | < complain |
| 105 | |
| 106 | cp backupfiles /tmp/backupfiles |
| 107 | (cd /; sudo tar cvlpjf - --ignore-failed-read --no-recursion -C / -T /tmp/backupfiles) | \ |
| 108 | $COMPRESS_PROG | \ |
| 109 | ccrypt -k $KEYFILE -e | \ |
| 110 | catsync hcoop.backup.tar$COMPRESS_EXT.aescrypt |
| 111 | du -chs hcoop.backup.tar$COMPRESS_EXT.aescrypt |
| 112 | |
| 113 | vos listvol deleuze | \ |
| 114 | tail -n +2 | \ |
| 115 | head -n -3 | \ |
| 116 | cut -b1-34 | \ |
| 117 | grep -v "\.backup .*$" | \ |
| 118 | grep -v "\.readonly .*$" | \ |
| 119 | cat > volumes |
| 120 | |
| 121 | echo backing up databases |
| 122 | tar -C /var/backups/databases/ -cf - . | \ |
| 123 | $COMPRESS_PROG | \ |
| 124 | ccrypt -k $KEYFILE -e \ |
| 125 | | catsync databases.tar$COMPRESS_EXT.aescrypt |
| 126 | |
| 127 | for A in `cat volumes | grep -v not-backed-up` |
| 128 | do \ |
| 129 | echo "dumping afs volume $A..." |
| 130 | time (cd /; sudo vos dump -id $A -localauth -clone) | \ |
| 131 | $COMPRESS_PROG | \ |
| 132 | ccrypt -k $KEYFILE -e | \ |
| 133 | catsync $A.dump$COMPRESS_EXT.aescrypt |
| 134 | done |