Switch to full style
Antwort erstellen

WebDAV, CalDAV und CardDAV auf eigenem Server

Fr Apr 27, 2012 15:53

Ich wollte schon lange einmal ein Tutorial dazu schreiben - und endlich hatte ich einige Stunden Zeit das ganze wieder weiter zu testen. Angefangen habe ich ungefähr vor einem Jahr mit diesem Beitrag hier:
viewtopic.php?f=17&t=57169

und fertig gebracht hatte ich es auch wieder mit eurer Hilfe:
viewtopic.php?f=5&t=61891

Für eure Hilfe bedanke ich mich natürlich! Ich hoffe, ich kann mit diesem Tutorial euch helfen. Für Input und Korrekturen bin ich natürlich ebenfalls dankbar :-)

Also, untenstehender Text fürs How-TO:
---------- HOW - TO ------------
Kurzbeschreibung:
Dieses How-To soll erklären, wie ihr auf eurem Webhoster eine eigene "iCloud" einrichten und damit das Adressbuch und iCal auf mehreren Geräten abgleichen könnt. Zusätzlich kann man noch einen WebDAV Server einrichten um z.B. eine "Web-Festplatten-Abbildung" zu haben.

Benötigt wird: Ein eigener Webspace mit MySQL und PHP 5.2 oder höher.

Schwierigkeitsgrad: Fortgeschritten

Nebenbemerkungen: SabreDAV ist eine sehr mächtige PHP Erweiterung. Selbstverständlich lassen sich damit noch viele weitere Sachen anpassen etc. Auch müsste es funktionieren, das ganze auf einem MAMP Server laufen zu lassen - dieses Tutorial beschränkt sich aber auf die Anwendung auf einem Webspace. Gerne können wir unten noch eine Anleitung für MAMP platzieren.

Zudem ist zu Bedenken, das mit diesem Tutorial das ganze auf einem normalen, nicht SSL gesicherten Server läuft - ein Passwort also immer unverschlüsselt mitgeschickt wird.

Ich wollte mit diesem How-To aber Speziell die Normal-Anwender ansprechen und habe es deshalb so einfach wie möglich gehalten. Der Schwierigkeitsgrad dieses Tutorial bezeichne ich als Fortgeschritten, da es bei Problemen oft vom Nutzer abhängt, ob er diese lösen kann - Hilfestellung übers Forum ist natürlich immer gut und ich werde versuchen, auftretende Fragen zu lösen bzw. mit eurer Hilfe zu bearbeiten. Oft benötigt man dafür aber viel Zeit und Zugriff auf eure Server - vor allem ersteres fehlt mir häufig :-)

Prozedur:

1. Server einrichten

1.1 MySQL Datenbank
Als erstes muss man auf dem Webspace eine neue MySQL Datenbank generieren. Ich habe für unser Beispiel folgende Daten:
Datenbank: macsofa
Login: sofa-db
Passwort: sofa-pw

1.2 Subdomain einrichten
Da vor allem der CardDAV Service gerne als Root läuft, schlage ich vor, wir legen eine eigene Subdomain an. In unserem Beispiel nenne wir es wie folgt:
macsofa.deinedomain.de

(Auf unserem Test-Server heisst es: macsofa.ndsign.ch)

2. Passwort und Benutzername generieren
SabreDAV benötigt für den aktiven Service natürlich auch noch einen Benutzername und ein Passwort. Dies wird dann in der Datenbank vermerkt.

Als erstes müssen wir also ein Passwort generieren. Dafür habe ich ein kurzes Script geschrieben:
:arrow: http://macsofa.ndsign.ch/password_maker.php

Ich habe für unser Beispiel folgenden Eingaben gemacht:
Username: macsofa
Passwort: ******

das generierte Passwort für die Datenbank lautet also wie folgt:
ac99dbfff3204e1d731c6588c2b1761a

3. Datenbank-Einträge
Als nächstes müssen wir in unserer mySQL Datenbank die benötigten Tabellen und Einträge generieren.
Auf meinem Server verwendet man dazu phpMyAdmin. Ich habe auf meinem Server ein File mit allen benötigten Befehlen bereitgestellt:
:arrow: http://macsofa.ndsign.ch/mysql.txt

Wie ihr in dem Dokument sehen könnt, werden zuerst einig Tabellen kreiert und dann einige Daten eingetragen. Vorallem diese Befehle mit "INSERT INTO" muss man genau anschauen. Habt ihr jetzt als Benutzername nicht macsofa gewählt, müsst ihr dies bei folgenden Einträgen ändern:

