[ Sabredav ] Kalender und Kontakte in Sync mit Caldav und Carddav

Mal wieder das alte Leid, Syncronisation.
Heutige Episode: Calendar Sync und Contact Sync.
So etwas wie iCloud oder Google Calendar bzw Google Contacts, aber die Daten bitte beim Besitzer lassen.
Clients: Android Telefon, Linux& Mac Desktop
(theoretisch sollte auch iPhone möglich sein, habe ich allerdings mangels Gerät nicht getestet)

Insgesammt kommen zwei offene Standarts zur Anwendung. Es wird Caldav bzw. Carddav verwendet.

Als Serversoftware ist lediglich ein Stück PHP Code mit Datenbank (Mysql) nötig ( Sabredav ) (sql-lite ist alternativ auch möglich).
Das ganze ist Serverseitig relativ anspruchslos, im Prinzip braucht es nur php und mysql, daher sollte die Software bereits auf einem simplen und günstigen Webhostingpaket laufen.

Auf den Clients kommt unterschiedliche Software zum einsatz:
Der Mac bringt die Software bereits von Hause aus mit (iCal und Adressbuch),
Unter Linux verwende ich Thunderbird mit lightning für den Kalender, und KAddresssBook (KDE) für Kontakte.
Auf dem Android verwende ich CalDav und CardDav Sync Adapter ( ja die kosten ein paar Euro, funktionieren bei mir aber wirklich sehr gut).

Aber zurück zum Server
Das Setup gestaltet sich sehr simpel.
Erst mal Runterladen der PHP dateien, zu finden hier.
Danach kanns losgehen:
Im SabreDav-Archiv befindet sich ein Ordner mit Namen “examples”, in dem die Datein calendarserver.php und addressbookserver.php. Diese am besten in den Hauptordner kopieren, und dort anpassen.
Die Anpassungen sind sehr minimal:

date_default_timezone_set('Canada/Eastern');

wird zu

date_default_timezone_set('Europe/Berlin');

.

// $baseUri = '/';

eventuell einkommentieren und an die eigenen bedürfnisse anpassen.
Selbiges gilt für

$pdo = new PDO('sqlite:data/db.sqlite');

was bei mir zu

$pdo = new PDO('mysql:dbname=HIER_NAME_DER_DB_EINSETZEN','user', 'passwort');

wurde.
Das wars auch quasi schon, lediglich noch die SQL-init scripts aus dem examples/sql auf die Datenbank loslassen (*.addressbook.sql , *.calendars.sql , *.locks.sql, *.principals.sql, *.users.sql (natürlich nur entweder mysql. oder sqllite))

Und schon ist der Server teil einsatzbereit, aber ACHTUNG ! mit dem users.sql script kam ein Benutzer mit Namen admin und passwort admin in die Datenbank, dieser sollte gelöscht und durch einen eigenen User ersetzt werden.
Dazu die vorhandene Zeile in der Users-Tabelle löschen, und eine neue Anlegen.
Die Spalten sind klar, wenn man von digesta1 absieht.
Bei digesta1 handelt es sich um eine “Passwortrepräsentation” in folgender Form:

md5('username:realm:password');

Wobei username und password zu ersetzten sind, realm ist standartmäßig auf “SabreDAV” gesetzt, entscheident dafür ist die folgende Zeile in addressbookserver.php / calendarserver.php:

$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'SabreDAV'));

Hier kann man auch das Realm ändern.

Das wars, viel Spaß beim syncen

This entry was posted in Synchronsiation, Technik and tagged , , , , , , , , , , , , , , , , , . Bookmark the permalink.

12 Responses to [ Sabredav ] Kalender und Kontakte in Sync mit Caldav und Carddav

  1. Spica says:

    Bekomme in iCal die Meldung “Es wurden keine CalDav server gefunden“. Muss ich was anderes als “http://www.example.org/sabredav/calendarserver.php/principals/hank/“ als Caldav account einsetzen?

    • admin says:

      iCal ist da etwas divenhaft,
      bei mir wars sogar so das er nur die Domain des server haben wollte….
      und ich musste dann ihn ewig probieren lassen, bis er meinte er findet nix und mir die chance gab die Adresse von hand ein zu geben.
      das wäre auch hier meine idee… ruhig ewig ical suchen lassen .. irgendwann kann man da dann manuell eine adresse eintragen

  2. Pingback: [ Thunderbird Addon ] Kontaktsync mit dem Donnervogel | ohneKontur - der Blog

  3. Jonas says:

    Servus,

    danke für dein Tutorial!
    Leider komme ich einfach nicht weiter…

    Ich benutze mysql, wenn ich es so schreibe:
    $pdo = new PDO(‘mysql:sqldb’,’user’,’pass’);
    dann bekomme ich diese Meldung:

    PDOException

    SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected

    1.6.2

    Probiere ich es so wie bei dir:
    $pdo = new PDO(‘mysql:dbname=dav’,’user’, ‘passwort’);

    Dann komme ich nicht mit meinem User rein, das passt also… Leider komme ich mit der Fehlermeldung überhaupt nicht klar. HAst du noch eine Idee?

    • admin says:

      Na die Fehlermeldung sagts ja schon, keine Datenbank selektiert.
      du musst dav ersetzten nicht dbname… also es muss heißen

      $pdo = new PDO(‘mysql:dbname=HIER_DEN_NAMEN_DER_DATENBANK_EINFÜGEN’,'user’, ‘passwort’);

  4. NoName :-) says:

    Hallo,

    danke für die Anleitung, folgendes musste ich anders machen:

    $pdo = new PDO(‘mysql:Host=localhost;dbname=XXXX’,’XXXX’,’XXXXX’);

    $baseUri = ‘/addressbookserver.php/’;

    bin kein PHP experte
    Grüße
    Nobody

  5. Björn says:

    Hallo Admin,

    ich bekomme immer die Meldung “Authentifizierung erforderlich”. Versuch es noch mit dem admin admin aber keine Chance! No digest authentication headers were found

    Eventuell eine Lösung für mich?

  6. zimon says:

    Hi,

    was ich auch sehr interessant finde ist das Projekt owncloud. Das ist eine auf PHP und JS basierte Carddav, Caldav und Webcal Lösung mit Weboberfläche und jeder Menge Plugins (Musikplayer, Texteditor, Photoalben, PDF Viewer, …). Natürlich kann man auch Carddav-, Caldav- und Webdav Clients dagegen synchronisieren.

    Das Projekt ist sehr aktiv und definitiv einen Blick wert: http://owncloud.org

    Viele Grüße
    zimon

    • admin says:

      owncloud verwendet im Hintergrund ebenfalls sabredav (zumindest als ichs mir zu letzt angesehen habe)
      und da war es leider auch noch sehr alpha stadiumsartig… aber die Idee ist auf jeden fall super und das Projekt unterstützenswert

  7. Christoph S. Ackermann says:

    Kann SabreDAV auch einer bestehenden Datenbank angehängt werden, die bereits mit Daten gefüllt ist?
    Wo kann man das Mapping umstellen?

    Geht aktuell um ein Adressbuch…

  8. Guenter says:

    lediglich noch die SQL-init scripts aus dem examples/sql auf die Datenbank loslassen

    An dieser Stelle komme ich nicht weiter. Muss ich die Datenbank mit CRATE DATABASE vorher anlegen? Mit welchen Befehlen lasse ich die Scipts auf die Datenbank los?

    Sonst ist das eine sehr Gute Anleitung!

    • admin says:

      Ja die Datenbakn muss vorher angelegt werden.
      In diesen Scripten stehen einfach SQL-Syntax, die von der Datenbank interpretiert werden müssen.
      Dazu gibt es viele Möglichkeiten, von der Console und dem Mysql Programm bishin zu PHPMyAdmin ist da alles möglich um die SQL Befehle auszuführen.

Leave a Reply

Your email address will not be published. Required fields are marked *