Gehaxelts Blog

IT-Security & Hacking

[Update] Backupscript Uberspace v1.1

So, nachdem ich vor einigen Tagen ein Backupscript, welchen den kompletten /var/www/virtual/$USER Ordner in eine Datei zippte, und diese in einem Backup-Ordner speicherte.

Das alles ist auch wunderschön, doch was bringt einem das Backup, wenn es den Server trifft, und man an dieses nicht mehr rankommt? Dann wäre es doch gut, wenn die Datei verschlüsselt bei einem One-Klick-Hoster liegt, und man sich diese downloaden kann.  Genau das habe ich nun in meinem Script erweitert.

Wie man sich das Script einrichtet, habe ich bereits in einem anderen Post beschrieben. Die Schritte könnt ihr dort auch weiterhin so nachverfolgen, bis auf das ihr ein paar Änderungen vornehmen müsst.

Ich habe es so umgeschrieben, dass man die neuen Funktionalitäten per Parameter “freischalten” kann, sodass man auch weiterhin den alten Code, ohne irgendwelche Einstellungen zum Vorherigen ändern zu müssen, nutzen kann.

Welche neuen Features gibt es?

  • Das Löschen des gestrigen Backups

Mein Backup umfasst ~40 MB, wenn nun jeden Tag ein solches Backup erstellt wird, dann sammeln sich mit den Tagen die Megabytes. Wenn ihr das Script mit dem Parameter “deleteold” aufruft, dann wird das gestrige Backup gelöscht, falls es existiert.

sh backup.sh deleteold
  • Das Hochladen des verschlüsselten Backups auf One-Klick-Hoster

Ich dachte mir, es wäre doch ganz nett, wenn eine verschlüsselte Variante des Backups auf externen Servern liegt, von denen man im Notfall das Backup beziehen kann, so muss man es nicht selbst täglich herunterladen, nur bei Bedarf eben. Diese Option setzt man mit dem Parameter “upload” in Gang.

sh backup.sh upload

Diese Features können natürlich auch beide gleichzeitig genutzt werden, dazu muss man die Parameter einfach aneinanderreihen.

sh backup.sh upload deleteold

Welche Voraussetzungen gibt es?

Um den Upload nutzen zu können, müsst ihr Plowshare auf euren Account/Server installiert haben. Wie genau das geht, habe ich bereits beschrieben.

Ansonsten gibt es keine weiteren Voraussetzungen, welche ich hier erwähnen müsste.

Was muss ich ändern?

Du musst, wenn du den Upload nutzen willst, ein paar weitere Variablen im Script setzen. Dazu löschst du das alte Script am Besten und lädst danach das neue herunter.

rm backup.sh
wget "https://gehaxelt.in/blog/wp-content/uploads/2012/04/backupv1.1.sh_.txt"
nano backup.sh

Zunächst musst du wieder deinen Benutzernamen, dein MySQL-Passwort, und nun auch dein Verschlüsselungspasswort für GPG und eine Email setzen, an die die Email mit dem Downloadlink gehen soll.

ENCRYPTPASS="encryption_pass"
EMAILTO="my@mail.com"

Dann muss man noch den Eintrag im Crontab etwas abändern. Aus

0 3 * * * sh /home/[Benutzername]/backup.sh

mache

0 3 * * * sh /home/[Benutzername]/backup.sh upload deleteold

Was macht das Script nun anders?

Das Script macht nicht viel anders, bis auf das es über Plowshare die Datei zu MirrorCreator hochlädt, welcher diese noch ein Mal auf Rapidshare, Despositfiles und Megashares verteilt, sodass man sich sicher sein kann, seine Datei irgendwo im Internet zu finden.

Ansonsten löscht das Script ein paar Zeilen weiter unten, das Backup von Gestern, wenn es vorhanden ist, damit man nicht in Speichernöte kommt und man den Server nicht zumüllt.

Vielleicht hilft es dem einen oder anderen, ich nutze es für die nächste Zeit zumindest.

Hier ist noch der Source im Anhang:

###Uberspace Backup-Script by Sebastian Neef
###www.gehaxelt.in
###Version 1.1

##Variables
USER='username' #Uberspacename
MYSQLPW='mysqlpw' #MySQL-Passwort
DATE=$(date +%d-%m-%Y)
DODELETE=TRUE
##For encryption
DOUPLOAD=FALSE
ENCRYPTPASS="encryption gpg pass"
EMAILTO="email to send downloadlink"
PLOWPATH="/home/$USER/bin"
## END Variables

for i in $*
do 
    if [ $i = "upload" ] 
    then
        DOUPLOAD=TRUE
    fi
    if [ $i = "deleteold" ]
    then 
        DODELETE=TRUE
    fi
done

##Check if directory backup exists and create it eventually
if [ ! -d /home/$USER/backup ]
    then
        mkdir /home/$USER/backup
    echo "Backup-folder created"
fi
##END Check

##Check if backup exists and exit
if [ -f /home/$USER/backup/backup-$DATE.tar.bz2 ]
    then
        echo "Backup already exists"
    exit 1
fi
##END Check


##Backup
mysqldump --user=$USER --password=$MYSQLPW --compact --comments --dump-date --quick --all-databases | gzip > "/var/www/virtual/"$USER"/database.sql.gz"
cd /var/www/virtual/$USER
tar -cjf /home/$USER/backup/backup-$DATE.tar.bz2 *
rm /var/www/virtual/$USER/database.sql.gz
##END Backup

if [ $DOUPLOAD ]
    then
    ##Encrypt with gpg
    echo "$ENCRYPTPASS" | gpg --passphrase-fd 0 --batch --no-tty -c /home/$USER/backup/backup-$DATE.tar.bz2
    ##END Encrypt

    ##Upload with plowup && mail
    $PLOWPATH/plowup -q mirrorcreator /home/$USER/backup/backup-$DATE.tar.bz2.gpg | mail -s "Backup Uberspace" $EMAILTO
    rm /home/$USER/backup/backup-$DATE.tar.bz2.gpg
    ## End Upload
fi

if [ $DODELETE ]
then
    ##Check if old backup exists
    YESTERDAY=$(date +%d-%m-%Y -d"1 day ago")
    if [ -f /home/$USER/backup/backup-$YESTERDAY.tar.bz2 ]
    then
        rm  /home/$USER/backup/backup-$YESTERDAY.tar.bz2
    fi
    ##END Yesterday delete
fi