Kontakte- und Kalender-Synchronisation mit Baikal auf eigenem Webserver

Um Kontakte und Termine zwischen verschiedenen Endgeräten gleich zu halten, greifen viele Benutzer auf berühmte Cloud-Dienste, wie Apple iCloud oder die Google-Dienste, zurück.

Das mag sicherlich eine sehr komfortable Lösung sein - jedoch sollte man, meiner Meinung nach, offenen Cloud-Dienste kein großes Vertrauen schenken. Ich persönlich vermeide sämtliche Cloud-Dienste und versuche alle Dienste auf eigenen Servern zu implementieren.

BYOC (Bring your own cloud)

Mithilfe der CardDAV- und CalDAV-Protokolle können Kontakte und Kalender synchronisiert werden. Es gibt zahlreiche quelloffene Server-Anwendungen, die diese Protokolle implementieren - darunter beispielsweise OwnCloud und Baikal. Während OwnCloud ein Rundum-Paket zur Erstellung einer privaten Cloud ist, bietet Baikal ausschließlich CardDAV-/CalDAV-Synchronisation an - genau das, was ich suchte.

CardDAV und CalDAV sind offene Standards, die von einer Vielzahl von Anwendungen und Geräten unterstützt werden, darunter beispielweise:

  • Apple iOS (Version 4 oder höher)
  • Apple iCal, Adressbook
  • Blackberry Geräte (Version 10 oder höher)
  • Evolution
  • Microsoft Outlook und Mozilla Thunderbird (jeweils mit Add-Ons)
  • Android mit CardDav-Sync (Free) / CalDav-Sync

Baikal steht in verschiedenen Versionen zur Verfügung - darunter:

  • Flat package - Installation per FTP, für verwaltete Webserver
  • Regular package - Installation per SSH oder FTP, für Root-Server/vServer
  • Bleeding-edge package - Installation per SSH und GIT, für Entwickler gedacht

Baikal-Dashboard

Ich habe Baikal auf einem meiner Webserver installiert und mich für die erste Version entschieden, weil ich keinen SSH-Zugang auf diesem System habe.

Bei verwalteten Webservern kann es hier zu Problemen kommen - etwa, weil bestimmte Authentifizierungsmechanismen nicht zur Verfügung stehen oder "Eigenarten" des Hosters beachtet werden müssen.

Ich musste bei meinem Hoster (All-Inkl) folgendes beachten:

Anpassung der ursprünglichen .htaccess-Datei

Vor der Installation musste ich die erstellte .htaccess-Datei um folgende Zeilen erweitern:

1# Use PHP 5.3 and set some PHP flags
2AddHandler php53-cgi .php
3php_flag magic_quotes_gpc off
4php_flag output_buffering   on

Die erste Code-Zeile zwingt den Webserver dazu PHP in der Version 5.3 zu verwenden - die Version ist für Baikal zwingend notwendig. Die anderen beiden Zeilen setzen zwei PHP-Einstellungswerte, die ebenfalls angepasst werden müssen, da ansonsten Authentifizierungsprobleme und andere Programmfehler entstehen.

Wird die .htaccess-Datei nicht angepasst, bricht das Installationsprogramm mit folgenden Fehlermeldungen ab:

1Warning: Unexpected character in input: '' (ASCII=92) state=1 in ...
2...
3Warning: Unexpected character in input: '' (ASCII=92) state=1 in ...

Anpassung der Authentifizierung

Digest-Authentifizierung steht auf den meisten verwalteten Webservern nicht zur Verfügung, aber auch die Basic-Authentifizierung funktioniert - je nach Softwareumfang des verwalteten Webservers - nicht (in zahlreichen VMs hat das wunderbar funktioniert). Einige clevere Entwickler haben einen Workound hierfür programmiert: [klick mich!].

Der Ordnerpfade (in Schritt 7 und 8) haben sich in Baikal 0.26 wohl geändert:

  • baikal/Core/Frameworks/SabreDAV/lib/Sabre/DAV/Auth/Backend/ wird zu baikal/vendor/sabre/dav/lib/Sabre/DAV/Auth/Backend
  • baikal/Core/Frameworks/SabreDAV/lib/Sabre/HTTP/ wird zu baikal/vendor/sabre/dav/lib/Sabre/HTTP/

