Calendarserver unter Debian einrichten

Geschrieben von Eric Scheibler am 02.10.2010

Ich suchte nach einer Möglichkeit, den Kalender von Lightning (Thunderbird Addon) und den vom iPhone zu synchronisieren, ohne dabei einen Dienst von einem Drittanbieter in Anspruch nehmen zu müssen. Da das iPhone bezüglich der Kalenderformate doch recht eingeschränkt ist, blieb mir nur das CalDAV Protokoll.

Wenn der Server zu Hause betrieben wird, ist die Einrichtung einer DynDNS Domain von Vorteil. So ist der Server auch von unterwegs aus zu erreichen. Ich nutze dafür den kostenlosen Dienst von no-ip.com.

In diesem Artikel beschreibe ich die Einrichtung des Darwin Calendar and Contacts Servers. Außerdem gehe ich auf die Konfiguration der Clients unter iOS und Windows ein. Hier findet sich eine Anleitung für Linux und Android.

Inhaltsverzeichnis

Installation

sudo apt-get install calendarserver

Calendarserver benötigt für das Abspeichern der einzelnen Kalendereinträge die erweiterten Dateiatribute. Sind diese aktiviert, so können Metadaten wie der Autor eines Files zusätzlich hinterlegt werden. XATTR wird vom Kernel ab 2.6 eigentlich standardmäßig unterstützt aber bevor man sie aktiviert schadet es trotzdem nicht, sich von der Unterstützung zu überzeugen:

grep XATTR /boot/config-VERSIONSNUMMER

Findet man im Output von grep u.A. die Zeile

CONFIG_EXT3_FS_XATTR=y

so ist alles in Ordnung und die XATTR’s können aktiviert werden. Dazu öffnet man die FSTab und fügt bei dem Volume / der Partition, die root (/) mountet, das Atribut “user_xattr” ein. Bei mir sieht die Zeile jetzt folgendermaßen aus:

sudo vim /etc/fstab
[...]
/dev/mapper/server-root /               ext3    user_xattr,errors=remount-ro 0       1

Damit die Änderungen wirksam werden, muss der Server neu gestartet werden.

Speicherorte (für Backup)

  • Kalender: /var/spool/caldavd/calendars
  • Logdateien: /var/log/caldavd/

SSL Zertifikat ausstellen

Das Anlegen des SSL Zertifikats habe ich in diesem Artikel beschrieben.

Konfigurationsdateien anlegen und bearbeiten

Calendarserver liefert Beispielconfigs mit, die man jetzt nach /etc/caldavd kopieren muss:

sudo cp /usr/share/doc/calendarserver/examples/accounts.xml /etc/caldavd/
sudo cp /usr/share/doc/calendarserver/examples/sudoers.plist /etc/caldavd/

Calendarserver beim Systemstart aktivieren:

sudo vim /etc/default/calendarserver
# uncomment to start calendarserver on system startup
start_calendarserver=yes

Hauptkonfigurationsdatei:

sudo vim /etc/caldavd/caldavd.plist
[...]
<!--
    Ich möchte mich mit dem Kalenderserver nur via SSL verbinden und
    habe daher den HTTP Port komplett deaktiviert:
-->
<key>HTTPPort</key>
<integer>0</integer>

<!--
    Darunter wählt man dann den SSL Port.
    Diese zeilen sind standardmäßig auskommentiert. Man sollte daher nicht vergessen,
    die Kommentarzeichen zu löschen....:
-->
<key>SSLPort</key>
<integer>30014</integer>

[...]

<!--
    IP Adresse des Servers
-->
<key>BindAddresses</key>
<array><string>192.168.200.200</string></array>

[...]

<!--
    SSL Zertificat
-->
<key>SSLCertificate</key>
<string>/etc/ssl/local/example.org.pem</string>
<key>SSLPrivateKey</key>
<string>/etc/ssl/private/example.org.key</string>

[...]

Benutzer und Passwort anlegen:

sudo vim /etc/caldavd/accounts.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE accounts SYSTEM "accounts.dtd">
<accounts realm="Test Realm">
  <user>
    <uid>admin</uid>
    <password>admin_passwort</password>
    <name>Super User</name>
  </user>
  <user>
    <uid>eric</uid>
    <password>nutzer_passwort</password>
    <name>Eric</name>
  </user>
  <group>
    <uid>users</uid>
    <password>gruppen_passwort</password>
    <name>Users Group</name>
    <members>      <member type="users">eric</member>
    </members>
  </group>
