klomp.de

retro arcade, visual pinball cabinet, techblog

Baikal Lightweight CalDAV + CardDAV ServerWer seine Kalenderdaten und Kontakte gerne zwischen Smartphones und/oder eMail-Clients (z.B. Thunderbird, Apple Calendar OS X usw.) synchronisieren möchte, die Daten jedoch nicht in die Hände von Google, Apple und Konsorten legen will, kann dieses ganz bequem und vollautomatisch mit Baikal auf der heimischen Synology NAS machen. Baikal ist ein ressourcenschonender und flexibler CardDAV/CalDAV-Server, der schnell installiert und eingerichtet ist. Ich beschreibe hier die Installation auf einer Synology NAS mit DSM 6.0, da ich meine Daten gerne "zu Hause" liegen habe - jedoch kann Baikal natürlich auch auf fast jedem beliebigen Hosting-Paket (Minimum Apache 2, PHP 5.3 und MySQL/MariaDB oder SQLite) installiert werden.

 Sofern noch nicht geschehen, installiert ihr zuerst per Paketzentrum die "Webstation", die euch den Webserver zur Verfügung stellt. Ich habe alle Standard-Einstellungen für Apache und PHP übernommen.

Einstellungen Synology DSM Webstation

 

Bei der Installation der Webstation wird auf der Synolgy automatisch das Verzeichnis /var/services/web angelegt, welches quasi dem Apache htdocs-Verzeichnis entspricht und in das ihr eure Webdateien kopieren könnt. Das Verzeichnis web erreicht ihr auch über die Filestation. Nun laden wir von der Baikal-Homepage das "Flat Package" herunter - die Dateien könnt ihr entpacken und auf der Synology im Webroot in ein Unterverzeichnis kopieren (z.B. /baikal). Ich musste im Anschluss noch die Verzeichnis- und Dateirechte anpassen, damit der Apache-User "http", der Mitglied in der gleichnamigen Benutzergruppe "http" ist, korrekt lesen und schreiben kann. Dazu habe ich eine ssh Konsolenverbindung zur NAS aufgebaut (das geht unter Windows z.B. mit dem SSH-Client putty). Die Anmeldung an der Linux-Konsole erfolgt mit dem User admin und dem entsprechenden Passwort. Die Besitz-Rechte der Baikal-Verzeichnisse und Dateien ändert ihr nun mit folgendem Befehl: sudo chown -R http:http /var/services/web/baikal (es wird erneut nach eurem Admin-Passwort gefragt).

Anpassen der Verzeichnis-Rechte für den Apache Webserver

 

Die Daten speichert Baikal entweder per SQLite oder MySQL/MariaDB. Ich habe mich für MariaDB entschieden, da das Datenbanksystem für eine andere Anwendung eh installiert war und dieses sehr einfach von dem Synology-eigenem Backup-Tool mitgesichert wird. Falls noch nicht geschehen, installiert ihr also per Paketzentrum das Paket "MariaDB". Für die einfache Administration der Datenbanken empfiehlt es sich, das Paket "phpMyAdmin" gleich mit zu installieren. Hierüber lässt sich nun eine neue Datenbank "baikal" mit einem entsprechenden Datenbankbenutzer (ich habe ihn ebenfalls "baikal" genannt) anlegen. Wer sich mit MySQL/MariaDB auskennt, kann natürlich Datenbank sowie DB-User auf der Linux Konsole per mysql Client erstellen.

phpMyAdmin zum Erstellen der Baikal-Datenbank und des Datenbankbenutzers (Baikal hat hier bereits die Tabellen angelegt)

 

Nun ruft ihr per Webbrowser die URL eurer Synology auf, entweder über die IP-Adresse, den internen Hostnamen oder noch besser und sofern von euch eingerichtet, über die externe URL, über die eure Synology aus dem Internet erreichbar ist (z.B. eine DynDNS-Adresse) - gefolgt von dem Verzeichnisnamen eures Baikal-Verzeichnis (z.B. https://hostname/baikal/). Über das Baikal Installations-Tool werdet ihr durch die Installation geführt, es werden z.B. Daten für eure neu erstellte Datenbank abgefragt. Baikal generiert die erforderlichen Tabellen und wenn alles geklappt hat, könnt ihr euch mit dem Admin-Account auf dem Baikal-Dashboard anmelden:

Baikal Dashboard

 

Sofern ihr per https-Verbindung synchronisieren möchtet (was absolut empfehlenswert ist), müsst ihr nun noch unter "Settings" den "WebDAV authentication type" auf "Basic" umstellen:

WebDAV-Settings für https Verbindungen

 

Im Anschluss legt ihr einen Benutzer an, über den ihr eure Kontakte und Kalenderdaten synchronisieren könnt. Auf meinem Android Smartphone verwende ich für die Synchronisierung CalDAV-Sync und CardDAV-Sync von Marten Gajada. Apples Mac OS X und iOS unterstützen CardDAV und CalDAV ohne zusätzliche Plugins, genauso wie Blackberry OS10. Für Thunderbird und Outlook gibt es diverse brauchbare Plugins. Welche URL für welchen Client einzutragen ist, findet ihr im Baikal-Verzeichnis in der Datei install.md.

Wer Baikal nicht wie oben beschrieben manuell installieren möchte, kann auch das fertige Synology Paket "Baikal for Synology" nutzen. Das Paket ist leider nicht über ein Repository verfügbar sondern muss manuell herunter geladen und installiert werden. Mit anderen Pakten habe ich diesbezüglich jedoch schlechte Erfahrungen gemacht (irgendwann kamen keine Updates mehr, unsichere Pakete oder Quellen etc.), sodass ich in diesem Fall davon Abstand genommen habe - das bedeutet nicht, dass dieses von Erik Oom zur Verfügung gestellte Paket schlecht oder nicht aktuell ist - ich habe es lediglich nicht getestet.

Mir ist außerdem klar, dass Synology CardDAV und CalDAV seit DSM 5.0 von Hause aus unterstützt - jedoch war mir diese Implementierung zu rudimentär und nicht flexibel genug.

Meine Daten habe ich mehr als 2 Jahre mit Owncloud auf der Synology synchronisiert. Da ich jedoch keine Lust hatte, die recht alte und unsichere Owncloud-Installation zu aktualisieren, habe ich mit Baikal eine schnelle, ressourcenschonende und einfache Lösung gefunden, die ohne viel Ballast daher kommt und mich weiterhin Herr über meine Daten bleiben lässt ;)