Code:
INSERT INTO principals (uri,email,displayname) VALUES
('principals/macsofa', 'macsofa@euredomain.de','Adminstrator'),
('principals/macsofa/calendar-proxy-read', null, null),
('principals/macsofa/calendar-proxy-write', null, null);

INSERT INTO users (username,digesta1) VALUES
('macsofa',  'ac99dbfff3204e1d731c6588c2b1761a');

INSERT INTO addressbooks (principaluri, displayname, uri, description, ctag) VALUES
('principals/macsofa','default calendar','default','','1');

INSERT INTO calendars (principaluri, displayname, uri, description, components, ctag) VALUES
('principals/macsofa','default calendar','default','','VEVENT,VTODO','1');


Also überall wo macsofa steht, muss euer neuer Benutzername gewählt sein. Zudem müsst ihr bei:
Code:
INSERT INTO users (username,digesta1) VALUES
('macsofa',  'ac99dbfff3204e1d731c6588c2b1761a');

Den Code "ac99dbfff3204e1d731c6588c2b1761a" mit eurem generierten Passwort ersetzen.

Bemerkung:
Oberhalb seht ihr noch die Email Adresse "macsofa@euredomain.de" - die ihr natürlich auch mit eurer eigenen Email-Adresse tauschen könnt.

Wenn ihr alle Änderungen gemacht habt, könnt ihr den Code via phpMyAdmin in eure Datenbank eintragen.

4. SabreDAV runterladen
Nun benötigt ihr eine Version von SabreDAV. Ich habe für unser Beispiel Version 1.5.9 gewählt. Diese findet ihr zum Download hier (vorsicht, direktlink):
:arrow: http://sabredav.googlecode.com/files/SabreDAV-1.5.9.zip

In dieser Zip Datei befindet sich verschiedene Ordner. Für uns wichtig ist der Ordner "lib" - den ich zu "lib-1.5.9" umbenne und auf unseren Server lade.
Also auf unsere subdomain.deinedomain.de

5. PHP Dokumente
Ich habe hier nun 3 PHP Dokumente, die ihr auf den Server laden müsst:

index.php
Code:
<?php

/*

Addressbook/CardDAV server example

This server features CardDAV support

*/

// settings
date_default_timezone_set('Europe/Zurich');

// Make sure this setting is turned on and reflect the root url for your WebDAV server.
// This can be for example the root / or a complete path to your server script
$baseUri = '/index.php';

/* Database */
$pdo = new PDO('mysql:host=localhost;dbname=macsofa','sofa-db','sofa-pw');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//Mapping PHP errors to exceptions
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

// Autoloader
require_once 'lib-1.5.9/Sabre/autoload.php';

// Backends
$authBackend      = new Sabre_DAV_Auth_Backend_PDO($pdo);
$principalBackend = new Sabre_DAVACL_PrincipalBackend_PDO($pdo);
$carddavBackend   = new Sabre_CardDAV_Backend_PDO($pdo);

// Setting up the directory tree //
$nodes = array(
    new Sabre_DAVACL_PrincipalCollection($principalBackend),
    new Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend),
);

// The object tree needs in turn to be passed to the server class
$server = new Sabre_DAV_Server($nodes);
$server->setBaseUri($baseUri);

// Plugins
$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'SabreDAV'));
$server->addPlugin(new Sabre_DAV_Browser_Plugin());
$server->addPlugin(new Sabre_CardDAV_Plugin());
$server->addPlugin(new Sabre_DAVACL_Plugin());

// And off we go!
$server->exec();


icalserver.php
Code:
<?php


// settings
date_default_timezone_set('Europe/Zurich');

// If you want to run the SabreDAV server in a custom location (using mod_rewrite for instance)
// You can override the baseUri here.
// $baseUri = '/';

/* Database */

$pdo = new PDO('mysql:host=localhost;dbname=macsofa','sofa-db','sofa-pw');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//Mapping PHP errors to exceptions
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

// Files we need
require_once 'lib-1.5.9/Sabre/autoload.php';

// The 'caldav server' only needs the pdo object. Note that if you plan to
// extend the server in any way, you'll probably don't want to use
// Sabre_CalDAV_Server, but plain Sabre_DAV_Server instead.
// You'll need to add your own nodes and plugins manually then.
$server = new Sabre_CalDAV_Server($pdo);

if (isset($baseUri))
    $server->setBaseUri($baseUri);

// Support for html frontend
$browser = new Sabre_DAV_Browser_Plugin();
$server->addPlugin($browser);

// And off we go!
$server->exec();


fileserver.php
Code:
<?php

require_once 'lib-1.5.9/Sabre/autoload.php';