Der Workaround sollte auch bei der Verwendung anderer Hoster helfen - in meinem Fall half es auch bei meinem All-Inkl Web-Server.

Nach Anwendung des Workarounds muss in den Einstellungen von Baikal die Digest-Authentifizierung ausgewählt werden, da für diese im Quellcode entsprechende Zeilen zur Verwendung des Workaround-Moduls eingefügt wurden. Ein kleiner Schönheitsfehler, aber wen stört's? 😉

Ersetzen der .htaccess-Konfigurationsdatei

Im verlinkten Artikel wird auch die .htaccess-Datei nochmals ersetzt, ich habe die Datei für meinen All-Inkl Web-Server wie folgt angepasst (o.g. PHP-Flags und Entfernung eines Redirects):

1...
2# PHP53, All-Inkl
3AddHandler php53-cgi .php
4php_flag magic_quotes_gpc off
5php_flag output_buffering   on
6
7# iOS
8RedirectPermanent /.well-known/caldav http://servername.tld/cal.php
9RedirectPermanent /.well-known/carddav http://servername.tld/card.php

Die letzten zwei Code-Zeilen definieren einen Redirect, damit Kontakte auch mit iOS-Geräten synchronisiert werden - iOS verwendet immer die Unterordner principals/benutzer zur Synchronisierung (der Ordnername lautet eigentlich addressbooks/benutzer)

Nach Anwendung dieser Tricks läuft Baikal einwandfrei auf meinem verwalteten Webserver.

Synchronisation unter Android

Für die Synchronisation von Kontakten mit Baikal unter Android kann ich CardDAV-Sync empfehlen. Diese App kostet 1,90 € - es existiert jedoch auch eine kostenfreie Version.

Zum Abgleich von Kalendern und ToDo-Listen (die zuvor in Baikal im Kalender aktiviert werden müssen) gibt es vom gleichen Entwickler die App CalDAV-Sync für 2,59 €. Es gibt keine kostenfreie Version dieser Anwendung - jedoch ist das Tool sein Geld auf jeden Fall wert, finde ich.

Die beiden Anwendungen ähneln sich sehr - es gibt einen Konfigurationsassistenten der entsprechende Systemkonten zur Synchronisierung anlegt. Hierbei muss das folgende URL-Schema verwendet werden (Beispiele):

  • Standard-Kalender, Benutzer max: http://servername.tld/baikal/cal.php/principals/max
  • Kalender mit der ID business, Benutzer paul: http://servername.tld/baikal/cal.php/principals/paul/business
  • Standard-Kontaktbuch, Benutzer john: http://servername.tld/baikal/card.php/addressbooks/john/default
  • Kontaktbuch mit der ID customers, Benutzer bill: http://servername.tld/baikal/card.php/addressbooks/bill/customers

Hinweis: Der Servername muss natürlich je nach Konfiguration (Servername, Subdomain, anderer Ordnername,...) angepasst werden!

Die beiden Programme gelten als Beta, funktionieren aber zuverlässig. Ich konnte keinerlei Datenverluste oder Abstürze feststellen. Jedoch empfiehlt der Entwickler, gelegentlich Backups der erstellen Kontakte zu pflegen.

Synchronisation mit iPhone, iPad und iPod

Während man die CardDAV- und CalDAV-Funktionalität bei Android kostenpflichtig nachrüsten muss, ist diese Funktion fester Bestandteil von Apple iOS (seit Version 4). Hier genügt die Hinzufügung eines entsprechenden Kontos im folgenden Menü: Einstellungen > Mail, Kontakte, Kalender > Account hinzufügen > Andere > CardDAV-Account hinzufügen / CalDAV-Account hinzufügen

Hier ändert sich das URL-Format wie folgt:

  • Standard-Kalender, Benutzer max: servername.tld/baikal/cal.php/principals/max
  • Kalender mit der ID business, Benutzer paul: servername.tld/baikal/cal.php/principals/paul/business
  • Standard-Kontaktbuch, Benutzer john: servername.tld/baikal/card.php

Hinweis: Der Servername muss natürlich je nach Konfiguration (Servername, Subdomain, anderer Ordnername,...) angepasst werden - unbedingt sicherstellen, dass die .htaccess Konfigurationsdatei mit der oben erwähnten rewrite-Regel versehen wurde!

Übersetzungen: