CONF_FILE="backup.conf"
DEFAULT_INC="default.inc"
LOCK_FILE="backup"
BACKUP_PART="/srv/backup"
DATE=$(date +%Y-%m-%d)
MOUNT="/bin/mount"
UMOUNT="/bin/umount"
SSH="/usr/bin/ssh -C"
RDIFF_BACKUP="/usr/bin/rdiff-backup"
lockfile-create $LOCK_FILE || {
echo "Cannot get a lock, script already running, exiting ...."
exit 1
}
lockfile-touch $LOCK_FILE &
LOCK_PID="$!"
$MOUNT $BACKUP_PART
[ -d "$BACKUP_PART/rdiff-backup" ] && {
cat $CONF_FILE | grep -v -e "^\s*#" | grep -v -e "^\s*$" | while read computer address port os age; do
echo "Backup of $computer ..."
inc_file=$DEFAULT_INC
[ -f "$computer.inc" ] && inc_file="$computer.inc"
[ $address = "localhost" ] && {
$RDIFF_BACKUP --remote-schema '%s' --include-globbing-filelist $inc_file --exclude '*' 'nice sudo /usr/bin/rdiff-backup --server --restrict-read-only /'::/ "$BACKUP_PART/rdiff-backup/$computer"
} || {
$RDIFF_BACKUP --remote-schema 'ssh -C %s nice sudo /usr/bin/rdiff-backup --server --restrict-read-only /' --include-globbing-filelist $inc_file --exclude '*' "$address -p $port"::/ "$BACKUP_PART/rdiff-backup/$computer"
}
echo "Removing backups older than $age ..."
$RDIFF_BACKUP --remove-older-than $age "$BACKUP_PART/rdiff-backup/$computer"
mkdir -p "$BACKUP_PART/packages/$computer"
case $os in
"debian")
$SSH -f $address -p $port "dpkg --get-selections" > "$BACKUP_PART/packages/$computer/$DATE";;
"gentoo")
$SSH -f $address -p $port "sudo cat /var/lib/portage/world" > "$BACKUP_PART/packages/$computer/$DATE";;
"RHEL"|"fedora"|"suse"|"centos")
$SSH -f $address -p $port "rpm -qa" > "$BACKUP_PART/packages/$computer/$DATE";;
esac
done
}
df -h | grep $BACKUP_PART
$UMOUNT $BACKUP_PART
kill "${LOCK_PID}"
lockfile-remove $LOCK_FILE