</accounts>

Zum Schluss den Calendarserver neu starten:

sudo /etc/init.d/calendarserver restart

Kalender im Thunderbird einrichten

Dafür braucht man “Lightning” welches man sich gleich im Thunderbird unter Extras –> Addons –> Add-ons suchen installieren kann. Nach einem Neustart von Thunderbird fügt man über Datei –> Neu –> Kalender einen neuen Kalender hinzu und wählt “im Netzwerk”. Im nächsten Dialog wählt man als Kalenderformat “CalDAV” und gibt diese Adresse ein:

https://yourdomain.com:30014/calendars/users/USERNAME/calendar

wobei der Username in meinem Fall “eric” ist. Anschließend noch den Namen des Kalenders angeben und man ist fertig. Mit CTRL + SHIFT + c blendet man den Kalender ein, mit CTRL + w schließt man ihn und mit CTRL + i legt man einen neuen Termin an.

Unter Extras –> Einstellungen –> Lightning kann man dann noch ein paar allgemeine Einstellungen treffen, so habe ich z.B. das Abfrageintervall auf 15 Minuten verkürzt. Ist der Kalender eingeblendet so lassen sich unter Bearbeiten –> Kalender-Eigenschaften die Atribute für den aktuell gewählten Kalender einsehen.

Kalender im iPhone einrichten

Einstellungen –> Mail, Kontakte, Kalender –> Account hinzufügen –> Andere –> Kalender (CalDAV Account hinzufügen) Im nächsten Dialog wird die Serveradresse benötigt. Dabei reicht es, wenn man lediglich “yourdomain.com” angibt. Ich hab da lange versucht, den exakten (ziemlich langen) Pfad zum Kalender reinzuschreiben aber das ist zum einen nicht nötig und funktioniert zum anderen auch nicht. Der Benutzername ist “admin” und das Passwort wurde oben festgelegt. Bei der Beschreibung kann man sich was einfallen lassen, eigentlich egal.

Normalerweise sollte das iPhone bei dem folgenden Verbindungsaufbau automatisch SSL verwenden. Hat man einen abweichenden Port angegeben, kann es allerdings sein, dass das Verbinden nicht sofort funktioniert, dann muss man den Account trotzdem anlegen und wie folgt bearbeiten:

Unter “Mail, Kontakte, Kalender” wurde das neue Konto jetzt hinzugefügt, auswählen und erstmal Serveradresse, Benutzername, Passwort und Beschreibung überprüfen. Anschließend “erweiterte Einstellungen” wählen und dort nachschauen, ob SSL verwendet wird. Nun muss man ggf. noch den oben gewählten Port eintragen, in diesem Beispiel 30014. Die Account-URL, welche den genauen Pfad zum Kalender angibt sollte sich gleich mit anpassen, in meinem Fall lautet sie:

https://yourdomain.com:30014/principals/users/admin

Jetzt 1x zurückgehen und den Kalenderaccount neu initialisieren (deaktivieren / aktivieren), dann sollte es auch funktionieren.

Geht man noch ein Menü zurück, landet man wieder in der Accountliste von “Mail, Kontakte, Kalender”. Als letztes muss man noch die Aktualisierung des Kalenderaccounts anpassen, dazu in das Menü Datenabgleich wechseln. Push habe ich im Allgemeinen aktiviert, funktioniert aber mit dem Kalender nicht. Daher wähle ich weiter unten ein Aktualisierungsintervall von 15 Minuten aus (gilt für alle Programme, die Push nicht unterstützen).

Ein Problem konnte ich allerdings noch nicht lösen: gelegentlich verlangt das iPhone nach dem Aufwachen aus dem Standby bzw. Entsperren die erneute Eingabe des Kalenderpassworts. In diesem Fall hat die Authentifizierung mit dem Server trotz vorhandener Internetverbindung nicht funktioniert. Nachdem ich diesen Dialog abgebrochen habe kann der Kalender manchmal nicht mehr erfolgreich synchronisiert werden, dagegen hilft ein kurzes deaktivieren und anschließendes aktivieren des Kalenderaccounts.

Quellen