// Change public to something else, if you are using a different directory for your files
$rootDirectory = new Sabre_DAV_FS_Directory('webdavserver');

// The server object is responsible for making sense out of the WebDAV protocol
$server = new Sabre_DAV_Server($rootDirectory);

$pdo = new PDO('mysql:dbname=macsofa','sofa-db','sofa-pw');

// Throwing exceptions when PDO comes across an error:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Creating the backend
$authBackend = new Sabre_DAV_Auth_Backend_PDO($pdo);

// Creating the plugin. We're assuming that the realm
// name is called 'SabreDAV'.
$authPlugin = new Sabre_DAV_Auth_Plugin($authBackend,'SabreDAV');

// Adding the plugin to the server
$server->addPlugin($authPlugin);

// The lock manager is reponsible for making sure users don't overwrite each others changes. Change 'data' to a different
// directory, if you're storing your data somewhere else.
$lockBackend = new Sabre_DAV_Locks_Backend_File('mysql:dbname=macsofa','sofa-db','sofa-pw');
$lockPlugin = new Sabre_DAV_Locks_Plugin($lockBackend);

$server->addPlugin($lockPlugin);

// Prevent temporary files:
$tffp = new Sabre_DAV_TemporaryFileFilterPlugin('webdavserver/.tmp');
$server->addPlugin($tffp);

// More available plugins:
//$server->addPlugin(new Sabre_DAV_Mount_Plugin());
//$server->addPlugin(new Sabre_DAV_Browser_GuessContentType());

// All we need to do now, is to fire up the server
$server->exec();



und ein .htaccess Dokument - welches die RewriteEngine des Apache Servers aktiviert.
(Diese Datei hat sich bei mir vorallem für CardDAV auf dem iPhone OS 4.2.1 als wichtig erwiesen. Ev. wird sie bei OS 5.x nicht benötigt.)

.htaccess
Code:
RewriteEngine On
RedirectMatch ^/$ /index.php/


Wie ihr seht, greifen alle 3 Dokumente auf eure Datenbank zu. D.h. wenn eure Datenbank einen anderen Namen bzw. Benutzername/Passwort habt, müsst ihr dies ändern bei:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=macsofa','sofa-db','sofa-pw');


6. WebDAV Verzeichnis
Für den WebDAV Service wollen wir noch einen Ordner "webdavserver" anlegen, dem wir alle Schreib und Leserechte zuweisen. Falls ihr diesen Ordner anders benennen wollt, könnt ihr das im fileserver.php ändern:
Code:
$rootDirectory = new Sabre_DAV_FS_Directory('webdavserver');


Zusätzlich richten wir in diesem Ordner einen Ordner .tmp ein - in diesem werden dann alle Temporären Dateien gespeichert, da sonst der Hauptordner mit .DS_Store Dateien oder ähnlichem zugemüllt werden kann. Man kann diesen Ordner z.B. mit einem Cronjob einmal wöchentlich leeren.

7. iCal einrichten
7.1 MacOS X 10.6.8
Unter "iCal/Einstellungen" den Punkt Accounts anwählen und ein neues Konto hinzufügen.
Account-Typ: CalDAV
Username: macsofa
Passwort: ******
Server-Adresse: http://deinesubdomain.deinedomain.de/ic ... s/macsofa/

Auch hier musst ihr macsofa zu eurem Benutzernamen ändern.

Danach die Meldung bestätigen, dass es sich um einen unsicheren Server handelt.
Fertig!

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
http://macsofa.ndsign.ch/icalserver.php ... s/macsofa/

7.2 iOS 4.2.1
Unter "Einstellungen/Mail, Kontakte, Kalender/Account hinzufügen" ein neues Konto eröffnen:

--> Andere --> CalDAV-Account hinzufügen:

Server-Adresse: http://deinesubdomain.deinedomain.de:80 ... als/admin/
Username: macsofa
Passwort: ******
Beschreibung: iCal Server (z.B. hier geht natürlich auch etwas anderes..)

Auf Überprüfen klicken und warten bis die Meldung kommt:
"Verbindung über SSL unmöglich". Hier auf Fortfahren drücken…

Fertig. Der CalDAV Account müsste nun in der Application Kalender auftauchen.

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
http://macsofa.ndsign.ch:80/icalserver. ... s/macsofa/

7.3 Für 10.7.x
Bitte nachtragen

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
http://macsofa.ndsign.ch/icalserver.php ... s/macsofa/

7.4 iOS 5.x
Bitte nachtragen

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
http://macsofa.ndsign.ch/icalserver.php ... s/macsofa/


