diff --git a/ftp-backup.sh b/ftp-backup.sh new file mode 100644 index 0000000..7e7be76 --- /dev/null +++ b/ftp-backup.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +FTP_CREDS="/root/backup/ftpserver.login" + +BACKUP_SYSTEM="bin boot dev lib mnt opt sbin usr" +BACKUP_CONFIG="etc" +BACKUP_USER="home root" +BACKUP_VAR="var" + +# ------------------ + +umask 0077 +TODAY=`date +%Y-%m-%d` +OLDDAY=`date +%Y-%m-%d -d '-6 months'` +TMPDIR=`mktemp -d` + +# ------------------ + +function create_backup { + echo "## "`date` + target=$1 + shift + rm -rf $target + tar --totals -czpf $target -C / $@ 2>&1 + /usr/bin/md5sum -b $target + echo +} + +function ftp_push_delete { + echo "## "`/bin/date` + target=$1 + shift + + # workaround -X %s bug in ncftpput (do not use absolute local paths) + pushd . &> /dev/null + cd $TMPDIR + for file in $@; do + files="$files `/usr/bin/basename $file`" + done + /usr/bin/ncftpput -V -X "SITE CHMOD 600 %s" -f $FTP_CREDS $target $files + popd &> /dev/null + # end workaround + + echo +} + +function ftp_list { + echo "## "`date` + ftp_host=`/usr/bin/awk '/host/{ print $2 }' $FTP_CREDS` + /usr/bin/ncftpls -l -f $FTP_CREDS ftp://${ftp_host}/ + echo +} + +function ftp_delete { + echo "delete $1" + ftp_host=`/usr/bin/awk '/host/{ print $2 }' $FTP_CREDS` + /usr/bin/ncftpls -l -f $FTP_CREDS -X "DELE $1" ftp://${ftp_host}/ &> /dev/null +} + +# ------------------ + +create_backup $TMPDIR/backup-${TODAY}-system.tar.gz $BACKUP_SYSTEM +create_backup $TMPDIR/backup-${TODAY}-config.tar.gz $BACKUP_CONFIG +create_backup $TMPDIR/backup-${TODAY}-user.tar.gz $BACKUP_USER +create_backup $TMPDIR/backup-${TODAY}-var.tar.gz $BACKUP_VAR + +ftp_push_delete / $TMPDIR/backup-${TODAY}-*.tar.gz + +ftp_delete backup-${OLDDAY}-system.tar.gz +ftp_delete backup-${OLDDAY}-config.tar.gz +ftp_delete backup-${OLDDAY}-user.tar.gz +ftp_delete backup-${OLDDAY}-var.tar.gz + +ftp_list + +echo "FTP backup completed." +rm -rf $TMPDIR diff --git a/ftpserver.login b/ftpserver.login new file mode 100644 index 0000000..307ee81 --- /dev/null +++ b/ftpserver.login @@ -0,0 +1,4 @@ +# ftp-server account data (chmod 0600!) +host ftp.server.net +user bla +pass blub