DAViCal installieren
Allgemein
Beschreibung
DAViCal ist ein Server für die Verwaltung von Kalendern über das CalDAV-Protokoll. Die Kalenderdaten können mit allen CalDAV-fähigen Client-Programmen gelesen und geschrieben werden, z.B. Thunderbird mit Lightning, Evolution, Mulberry, iCal, oder iPhone.
Das CalDAV-Protokoll bietet viele Funktionen, die noch nicht von allen Clients unterstützt werden, darunter Serien, Erinnerungen, Einladungen, Ressourcen, Arbeitsgruppen etc.
DAViCal ist in PHP geschrieben, lizensiert unter GPL.
DAViCal erlaubt auch über das WebDAV-Protokoll Kalender zu lesen, aber nicht zu modifizieren.
Voraussetzungen
DAViCal erfordert folgende technische Ressourcen:
- PostgreSQL
- Webserver mit PHP5
- Perl für den Installationsvorgang
- Ein Dateisystem mit erweiterten Attributen.
Die Installations-Anleitung auf der Projekt-Homepage geht davon aus, daß mal als Administrator auf den Server zugreifen kann. Die Anleitung hier beschreibt, wie man konkret DAViCal in der Shared-Hosting-Umgebung bei Hostsharing installiert und betreibt.
Installation
Design
Diese Installationsanleitung beschreibt, wie DAViCal in einer eigens dafür aufgeschalteten Subdomain über SSL betrieben wird. Für andere Konfigurationen, wie z.B. die Installation von DAViCal in einer als Unterverzeichnis von domain/subs/ erstellten Subdomain, muß dieses Verfahren leicht angepaßt werden.
Der Vorteil einer Installation in einer aufgeschalteten Subdomain ist, daß die Installation leicht von den übrigen Domaininhalten isoliert werden kann, z.B. php-Konfiguration oder auch anderen Domain-Admin.
Subdomain aufschalten
Für diese Anleitung werden folgende Daten als Konvention angenommen
Typ | Wert | Beschreibung |
---|---|---|
(Sub)-Domain | cal.example.org | Die Sub-Domain unter der der DAViCal-Server betrieben wird |
Domain-Admin | xyz00-hans | Der User, dem die Sub-Domain delegiert wurde |
Quellen
Für DAViCal werden neben dem eigentlichen Sourcecode des Projekts noch die PHP-Library Andrew's Web Libraries benötigt. Beides findet sich auf derselben Webseite.
Die jeweils neuste Versionen befinden sich unter
- DAViCal: http://debian.mcmillan.net.nz/packages/davical/
- AWL: http://debian.mcmillan.net.nz/packages/awl/
Hier jeweils die Source-Dateien *.tar.gz benutzen
Download
$ cd /home/doms/cal.example.org/var $ wget http://debian.mcmillan.net.nz/packages/awl/awl-0.46.tar.gz $ wget http://debian.mcmillan.net.nz/packages/davical/davical-0.9.9.4.tar.gz
Auspacken
Um die Dateien für den Betrieb in der Serverumgebung lesbar zu machen wird die Dateierzeungsmaske temporär auf 022 gesetzt.
Symbolische Links erzeugen generische Verzeichnise davical und awl, die auf die jeweils installierte Version zeigen. Dies erleichtert spätere Versionswechsel.
$ umask 022 $ tar xfvz awl-0.46.tar.gz $ tar xfvz davical-0.9.9.4.tar.gz $ ln -s awl-0.46 awl $ ln -s davical-0.9.9.4 davical $ umask 077
PostgreSQL vorbereiten
Es wird eine eigene PostgreSQL-Datenbank benötigt, sowie 2 Datenbanknutzer.
Datenbank und -Nutzer anlegen
Typ | Wert | Beschreibung |
---|---|---|
DB-Admin | xyz00_davical_dba | Der PostgreSQL-Nutzer, dem die Datenbank gehört und administrative Tätigkeiten durchführt |
DB-Nutzer | xyz00_davical_app | Der PostgreSQL-Nutzer, der über DAViCal auf die Datenbank lesen/schreibend zugreift |
Datenbank | xyz00_davical | Die Datenbank, die alle Daten für den DAViCal-Server enthält |
Umgebungsvariablen und .pgpass
Die Nutzer und die Datenbank können über Hsadmin angelegt werden. Dabei wird xyz00_davical_dba als Datenbank-Besitzer angegeben. Als Zeichensatz UTF-8 (Default) auswählen.
Sowohl für die weitere Installation, als auch für den Betrieb des Servers ist es am besten die Passwörter in die .pgpass-Datei zu schreiben, dann müssen sie nicht innerhalb der PHP-Dateien angebenen werden, bzw. während der Installation manuell eingegeben werden.
$ echo "localhost:5432:*:xyz00_davical_dba:geheimes_passwort" >> ~/.pgpass $ echo "localhost:5432:*:xyz00_davical_app:geheimes_passwort" >> ~/.pgpass $ chmod 0600 ~/.pgpass
Darüberhinaus werden noch Umgebungsvariablen gesetzt, so daß beim Aufruf von psql über die Kommandozeile Datenbankname/Nutzer nicht eingegeben werden müssen. Diese Angaben sind nach Beenden der Shell-Sitzung automatisch zurückgesetzt.
$ PGHOST=localhost $ PGUSER=xyz00_davical_dba $ PGDATABASE=xyz00_davical $ export PGHOST PGUSER PGDATABASE
PL/pgSQL installieren
In der Datenbank wird die prozedurale Sprache PL/pgSQL benötigt. Diese kann folgendermaßen angelegt werden:
$ psql -A -c "CREATE LANGUAGE plpgsql;"
Datenbank-Tabellen anlegen und initialisieren
DAViCal enthält ein eigenes Installations-Skript, das die PostgreSQL-Tabellen anlegt und initialisiert. Dies liegt unter davical/dba/create-database.sh. Hier wird aber davon ausgegegangen, daß man Adminrechte hat, was in der Shared-Hosting-Umgebung nicht der Fall ist.
Das Anlegen der Datenbank, der -Nuter und kreieren von PL/pgSQL wurde bereits oben beschrieben. Darüberhinaus sind noch folgende Befehle auszuführen. Diese können in dieser Form einfach nacheinander ausgeführt werden, wenn wie oben beschrieben die PG* Umgebungsvariablen gesetzt wurden und die .pgpass-Datei gefüllt wurde.
$ psql -A -f awl/dba/awl-tables.sql $ psql -A -f awl/dba/schema-management.sql $ psql -A -f davical/dba/davical.sql $ ./davical/dba/update-davical-database –dbhost=${PGHOST} –dbuser=${PGUSER} –dbname=${PGDATABASE} --appuser=${PGDATABASE}_app The database is version 8.4 currently at revision 1.2.9. No patches were applied. Supported locales updated. Updated view: dav_principal.sql applied. CalDAV functions updated. RRULE functions updated. Database permissions updated. $ psql -A -f davical/dba/base-data.sql
Für den DAViCal-Admin muß noch ein Passwort gesetzt werden – '**' vor dem Passwort ist hier wichtig.
$ psql -A -c "UPDATE usr SET password = '**geheim' WHERE user_no = 1;"
Konfiguration
DAViCal kann über eine config.php konfigriert werden. Eine Beispiel-Datei ist unten abgebildet. Details sind im DAViCal-Wiki zu finden.
$ cat > davical/config/config.php $c->pg_connect[] = "dbname=xyz00_davical user=xyz00_davical_app host=localhost"; $c->use_persistent = true; $c->sysabbr = 'cal@example.org'; $c->admin_email = 'admin@cal.example.org'; $c->system_name = 'CalDAV Server example.org'; $c->default_locale = 'de_DE'; $c->template_usr = array( 'active' => true, 'locale' => 'de_DE', 'date_format_type' => 'E', 'email_ok' => date('Y-m-d') ); ^D
Fast-CGI Patch
Bei der Benutzung von Fast-CGI werden die HTTP_AUTHORIZATION Header normalerweise nicht weitergeleitet. Dieses Problem wird auch im DAViCal-Wiki in einem entsprechenden FAQ-Eintrag behandelt, aber dort unter der Annahme gelöst, daß man Adminrechte hat.
In der Shared-Hosting-Umgebung von Hostsharing kann dies auch über ein Redirect in der .htaccess-Datei gemacht gelöst werden:
$ cd /home/doms/cal.example.org/htdocs-ssl $ cat >> .htaccess RewriteEngine on RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] ^D
Diese Regel muß die letzte in der .htaccess sein. Die Datei muß für alle lesbar sein:
$ chmod 0644 .htaccess
Darüberhinaus muß noch die Datei davical/inc/HTTPAuthSession.php angepasst werden. Hier ist die Variable $_SERVER["AUTHORIZATION"] ersetzt werden durch $_SERVER["REDIRECT_HTTP_AUTHORIZATION"]. Außerdem gibt es noch einen Bug: Es wird an einer Stelle split() statt explode benutzt. split() ist seit PHP 5.3.0 deprecated.
@@ -87,8 +87,8 @@ /** * Get HTTP Auth to work with PHP+FastCGI */ - if (isset($_SERVER["AUTHORIZATION"]) && !empty($_SERVER["AUTHORIZATION"])) { - list ($type, $cred) = split (" ", $_SERVER['AUTHORIZATION']); + if (isset($_SERVER["REDIRECT_HTTP_AUTHORIZATION"]) && !empty($_SERVER["REDIRECT_HTTP_AUTHORIZATION"])) { + list ($type, $cred) = explode (" ", $_SERVER['REDIRECT_HTTP_AUTHORIZATION']); if ($type == 'Basic') { list ($user, $pass) = explode (":", base64_decode($cred)); $_SERVER['PHP_AUTH_USER'] = $user; }
Webspace aktivieren
Schließlich muß die Installation noch mit dem Webspace verknüpft werden.
$ cd /home/doms/cal.example.org $ rm htdocs-ssl $ ln -s var/davical/htdocs htdocs-ssl
Die URL des User-Interfaces lautet: https://cal.example.org
Wenn alles richtig gemacht wurde, erscheint der Login-Screen.
Nutzung
User anlegen und konfigurieren
Im User-Interface muß man sich als Admin (oder Nutzer mit Adminrechten) einloggen um neue Nutzer anzulegen.
Um einen neuen Nutzer anzulegen: Menu → User Functions → Create Principal
Feld | Wert | Beschreibung |
---|---|---|
Principal ID | New Principal | Bei neuen Nutzern wird das Feld automatisch beim Anlegen gefüllt |
Username | hans | Nutzername für den Kalender. Der Username ist Bestandteil der Kalender-URL |
Change Password | geheimespasswort | |
Confirm Password | geheimespasswort | |
Fullname | Hans Meier | Der Name des Nutzers |
Email Address | hans@example.org | Über die Email-Adresse ist der Nutzer für andere Nutzer im System zu finden, z.B. für Einladungen |
Locale | Deutsch | |
Date Format Style | European | |
Principal Type | Person | Üblicherweise Person für einen natürlichen Nutzer (hier können auch Ressourcen und Gruppen angelegt werden) |
Administrator | – | Falls der User Adminrechte bekommen soll |
Active | X | Soll der Nutzer aktiv geführt werden? |
Beim Anlegen des ersten Nutzers erscheint eine Fehlermeldung:
ERROR: SQL error "23505" - ERROR: duplicate key value violates unique constraint "principal_pkey""
Home calendar added.
Dies ist ein Bug. Siehe auch Thread in Dev-Mailingliste.
Zum Umgehen des Bugs einfach den Nutzer nochmal anlegen und dann funktioniert alles ;-)
Zugriff über Client-Programme
Der Zugriff auf den Kalender erfolgt über die URL: https://cal.example.org/caldav.php/user/home
- user = Name des angelegte Nutzers, also z.B. hans
- home = Name des angelegten Kalenders; dies ist standardmäßig home. Andere Kalender (collection) können im User-Interface vom Nutzer angelegt werden, oder durch einen Client, der MKCALENDAR implementiert hat, so z.B. iCal oder Mulberry
Beispiel Thunderbird
Ist in Thunderbird die Lightning-Erweiterung installiert, dann kann der Kalender folgendermaßen eingerichtet werden:
Menu → Datei → Neu → Kalender
Auf den Folgenden Seiten ist auszuwählen:
- Im Netzwerk
- CalDAV
- Spezifische Angaben
- Name, z.B. hans@example
- Farbe: auswählen in welcher Farbe der Kalender angezeigt werden soll
- Alarm: ja
- Email: Email auswählen
Zusätzlich wird es wahrscheinlich noch eine Wahrnung geben, daß das SSL-Zertifikat ungültig ist, da in der Standard Hostsharing Konfiguration das hostsharing-Zertifikat ausgeliefert wird. Dieses muß dann noch importiert und akzeptiert werden.
Thunderbird fragt dann noch nach Nuternamen und Passwort und wenn man erlaubt diese im Programm zu speichern, dann loggt sich Thunderbird zukünfitg selbständig ein.
Mehrere Kalender auf gleichem Server
Hat man mehrere Kalender auf dem gleichen Server – also z.B. mehrere User oder für einen User mehrere collections, dann kann Thunderbird diese nicht unterscheiden. Der Passwort-Manager arbeitet auf Grundlage der Domain. Siehe auch Bugzilla.
Diesen Bug kann man relativ einfach umgehen, indem man weitere Subdomains anlegt, die auf die gleiche Installation verweisen, also z.B.
$ cd /home/doms/example.org/subs-ssl $ mkdir cal1 $ mkdir cal2
und jeweils eine .htaccess in die neuen Verzeichnis mit folgendem Inhalt schreibt:
RewriteEngine on RewriteRule ^.htaccess$ - [F] RewriteRule ^(.*)$ https://cal.example.org/$1 [P]
Nicht vergessen:
chmod 0644 cal1/.htaccess chmod 0644 cal2/.htaccess
Hat man z.B. für User hans die Kalender home und work und für User maria den Kalender home und möchte diese aus derselben Thunderbird-Instanz benutzen, können folgende URL's in Thundebrird konfiguriert werden:
- https://cal.example.org/caldav.php/hans/home
- https://cal1.example.org/caldav.php/hans/work
- https://cal2.example.org/caldav.php/maria/home
URL Rewriting für kürzere URL's
TODO: .htaccess Beispiel
Weiterführende Links
- WIKI von DAViCal: http://wiki.davical.org
- Alternativen