8. Adressbuch einrichten
8.1 MacOS X 10.6.8
Unter Adressbuch/Einstellungen/Accounts
ein neues Konto eröffnen:
Account Typ: CardDAV
Benutzername: macsofa
Passwort: ******
Server Adresse: deinesubdomain.deinedomain.de

Auf "Erstellen" drücken und warten…

Es erscheint eine Fehlermeldung - die wir mit einem Klick auf "Erstellen" aber missachten.
Nun muss das Adressbuch beendet werden -> Befehl-Q

Im Finder unter DeinemBenutzername/Library/Application Support/Addressbook/Sources/
gibt es einen neuen Ordner, der ungefähr so heisst: EBEAA5F7-40F7-45C8-86DD-FDFFAAD26976
(oder so ähnlich..)
Darin befindet sich die Datei configuration.plist - diese öffnen und den Link anpassen:
<key>servername</key>
<string>http://:0(null)</string>
Ersetzen durch:
<key>servername</key>
<string>http://deinesubomain.deinedomain.de:80/index.php/principals/macsofa</string>

Die Datei sichern und wieder schliessen. Nun Adressbuch öffnen - Voilà!

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
Link für Config. Datei:
http://macsofa.ndsign.ch:80/index.php/p ... ls/macsofa

8.2 iOS 4.2.1
Unter "Einstellungen/Mail, Kontakte, Kalender/Account hinzufügen" ein neues Konto eröffnen:

--> Andere --> CardDAV-Account hinzufügen:

Server-Adresse: http://deinesubdomain.deinedomain.de/
Username: macsofa
Passwort: ******
Beschreibung: Adressbuch Server (z.B. hier geht natürlich auch etwas anderes..)

Auf Überprüfen klicken (dies kann einige Sekunden bis Minuten dauern…) und warten bis die Meldung kommt:
"Verbindung über SSL unmöglich". Hier auf Fortfahren drücken…
Es wird erneut überprüft, was einige Sekunden bis Minuten dauert.

Fertig. Der CardDAV Account müsste nun in der Application Kontakte zu sehen sein.

Anbei die Adresse zu unserem Test-System:
Login: macsofa / Passwort: ******
http://macsofa.ndsign.ch/

8.3 Für 10.7.x
Bitte nachtragen

8.4 iOS 5.x
Bitte nachtragen


9. WebDAV Service nutzen
9.1 Finder unter 10.6.8
Befehl-K im Finder drücken und die Adresse eingeben:
subdomain.deinedomain.de/fileserver.php
Login: macsofa
Passwort: ******

9.2 Transmit 4 unter 10.6.8
In den Reiter "WebDAV" wechseln und folgendes eingeben:
Server: subdomain.deinedomain.de
User Name: macsofa
Passwort: ******
Initial Path: /fileserver.php

10. Nachbemerkungen
Ich habe dieses Tutorial schon lange schreiben wollen und endlich hatte ich Zeit, das ganze noch einmal durchzuspielen. CardDAV war auch noch nicht so gut entwickelt - und hat wie ihr seht, noch einige Probleme vor allem unter 10.6.

Alles in allem sollte es aber so klappen. Am besten ist es vielleicht, das ganze mal 1:1 so durchzuspielen - falls möglich mit den gleichen Datenbank Namen etc.

CalDAV läuft bei mir schon seit über 1 Jahr auf 2 Macs und dem iPhone ohne Probleme.
CardDAV hatte ich bis jetzt noch nicht in Verwendung, sollte aber auch klappen!

WICHTIG: Natürlich kann es vorallem in den Test-Phasen immer zu Datenverlust kommen! Deshalb rate ich zu einem Backup von allen Kalender und Adressbuch-Einträgen!

Ich habe alles auf meinem Server eingerichtet und als Test-Umgebung kann man damit gut rumspielen:

Adressbuch: macsofa.ndsign.ch
iCal: macsofa.ndsign.ch/icalserver.php
WebDAV: macsofa.ndsign.ch/fileserver.php

Login: macsofa
Passwort: ******

SabreDAV bietet auch eine Ansicht für den Browser an. Diese ist aber noch nicht ausgereift und deshalb gehe ich hier nicht darauf ein, ausser: Bitte lasst die Finger davon. Fügt Adressen und Kalendereinträge nur über iCal, Adressbuch etc. hinzu, nie über euren Browser - Probleme sind sonst vorprogrammiert.

Ich wünsche gutes Ausprobieren und hoffe, es klappt!

Getestet wurde es bei mir mit OS X 10.6.8 und iOS 4.2.1
-------------------