Update vom 10.03.2020:

Folgende Info kam in den Kommentaren von "mba", diese möchte ich euch nicht vorenthalten:

ich habe soeben die aktuelle Baikal Version 0.6.0 (siehe auch sabre.io/baikal/) auf dem aktuellen DSM installiert. Läuft einwandfrei und wie im Blog beschrieben mit MariaDB. Es gibt aber noch ein paar Punkte zu beachten bzw. ergänzen:

1. Ich verwende Apache 2.4 als Backend, und PHP Version 7.2. Mit Nginx hat es nicht auf Anhieb funktioniert.

2. In Web Station muss man zwingend das PHP Profil für PHP 7.2 anpassen. Sonst funktioniert es nicht. Es müssen zwingend ein paar Erweiterungen aktiviert werden, und zwar mindestens openssl, pdo_mysql und phar. Wenn man noch Debug / Error Funktionen aktiviert, findet man in /var/log/httpd ggf. auch Infos dazu, was nicht stimmt, wenn etwas nicht funktioniert.

3. Über die Funktion "Virtueller Host" der Webstation kann man einen virtuellen Webserver erstellen, am besten basierend auf einer spezifischen Port Nummer. Diesen virtuellen Webserver kann man dann direkt auf das HTML Verzeichnis von Baikal legen.Somit sind nur diese Dateien über HTML zugreifbar, nicht jedoch die weiteren Verzeichnisse mit Datenbank-Scripts etc.Dadurch spart man sich, dies mit irgendwelche Apache Konfigurationsdateien selber zurechtzufummeln.

4. Den Port 443 leite ich auf meinem Internet Router auf den Port des virtuellen Hosts der Web Station weiter. Somit komme ich beim Zugriff vom Internet auf meinen Router über Port 443 (Standard HTTPS Port) auf den Baikal Server - und nur dorthin, und nirgendwo anders.

5. Mit der im DSM eingebauten Zertifikats-Funktion kann man per Let's Encrypt Dienst auch ein Zertifikat für HTTPS erstellen lassen.Das funktioniert allerdings nur, wenn zumindest für diesen Vorgang temporär Port 80 und/oder Port 443 der Diskstation (Web Station) von außen erreichbar sind. Dazu musste ich temporär das Port Forwarding am Router ändern. Leider sind die Let's Encrypt Zertifikate nur 3 Monate gültig - aber immerhin sind sie überhaupt gültig und signiert, und dabei kostenlos.

6. Noch ein Hinweis: Den Authentication Type habe ich in Baikal auf "Digest" eingestellt, ansonsten gab es Probleme bei der Authentifizierung mit manchen DAV Clients.

Erfolgreich getestet mit CalDAV Synchronizer für Outlook, sowie DAVx5 für Android. Thunderbird Lightning hatte bei einem kurzen Test nicht auf Anhieb funktioniert, da ich es jedoch nicht aktiv nutze, habe ich nicht weiter geforscht, woran das liegen könnte.

Ich verwende unter Android DAVx5, und für Outlook den CalDav Synchronizer. Mit wiederholten Aufgaben hatte ich in der Tat Probleme, allerdings primär bei Aufgaben mit Wiederholung a la "15 Tage nach der letzten Erledigung". Regelmäßig zum Beispiel "am 15. jedes Monats" hatte glaube ich sogar funktioniert. Da ich die Wiederholungsfunktion selbst aber immer für jede Aufgabe nur auf einem bestimmten Gerät benötige, habe ich die Synchronisierung von Aufgaben-Wiederholungen in CalDav Synchronizer deaktiviert. Damit werden zwar die Aufgaben selbst (die jeweils aktive), nicht jedoch die Wiederholungen synchronisiert. Für meine Zwecke reicht das so aus.