#!/bin/bash
# Please see the backup(8) man page for full documentation.

DATE=$(date +%Y%m%d)
BACKUPS=/var/backups
DUMPS=8

LEVEL0=$(find $BACKUPS -name "*full.tgz")
INCR=$(find $BACKUPS -name "*incremental.tgz" | wc -l)

if [ -e $LEVEL0 ] && [ $INCR -le $DUMPS ]
then
  TYPE=incremental
else
  TYPE=full
  rm -f $BACKUPS/*.snapshot
fi

tar -cz \
 --exclude ".nobackup" \
 --exclude "nobackup" \
 --exclude ".thunix/nobackup" \
 --exclude "/home/irc/*" \
 --exclude='/home/slip/*' \
 --exclude='/home/angelok/*' \
 --exclude='/home/usernameak/*' \
 --exclude='/home/ubergeek/*' \
 --exclude='/home/amcclure/*' \
 --exclude='/home/fosslinux/*' \
 --exclude='/home/zszoke/*' \
 --exclude='/home/duitser/*' \
 /home/ \
 /var/games/minetest-server/.minetest/ \
 /var/lib/minecraft/paper/ \
 /var/lib/bzflag/ \
 /var/lib/znc/configs/ /var/lib/znc/moddata/ \
 /var/spool/cron/ \
 /var/spool/anacron/ \
 -g $BACKUPS/$TYPE.snapshot \
 -f $BACKUPS/$DATE-$TYPE.tgz

chown root:sudo $BACKUPS/$DATE*.tgz
chmod 640 $BACKUPS/*.tgz

# Remove dumps and the previous backup once there is another.
if [ $TYPE = full ]
then
  cp $BACKUPS/full.snapshot $BACKUPS/incremental.snapshot
  [ -e $LEVEL0 ] && rm $LEVEL0 $BACKUPS/*incremental.tgz
fi

# Database backup
find $BACKUPS -name "*.sql.gz" -mtime +$DUMPS -exec rm {} \;
mysqldump --all-databases | gzip > $BACKUPS/$DATE-all_databases.sql.gz

chown root:sudo $BACKUPS/$DATE*.sql.gz
chmod 640 $BACKUPS/*.sql.gz