So, liebe Sofisti, jetzt wäre eure Hilfe gefragt: Bitte versucht das ganze zu reproduzieren und stellt fragen, falls Punkte unklar sind.
Zudem wäre es schön, wenn ihr die Punkte:
7.3 und 7.4 bzw. 8.3 und 8.3 nachtragen könnt - da ich hier weder mit Lion noch mit iOS 5.x unterwegs bin. Wie ihr aus dem Text rauslesen könnt, ist unser Testsystem wie folgt:
Für CardDAV:
macsofa.ndsign.ch

Für CalDAV:
macsofa.ndsign.ch/icalserver.php/principals/macsofa/

Login: macsofa
Passwort: ******

Ich hoffe, ich konnte ich mit diesem Tutorial eine Freude machen :-) Es war auf alle Fälle sehr anstrengend! Puuh!

Anmerkung: Das Passwort für die CardDAV, CalDAV und WebDAV Services wurde geändert um möglichem Missbrauch vorzubeugen.
Das Test-System belasse ich aber auf dem Server - d.h. wenn ihr das Test-System ausprobieren wollt, bitte ich um Passwortanfrage via PM.
Ich gebe dies gerne bekannt für Test-Zwecke!


Gruss
Zuletzt geändert von affenschwanz am So Mai 06, 2012 12:49, insgesamt 3-mal geändert.

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Fr Apr 27, 2012 17:12

Fein gemacht.
Ich bin ja grad dabei, die OwnCloud Dateien auf meinen Server hochzuladen, um damit rumzuspielen. Wenn es soweit ist könnte man das als einfachere Variante (da [d]alles[/d] vieles schon vorkonfiguriert) sicher hier anhängen. Zumindest auf meiner Synology läuft das ganze bis jetzt zufriedenstellend. Nun eben der Test mit gemietetem Webspace.

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Fr Apr 27, 2012 17:53

@ affenschwanz

Supi – herzlichen Dank! :) Ich würde den Thread eine Woche für Fachgesimpel usw. im Tratsch stehen lassen, bevor´s ins Wie & Was geht.

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Fr Apr 27, 2012 17:56

@MMF: Ja super!
@kaulebeen: Perfekt! :-)
Gruss

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Fr Apr 27, 2012 19:46

@Affenschwanz: Fetten Reschpeckt, Glueckwunsch und viiiielen Dank !!!!
Ich grueble schon eine Weile darueber sowas nur fuer das Heimnetzwerk zu machen und war erst diese Woche - dank Deinem Thread - ueber CardDAV und OwnCloud gestolpert und nun hast Du es quasi von Hand gebaut - schoenes Ding.

Ich hoffe das CalDAV und CardDAV Standards bleiben - dann ist das die Zukunft.

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Sa Apr 28, 2012 20:34

:) Könntest du mal ausprobieren, ob du's mit meinem Tutorial schaffst? Ev. noch die Punkte 7.3, 7.4 bzw. 8.3 und 8.4 nachtragen?

Das wär super!
Gruss

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

Sa Apr 28, 2012 20:38

Im Prinzip liesse sich das ganze auch via PHP installieren, ähnlich der Own-Cloud.. das würde aber noch einmal einige Stunden PHP Entwicklung bedeuten - wofür ich keine Zeit habe (wenns kein Geld gibt ;) )...

Vielleicht hat ja jemand anders hier im Forum dazu Lust?
Gruss

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

So Apr 29, 2012 9:30

Diesen Monat habe ich sicher keine Zeit mehr es auszuprobieren. 7.3 und 7.4 zu Testen ist ja kein großer Akt aber habe weder Lion noch iOS5 in Gebrauch (neumodernes Teufelszeugs)

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

So Apr 29, 2012 18:21

duke98 hat geschrieben:Diesen Monat habe ich sicher keine Zeit mehr es auszuprobieren. 7.3 und 7.4 zu Testen ist ja kein großer Akt aber habe weder Lion noch iOS5 in Gebrauch (neumodernes Teufelszeugs)


Der Monat geht ja nur noch 2 Tage ;-)

Aber bin im Moment eben auch noch ohne Teufelszeug unterwegs hihi...
Dann hoffen wir auf geballte Sofa-Kompetenz!

Gruss

Re: Fürs How-To: WebDAV, CalDAV und CardDAV auf eigenen Serv

So Apr 29, 2012 19:15

Mein Monat geht noch 32 Tage ...

Die Sofisten die Lion nutzen werden Dir nicht helfen, weil Du an der iCloud vorbei arbeitest und dass ist schon ein Stueck weit blasphemisch.
*duckundweg*
Antwort erstellen