OwnCloud: automatisches Sichern von Kalendern und Kontakten

Wer keine Sicherungskopieren von Kontakten und Kalendern anlegt, lebt sehr fahrlässig. Wer seine Daten mit OwnCloud synchronisiert, hat sie dann oft auch auf den jeweiligen Programmen noch. Wenn der Server kaputt geht, hat das Mailprogramm vielleicht noch die Kontakte und Termine, oder das Handy. “Vielleicht” - darüber hinaus schützt so eine Replikation nicht vor menschlichen Fehlern, wie etwa dem Löschen der falscher Kontakte. So eine fälschliche Änderung erkennt das System nicht und sendet es brav weiter an die synchronisierten Geräte.

Wie mit allem anderen ist ein periodisches Backup der Daten daher sinnvoll. Dazu habe ich ein kleines Bash-Script geschrieben, das etwa in einem CronJob automatisch die gewünschten Dateien exportiert (als iCal bzw vCard) und abspeichert. Die lassen sich dann (anders als ein Datenbank-Abbild) im Notfall auch ohne OwnCloud etwa im Mailprogramm wiederherstellen.

Das Script

#!/bin/bash

# Configuration
# Backups will look like
# $BACKUPDEST/{calendar,contacts}_$CALENDAR_ID-$DATE.{vcf,ics}
DATE=`date +"%y-%m-%d_%H%M"`
BACKUPDEST=/some/path

# Enter your credentials here
HTTPUSER=florian
# you COULD store your password in plaintext here but that would be stupid
# try my small python script to use your OS's encrypted keyring instead
# (tested with GNOME-Keyring)
# https://github.com/fheinle/mutt/blob/master/scripts/kr.py
HTTPPASS=`/home/florian/.mutt/scripts/kr.py get florian@owncloud`
HTTPHOST=https://your-owncloud/installation/
ADDRESS_BOOKS="kontakte"
CALENDAR_IDS="default work fun"

for ADDRESS_BOOK in `echo $ADDRESS_BOOKS`;
do

    CONTACTSFILE=$BACKUPDEST/contacts_$ADDRESS_BOOK-$DATE.vcf
    wget --auth-no-challenge --no-clobber \
        --http-user=$HTTPUSER --http-password=$HTTPPASS \
        -O $CONTACTSFILE \
        "$HTTPHOST/remote.php/dav/addressbooks/users/$HTTPUSER/$ADDRESS_BOOK/?export"
    gzip $CONTACTSFILE
done

for CALENDAR_ID in `echo $CALENDAR_IDS`;
do
    CALENDARFILE=$BACKUPDEST/calendar_$CALENDAR_ID-$DATE.ics
    wget --auth-no-challenge --no-clobber \
        --http-user=$HTTPUSER --http-password=$HTTPPASS \
        -O $CALENDARFILE \
        "$HTTPHOST/remote.php/dav/calendars/$HTTPUSER/$CALENDAR_ID?export"
    gzip $CALENDARFILE
done

Das Script ist natürlich an die eigenen Anforderungen anzupassen. Ein Passwort im Klartext abzuspeichern wäre zwar möglich aber dämlich, stattdessen empfiehlt sich, das Kennwort aus dem Keyring des Betriebsystems zu holen, etwa mit einem Script aus meiner mutt-Konfiguration.

Für jede angegebene ID wird der dazugehörige Kalender bzw. das dazugehörige Adressbuch eigens exportiert, entsprechend benannt und noch mit gzip komprimiert. Die IDs der Kalender findet man in der ownCloud-Weboberfläche wie folgt:

Kalender

Die Kontakte werden anhand ihrer Namen in Kleinbuchstaben identifiziert. Hat man etwa ein Adressbuch „Kontakte”, lautet die richtige Schreibweise im Script „kontakte”. Möchte man mehrere Adressbücher sichern, schreibt man einfach deren Namen untereinander, wie folgt:

ADDRESS_BOOKS="kontakte
familie
kunden"

CronJob

Wenn ein Backup nicht automatisch gemacht wird, wird es der Erfahrung nach nie gemacht. Daher ein einfacher Cronjob zum Eintragen in crontab -e:

0 12 * * * /home/florian/.bin/owncloud-backup

Damit wird jeden Tag um 12 Uhr eine Sicherung der Daten angelegt.

Aktualisiert am 8. Mai 2014:

  • nach einem Update von ownCloud haben sich die URLs leicht geändert. Das Script oben wurde bereits angepasst.
  • Bildschirmfotos zum Ermitteln der IDs angehängt

Aktualisiert am 9. April 2015:

  • nach dem Update auf ownCloud 8.0 war wieder eine Änderung an den URLs notwendig. Das Script oben wurde angepasst.
  • Vielen Dank an Andreas Jung aus den Kommentaren für die Hinweise!