Backup von Horde-Adressbüchern

Abstract

Durch meine häufigen Synchronisationstests von Adressbüchern mit diversen Smartphones etc. werden die Adressbuchdaten manchmal zerstört. Horde bietet kein Backup-Script für diese Daten an. Deshalb habe ich mir eine kleine Backup-Lösung mit Hilfe eines Bash Scripts geschrieben.

Durch meine häufigen Synchronisationstests von Adressbüchern mit diversen Smartphones etc. werden die Adressbuchdaten manchmal zerstört. Horde bietet kein Backup-Script für diese Daten an. Deshalb habe ich mir eine kleine Backup-Lösung mit Hilfe eines Bash Scripts geschrieben.

Diese Lösung ist kein Geniestreich. Eigentlich sollte Horde selbst etwas auf PHP-Basis mitbringen, was diese Jobs erledigt.

Die Idee ist ein cron-Job, der täglich einmal ausgeführt wird und die Daten der Adressbücher aller User (Mailboxen) auf einem Mailsystem in eine vCard-Adressbuchdatei über WebDAV exportiert.

Diese Datei wird zum einen im Filesystem abgelegt (und dort auch wieder regelmäßig gelöscht), zum anderen wird die Datei per Mail direkt über LMTP an Dovecot versendet, unter Umgehung von SMTP Postfix, um evtl. Weiterleitungen und Spamfilterungen zu umgehen. Ein globales Sieve Script – Anwender können diesen Filter nicht umgehen – filtert diese Mails in einen bestimmten versteckten IMAP-Ordner, der auch von POP3-Abfragen ausgeschlossen ist. Ein weiterer cron-Job löscht die Inhalte dieses versteckten Ordners nach Ablauf von z.B. 10 Tagen.

Sollte ein Nutzer nun seine Backup-Dateien zum Import benötigen, kann er sich selbst den versteckten IMAP-Ordner mit einem beliebigen IMAP-Client sichtbar schalten und z.B. mittels Import diese Daten im Horde-Adressbuch wiederherstellen.

Hier nun das Adressbuch-Script abook-backup.sh – den Teil des SQL-Dumps meiner Mailbox-Adressen und Passwörter habe ich weggelassen, weil dieser zu spezifisch ist. Wie man über LMTP Mail direkt einliefern kann, habe ich hier beschrieben.

#!/bin/bash
DATE=`eval date +%a-%F-%H-%M`
USER=user@example.com
PASS=userpass
/bin/mkdir -p /root/abook-backup/$DATE
/bin/mkdir -p /root/abook-backup/$USER
cd /root/abook-backup/$DATE
/usr/bin/wget -q -r -c -nd -nH -np -R html --user=$USER --password=$PASS https://horde.example.com/rpc.php/turba/$USER/
/bin/grep -l html -- * | xargs rm -f --
/bin/cat -- * > /root/abook-backup/$USER/$USER-$DATE-all-addresses-backup.vcf

Dieses Script wird dann z.B. in einer Schleife für alle User ausgefuehrt.

Note

Wenn man die vCard-Dateien mittels WebDAV vom Server zieht, entstehen dabei bisweilen Dateien, die mit einem Minuszeichen im Dateinamen beginnen. Die Behandlung solcher Dateien ist unter Linux bisweilen etwas tricky. Die entstehende vCard-Datei muss man in Thunderbird mit dem Add-On MoreFunctionsForAddressBook <https://nic-nac-project.org/~kaosmos/morecols-en.html> importieren, sonst kommt es zu Feldverschiebungen. Es können auch Felder durch die verschiedenen Adressbuch-Schemata diverser Adressbuch-Software verlorengehen.

Ein Nachteil der hier beschriebenen Methode ist, dass normalerweise ein Login auf dem IMAP-Server produziert wird, d.h. ein klassisches Last Login Script z.B. für Dovecot wird dann einen Timestamp setzen, eben für diesen Backup Login. (Ein möglicher Workaround dafür ist die Filterung des Last Logins aus den Log-Daten, weil man so auch IP-Adressen berücksichtigen kann.) Eine Lösung zum Backup für Kalenderdaten finden Sie in meinem Artikel Backup von Horde-Kalendern.

Robert Schetterer, 13. November 2013