DAViCal installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
(14 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HSDoku-Links}}
== Allgemein ==
== Allgemein ==
=== Beschreibung ===
=== Beschreibung ===
[http://www.davical.org/ DAViCal] ist ein Server für die Verwaltung von Kalendern über das [http://caldav.calconnect.org/ CalDAV-Protokoll]. Die Kalenderdaten können mit allen CalDAV-fähigen CLient-Programmen gelesen und geschrieben werden, z.B. Thunderbird mit [http://www.mozilla.org/projects/calendar/lightning/ Lightning], Evolution, Mulberry oder iCal / iPhone.
[http://www.davical.org/ DAViCal] ist ein Server für die Verwaltung von Kalendern über das [http://caldav.calconnect.org/ CalDAV-Protokoll]. Die Kalenderdaten können mit allen CalDAV-fähigen Client-Programmen gelesen und geschrieben werden, z.B. Thunderbird mit [http://www.mozilla.org/projects/calendar/lightning/ Lightning], Evolution, Mulberry, iCal, oder iPhone.


Das CalDAV-Protokoll wird im Wesentlichen breiter unterstützt, als es die Clients bisher unterstützen. Serien, Erinnerungen, Einladungen, Ressourcen, Arbeitsgruppen etc. sind alle Bestandteil der Features.
Das CalDAV-Protokoll bietet viele Funktionen, die noch nicht von allen Clients unterstützt werden, darunter Serien, Erinnerungen, Einladungen, Ressourcen, Arbeitsgruppen etc.


Die Software ist in PHP geschrieben, lizensiert unter GPL.
DAViCal ist in PHP geschrieben, lizensiert unter GPL.


Es werden auch Kalender über das WebDAV-Protokoll untersützt, hier wird aber eine Nur-Lesemodus empfohlen.
DAViCal erlaubt auch über das WebDAV-Protokoll Kalender zu lesen, aber nicht zu modifizieren.


=== Voraussetzungen ===
=== Voraussetzungen ===


DAViCal setzt technisch voraus:
DAViCal erfordert folgende technische Ressourcen:
* PostgreSQL
* PostgreSQL
* Webserver mit PHP5
* Webserver mit PHP5
* Perl für den Installationsvorgang
* 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.
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 ==
== Installation ==


=== Design ===
=== Design ===


Diese Installationsanleitung beschreibt, wie DAViCal in einer eigens dafür aufgeschalteten Subdomain über SSL betrieben wird. Für andere Konfigurationen, wie z.B. Installation in einer Subdomain im <tt>sub</tt>-Verzeichnis müssen kleine Anpassungen vorgenommen werden.
Diese Installationsanleitung beschreibt, wie DAViCal in einer eigens dafür [[Domainverwaltung#Lokale_Subdomains_durch_Aufschalten.3B_Delegieren|aufgeschalteten Subdomain]] über SSL betrieben wird. Für andere Konfigurationen, wie z.B. die Installation von DAViCal in einer als Unterverzeichnis von <tt>~/doms/''domain''/subs/</tt> 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.
Der Vorteil einer Installation in einer aufgeschalteten Subdomain ist, daß die Installation leicht von anderen Domaininhalten, PHP-Konfigurationen, oder sogar von anderen Domain-Administratoren, isoliert werden kann.


=== Subdomain aufschalten ===
=== Subdomain aufschalten ===


Für diese Anleitung werden folgende Daten als Konvention angenommen
Im Folgenden werden folgende Domainkonfigurationsdaten als Beispiel verwendet:


{| class="wikitable"
{| class="wikitable"
Zeile 38: Zeile 35:
! Typ                                          !! Wert                                !! Beschreibung
! Typ                                          !! Wert                                !! Beschreibung
|-
|-
| (Sub)-Domain || <tt>cal.example.org</tt>  || Die Sub-Domain unter der der DAViCal-Server betrieben wird
| Subdomain || <tt>cal.example.org</tt>  || Die Subdomain, unter der ein DAViCal-Server laufen soll
|-
|-
| Domain-Admin || <tt>xyz00-hans</tt> || Der User, dem die Sub-Domain delegiert wurde
| Domain-Admin || <tt>xyz00-hans</tt> || Der User, dem die Subdomain delegiert wurde
|}
|}


=== Quellen ===
=== Quellen ===


Für DAViCal werden neben dem eigentlichen Sourcecode des Projekts noch die PHP-Library [http://andrew.mcmillan.net.nz/projects/awl ''Andrew's Web Libraries''] benötigt. Beides findet sich auf derselben Webseite.
Neben dem Sourcecode vom eigentlichen DAViCal-Programm wird auch die PHP-Bibliothek [http://andrew.mcmillan.net.nz/projects/awl ''Andrew's Web Libraries''] benötigt. Diese stammt vom gleichen Entwickler.


Die jeweils neuste Versionen befinden sich unter
Die jeweils neusten Versionen befinden sich unter:
* DAViCal: http://debian.mcmillan.net.nz/packages/davical/
* DAViCal: https://www.davical.org/downloads/
* AWL: http://debian.mcmillan.net.nz/packages/awl/
* AWL: https://www.davical.org/downloads/


Hier jeweils die Source-Dateien *.tar.gz benutzen
Hier jeweils die Source-Dateien (<tt>*.tar.xz</tt>) benutzen.


==== Download ====
==== Download ====


<pre><nowiki>
<syntaxhighlight lang=bash>
$ cd /home/doms/cal.example.org/var
cd ~/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/awl/awl-0.53.tar.gz
$ wget http://debian.mcmillan.net.nz/packages/davical/davical-0.9.9.4.tar.gz
wget http://debian.mcmillan.net.nz/packages/davical/davical-1.1.1.tar.gz
</nowiki></pre>
</syntaxhighlight>


==== Auspacken ====
==== 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 <tt>davical</tt> und <tt>awl</tt>, die auf die jeweils installierte Version zeigen. Dies erleichtert spätere Versionswechsel.
Um die Dateien für den Betrieb in der Serverumgebung lesbar zu machen, die Dateierzeungsmaske temporär auf 022 setzen:
<pre><nowiki>
 
$ umask 022
<syntaxhighlight lang=bash>
$ tar xfvz awl-0.46.tar.gz
umask 022
$ tar xfvz davical-0.9.9.4.tar.gz
</syntaxhighlight>
$ ln -s awl-0.46 awl
 
$ ln -s davical-0.9.9.4 davical
Dann die heruntergeladenen Tarballs mit <tt>tar</tt> auspacken:
$ umask 077
 
</nowiki></pre>
<syntaxhighlight lang=bash>
tar xfvz awl-0.46.tar.gz
tar xfvz davical-0.9.9.4.tar.gz
</syntaxhighlight>
 
Dann zwei symbolische Links mit den generischen Namen <tt>davical</tt> und <tt>awl</tt> erzeugen, die auf die installierten Versionen zeigen (dies erleichtert einen späteren Versionswechsel):
 
<syntaxhighlight lang=bash>
ln -s awl-0.53  awl
ln -s davical-1.1.davical
</syntaxhighlight>
 
Und zum Schluß die ursprüngliche Dateierzeugungsmaske wiederherstellen:
 
<syntaxhighlight lang=bash>
umask 077
</syntaxhighlight>


=== PostgreSQL vorbereiten ===
=== PostgreSQL vorbereiten ===


Es wird eine eigene PostgreSQL-Datenbank benötigt, sowie 2 Datenbanknutzer.
DAViCal benötigt eine eigene PostgreSQL-Datenbank sowie 2 Datenbanknutzer.
 
 
DAViCal enthält ein eigenes Installations-Skript, das die erforderlichen Datenbank, Datenbanknutzer, prozedurale Sprache, und Datenbanktabellen anlegt und initialisiert. Dies liegt unter <tt>davical/dba/create-database.sh</tt>. Allerdings basiert das Skript auf der Annahme, daß man Superuser-Rechte hat, was in der Shared-Hosting-Umgebung nicht der Fall ist. In diesem Abschnitt wird deshalb beschrieben, wie man die entsprechenden Vorgänge in Hostsharing "von Hand" bewerkstelligt.
 
==== Datenbank und Datenbanknutzer anlegen ====
 
In dieser Anleitung werden folgende Namen für die Datenbank und deren Nutzer verwendet. Das Paket-Kürzel <tt>xyz00</tt> ist natürlich durch das des betreffenden Pakets zu ersetzen.


==== Datenbank und -Nutzer anlegen ====
{| class="wikitable"
{| class="wikitable"
|- class="hintergrundfarbe5"
|- class="hintergrundfarbe5"
! Typ                                          !! Wert                                !! Beschreibung
! Typ                                          !! Wert                                !! Beschreibung
|-
|-
| DB-Admin || <tt>xyz00_davical_dba</tt> || Der PostgreSQL-Nutzer, dem die Datenbank gehört und administrative Tätigkeiten durchführt
| DB-Admin || <tt>xyz00_davical_dba</tt> || Der PostgreSQL-Nutzer, dem die Datenbank gehört und der administrative Tätigkeiten durchführt.
|-
|-
| DB-Nutzer || <tt>xyz00_davical_app</tt> || Der PostgreSQL-Nutzer, der über DAViCal auf die Datenbank lesen/schreibend zugreift
| DB-Nutzer || <tt>xyz00_davical_app</tt> || Der PostgreSQL-Nutzername, den DAViCal benutzt, um in der Datenbank zu lesen und zu schreiben.
|-
|-
| Datenbank || <tt>xyz00_davical</tt>  || Die Datenbank, die alle Daten für den DAViCal-Server enthält
| Datenbank || <tt>xyz00_davical</tt>  || Die PostgreSQL-Datenbank, die DAViCals Daten enthält.
|}
|}


==== Umgebungsvariablen und <tt>.pgpass</tt> ====
==== Umgebungsvariablen und PostgreSQL-Paßwort ====
Die Nutzer und die Datenbank können über [[Hsadmin]] angelegt werden. Dabei wird <tt>xyz00_davical_dba</tt> als Datenbank-Besitzer angegeben. Als Zeichensatz <tt>UTF-8</tt> (Default) auswählen.
 
Die Nutzer und die Datenbank können über [[Hsadmin]] angelegt werden. Siehe dazu die Anleitungen auf der Seite [[PostgreSQL]] und [[Datenbanken]]. Diese Schritte müssen ggf. vom Paket-Admin vorgenommen werden.
 
<syntaxhighlight lang=bash>
su xyz00
hsadmin -c postgresqluser.add --set:name=xyz00_davical_dba --set:password=geheim
hsadmin -c postgresqluser.add --set:name=xyz00_davical_app --set:password=geheim
</syntaxhighlight>
 
Als Besitzer der DAViCal-Datenbank <tt>xyz00_davical_dba</tt> angeben; als Zeichenkodierung ist das Default <tt>UTF-8</tt> richtig:


Sowohl für die weitere Installation, als auch für den Betrieb des Servers ist es am besten die Passwörter in die <tt>[http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html .pgpass]</tt>-Datei zu schreiben, dann müssen sie nicht innerhalb der PHP-Dateien angebenen werden, bzw. während der Installation manuell eingegeben werden.
<syntaxhighlight lang=bash>
hsadmin -c postgresqldb.add --set:name=xyz00_davical --set:owner=xyz00_davical_dba
exit
</syntaxhighlight>


<pre><nowiki>
Sowohl für die weitere Installation als auch für den Betrieb des Servers ist es am einfachsten, die Passwörter in eine <tt>[http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html .pgpass]</tt>-Datei zu schreiben: so müssen sie weder in den PHP-Dateien angegeben noch 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
</nowiki></pre>


Darüberhinaus werden noch Umgebungsvariablen gesetzt, so daß beim Aufruf von <tt>psql</tt> über die Kommandozeile Datenbankname/Nutzer nicht eingegeben werden müssen. Diese Angaben sind nach Beenden der Shell-Sitzung automatisch zurückgesetzt.
<syntaxhighlight lang=bash>
echo "localhost:5432:*:xyz00_davical_dba:geheimes_passwort" >> ~/.pgpass
echo "localhost:5432:*:xyz00_davical_app:geheimes_passwort" >> ~/.pgpass
chmod 0600 ~/.pgpass
</syntaxhighlight>


Zur weiteren Bequemlichkeit Umgebungsvariablen setzen, so daß beim Aufruf von <tt>psql</tt> über die Kommandozeile keine Datenbank- und Nutzernamen eingegeben werden müssen. Diese Angaben gehen mit Beenden der Shell-Sitzung verloren.


<pre><nowiki>
<syntaxhighlight lang=bash>
$ PGHOST=localhost  
PGHOST=localhost  
$ PGUSER=xyz00_davical_dba
PGUSER=xyz00_davical_dba
$ PGDATABASE=xyz00_davical  
PGDATABASE=xyz00_davical  
$ export PGHOST PGUSER PGDATABASE  
export PGHOST PGUSER PGDATABASE  
</nowiki></pre>
</syntaxhighlight>


==== PL/pgSQL installieren ====
==== PL/pgSQL installieren ====


In der Datenbank wird die prozedurale Sprache PL/pgSQL benötigt. Diese kann folgendermaßen angelegt werden:
In der Datenbank wird die prozedurale Sprache PL/pgSQL benötigt. Diese wird durch den folgenden Befehl angelegt:


<pre><nowiki>
<syntaxhighlight lang=bash>
$ psql -A -c "CREATE LANGUAGE plpgsql;"
psql -A -c "CREATE LANGUAGE plpgsql;"
</nowiki></pre>
</syntaxhighlight>


=== Datenbank-Tabellen anlegen und initialisieren ===
==== Datenbank-Tabellen anlegen und initialisieren ====


DAViCal enthält ein eigenes Installations-Skript, das die PostgreSQL-Tabellen anlegt und initialisiert. Dies liegt unter <tt>davical/dba/create-database.sh</tt>. Hier wird aber davon ausgegegangen, daß man Adminrechte hat, was in der Shared-Hosting-Umgebung nicht der Fall ist.
Die folgenden Befehle zum Anlegen der Datenbanktabellen können in dieser Form einfach nacheinander ausgeführt werden, wenn wie oben beschrieben die Umgebungsvariablen <tt>PGHOST</tt>, <tt>PGUSER</tt> und <tt>PGDATABASE</tt> gesetzt wurden und die <tt>.pgpass</tt>-Datei geschrieben wurde.


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 <tt>PG*</tt> Umgebungsvariablen gesetzt wurden und die <tt>.pgpass</tt>-Datei gefüllt wurde.
<syntaxhighlight lang=bash>
 
psql -A -f awl/dba/awl-tables.sql
<pre><nowiki>
psql -A -f awl/dba/schema-management.sql
$ psql -A -f awl/dba/awl-tables.sql
psql -A -f davical/dba/davical.sql
$ psql -A -f awl/dba/schema-management.sql
./davical/dba/update-davical-database –dbhost=${PGHOST} –dbuser=${PGUSER} –dbname=${PGDATABASE} --appuser=${PGDATABASE}_app
$ psql -A -f davical/dba/davical.sql
psql -A -f davical/dba/base-data.sql
$ ./davical/dba/update-davical-database –dbhost=${PGHOST} –dbuser=${PGUSER} –dbname=${PGDATABASE} --appuser=${PGDATABASE}_app
</syntaxhighlight>
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
</nowiki></pre>


Für den DAViCal-Admin muß noch ein Passwort gesetzt werden &ndash; '<tt>**</tt>' vor dem Passwort ist hier wichtig.
Für den DAViCal-Admin muß noch ein Passwort gesetzt werden &ndash; '<tt>**</tt>' vor dem Passwort ist hier wichtig.


<pre><nowiki>
<syntaxhighlight lang=bash>
$ psql -A -c "UPDATE usr SET password = '**geheim' WHERE user_no = 1;"
psql -A -c "UPDATE usr SET password = '**geheim' WHERE user_no = 1;"
</nowiki></pre>
</syntaxhighlight>


=== Konfiguration ===
=== Konfiguration ===


DAViCal kann über eine <tt>config.php</tt> konfigriert werden. Eine Beispiel-Datei ist unten abgebildet. Details sind im [http://wiki.davical.org/w/Configuration DAViCal-Wiki] zu finden.
DAViCal wird durch Angaben in der PHP-Datei <tt>davical/config/config.php</tt> konfiguriert. Der folgende Befehl erzeugt eine Beispiel-Datei; weitere Beispiele befinden sich im Verzeichnis <tt>davical/config/</tt>. Die Konfigurationsparameter sind im [http://wiki.davical.org/w/Configuration DAViCal-Wiki] beschrieben.


<pre><nowiki>
<syntaxhighlight lang=bash line>
$ cat > davical/config/config.php
cat > davical/config/config.php
  $c->pg_connect[] = "dbname=xyz00_davical user=xyz00_davical_app host=localhost";  
$c->pg_connect[] = "dbname=xyz00_davical user=xyz00_davical_app host=localhost";  
  $c->use_persistent = true;  
$c->use_persistent = true;  
  $c->sysabbr    = 'cal@example.org';  
$c->sysabbr    = 'cal@example.org';  
  $c->admin_email = 'admin@cal.example.org';  
$c->admin_email = 'admin@cal.example.org';  
  $c->system_name = 'CalDAV Server example.org';  
$c->system_name = 'CalDAV Server example.org';  
  $c->default_locale = 'de_DE';  
$c->default_locale = 'de_DE';  
  $c->template_usr = array( 'active' => true,  
$c->template_usr = array( 'active' => true,  
                            'locale' => 'de_DE',  
                          'locale' => 'de_DE',  
                            'date_format_type' => 'E',  
                          'date_format_type' => 'E',  
                            'email_ok' => date('Y-m-d')  
                          'email_ok' => date('Y-m-d')  
                          );  
                        );  
^D
^D
</nowiki></pre>
</syntaxhighlight>


=== Fast-CGI Patch ===
=== 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 [http://wiki.davical.org/w/FastCGI FAQ-Eintrag] behandelt, aber dort unter der Annahme gelöst, daß man Adminrechte hat.
Bei der Benutzung von Fast-CGI werden die HTTP_AUTHORIZATION-Zeilen der HTTP-Anfragen  normalerweise nicht weitergeleitet. Dieses Problem wird auch im DAViCal-Wiki in einem entsprechenden [http://wiki.davical.org/w/FastCGI FAQ-Eintrag] behandelt. Die dort angeführte Lösung beruht allerdings wieder einmal auf der Annahme, daß man Superuser-Rechte hat.


In der Shared-Hosting-Umgebung von Hostsharing kann dies auch über ein Redirect in der <tt>.htaccess</tt>-Datei gemacht gelöst werden:
In der Shared-Hosting-Umgebung von Hostsharing kann die notwendige Anpassung über eine Rewrite-Anweisung in der <tt>.htaccess</tt>-Datei gemacht werden:


<pre><nowiki>
<syntaxhighlight lang=bash>
$ cd /home/doms/cal.example.org/htdocs-ssl
cd ~/doms/cal.example.org/var/davical/htdocs
$ cat >> .htaccess
cat >> .htaccess
RewriteEngine on
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
^D
^D
</nowiki></pre>
</syntaxhighlight>
 
Diese Regel muß die letzte in der <tt>.htaccess</tt> sein. Die Datei muß für alle lesbar sein:


<pre><nowiki>
Zur Zeit enthält die mit DAViCal mitgelieferte Datei <tt>.htaccess</tt> nur auskommentierte Beispielanweisungen. Für alle Fälle sollte man aber darauf achten, daß man den bestehenden Inhalt von <tt>.htaccess</tt> nicht überschreibt: d.h. die neuen Eingaben mit <tt>>></tt> der bestehenden Datei '''anhängen'''. Die neue Rewrite-Regel muß die letzte Regel in der <tt>.htaccess</tt> sein. Die Datei muß zudem für Apache lesbar sein:
$ chmod 0644 .htaccess
</nowiki></pre>


<syntaxhighlight lang=bash>
chmod 0644 .htaccess
</syntaxhighlight>


Darüberhinaus muß noch die Datei <tt>davical/inc/HTTPAuthSession.php</tt> angepasst werden. Hier ist die Variable <tt>$_SERVER["AUTHORIZATION"]</tt> ersetzt werden durch <tt>$_SERVER["REDIRECT_HTTP_AUTHORIZATION"]</tt>. Außerdem gibt es noch einen Bug: Es wird an einer Stelle <tt>split()</tt> statt <tt>explode</tt> benutzt. <tt>split()</tt> ist seit PHP 5.3.0 ''deprecated''.
Darüberhinaus muß noch die Datei <tt>davical/inc/HTTPAuthSession.php</tt> angepasst werden. Hier ist die Variable <tt>$_SERVER["AUTHORIZATION"]</tt> ersetzt werden durch <tt>$_SERVER["REDIRECT_HTTP_AUTHORIZATION"]</tt>. Außerdem gibt es noch einen Bug: Es wird an einer Stelle <tt>split()</tt> statt <tt>explode</tt> benutzt. <tt>split()</tt> ist seit PHP 5.3.0 ''deprecated''.


@@ -87,8 +87,8 @@
<syntaxhighlight lang="diff" line>
      /**
  @@ -101,10 +101,10 @@
      * Get HTTP Auth to work with PHP+FastCGI
  /**
      */
  * Get HTTP Auth to work with PHP+FastCGI
<span style="background-color:lightsalmon">-    if (isset($_SERVER["<span style="color:red">AUTHORIZATION</span>"]) && !empty($_SERVER["<span style="color:red">AUTHORIZATION</span>"])) {</span>
  */
<span style="background-color:lightsalmon">-      list ($type, $cred) = <span style="color:red">split</span> (" ", $_SERVER['<span style="color:red">AUTHORIZATION</span>']);</span>
  if ( !isset($_SERVER['AUTHORIZATION']) && isset($_SERVER['HTTP_AUTHORIZATION']) && !empty($_SERVER['HTTP_AUTHORIZATION']))
<span style="background-color:lightgreen">+    if (isset($_SERVER["<span style="color:green">REDIRECT_HTTP_AUTHORIZATION</span>"]) && !empty($_SERVER["<span style="color:green">REDIRECT_HTTP_AUTHORIZATION</span>"])) {</span>
    $_SERVER['AUTHORIZATION'] = $_SERVER['HTTP_AUTHORIZATION'];
<span style="background-color:lightgreen">+      list ($type, $cred) = <span style="color:green">explode</span> (" ", $_SERVER['<span style="color:green">REDIRECT_HTTP_AUTHORIZATION</span>']);</span>
-    if (isset($_SERVER["AUTHORIZATION"]) && !empty($_SERVER["AUTHORIZATION"])) {
        if ($type == 'Basic') {
-      list ($type, $cred) = split (" ", $_SERVER['AUTHORIZATION']);
          list ($user, $pass) = explode (":", base64_decode($cred));
+    if (isset($_SERVER["REDIRECT_HTTP_AUTHORIZATION"]) && !empty($_SERVER["REDIRECT_HTTP_AUTHORIZATION"])) {
          $_SERVER['PHP_AUTH_USER'] = $user;                                                                                                    }
+      list ($type, $cred) = explode (" ", $_SERVER['REDIRECT_HTTP_AUTHORIZATION']);
    if ($type == 'Basic') {
      list ($user, $pass) = explode (":", base64_decode($cred));
      $_SERVER['PHP_AUTH_USER'] = $user;                                                                                                    }
</syntaxhighlight>


[[Bild:DAViCAl-home.png‎|miniatur|400px|right|Screenshot DAViCal Einloggen]]
=== Webspace aktivieren ===
=== Webspace aktivieren ===


Schließlich muß die Installation noch mit dem Webspace verknüpft werden.
Schließlich muß die Installation noch mit dem Webspace verknüpft werden.
<pre><nowiki>
<syntaxhighlight lang=bash>
$ cd /home/doms/cal.example.org
cd ~/doms/cal.example.org
$ rm htdocs-ssl
rm -r htdocs-ssl
$ ln -s var/davical/htdocs htdocs-ssl
ln -s var/davical/htdocs htdocs-ssl
</nowiki></pre>
</syntaxhighlight>
 
[[Bild:DAViCAl-home.png‎|miniatur|400px|right|Die Login-Seite der DAViCal-Web-Oberfläche]]
 
Die URL des User-Interfaces lautet jetzt '''<tt><nowiki>https://cal.example.org/</nowiki></tt>'''.


Die URL des User-Interfaces lautet: '''<tt><nowiki>https://cal.example.org</nowiki></tt>'''
Wenn alles richtig gemacht wurde, erscheint an dieser URL die Login-Seite.


Wenn alles richtig gemacht wurde, erscheint der Login-Screen.
Falls nicht, sorge mit <tt>chmod a+rx var/davical/htdocs</tt> dafür, daß das Verzeichnis für Apache lesbar ist, und kontrolliere notfalls auch die Rechte der darin befindlichen Dateien.


== Nutzung ==
== Nutzung ==
Zeile 238: Zeile 265:
| Fullname || Hans Meier || Der Name des Nutzers
| 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
| Email Address || hans@example.org || Über die E-Mail-Adresse ist der Nutzer für andere Nutzer im System zu finden, z.B. für Einladungen
|-
|-
| Locale || Deutsch ||  
| Locale || Deutsch ||  
Zeile 253: Zeile 280:
Beim Anlegen des '''ersten''' Nutzers erscheint eine Fehlermeldung:  
Beim Anlegen des '''ersten''' Nutzers erscheint eine Fehlermeldung:  


<span style="background-color:lightsalmon">ERROR: SQL error "23505" - ERROR: duplicate key value violates unique constraint "principal_pkey""  
<code style="color:lightsalmon">ERROR: SQL error "23505" - ERROR: duplicate key value violates unique constraint "principal_pkey"" Home calendar added. </code>
Home calendar added. </span>


Dies ist ein Bug. Siehe auch [http://lists.morphoss.com/pipermail/davical-dev/2011/000117.html Thread in Dev-Mailingliste].
Dies ist ein Bug. Siehe auch [http://lists.morphoss.com/pipermail/davical-dev/2011/000117.html Thread in Dev-Mailingliste].
Zeile 277: Zeile 303:
* ''CalDAV''
* ''CalDAV''
* Spezifische Angaben
* Spezifische Angaben
** Name, z.B. ''hans@example''
** Name: z.B. ''hans@example''
** Farbe: auswählen in welcher Farbe der Kalender angezeigt werden soll
** Farbe: auswählen in welcher Farbe der Kalender angezeigt werden soll
** Alarm: ja
** Alarm: ja
** Email: Email auswählen
** Email: E-Mail 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.
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.
Zeile 292: Zeile 318:
Diesen Bug kann man relativ einfach umgehen, indem man weitere Subdomains anlegt, die auf die gleiche Installation verweisen, also z.B.
Diesen Bug kann man relativ einfach umgehen, indem man weitere Subdomains anlegt, die auf die gleiche Installation verweisen, also z.B.


<pre><nowiki>
<syntaxhighlight lang=bash>
$ cd /home/doms/example.org/subs-ssl
cd /home/doms/example.org/subs-ssl
$ mkdir cal1
mkdir cal1
$ mkdir cal2
mkdir cal2
</nowiki></pre>
</syntaxhighlight>


und jeweils eine <tt>.htaccess</tt> in die neuen Verzeichnis mit folgendem Inhalt schreibt:
und jeweils eine <tt>.htaccess</tt> in die neuen Verzeichnis mit folgendem Inhalt schreibt:


<pre><nowiki>
<syntaxhighlight lang=apache line>
RewriteEngine on
RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteRule ^.htaccess- [F]
RewriteRule ^(.*)$ https://cal.example.org/$1 [P]
RewriteRule ^(.*)https://cal.example.org/$1 [P]
</nowiki></pre>
</syntaxhighlight>


Nicht vergessen:
Nicht vergessen:


<pre><nowiki>
<syntaxhighlight lang=bash>
chmod 0644 cal1/.htaccess
chmod 0644 cal1/.htaccess
chmod 0644 cal2/.htaccess
chmod 0644 cal2/.htaccess
</nowiki></pre>
</syntaxhighlight>




Zeile 319: Zeile 345:
* '''<tt><nowiki>https://cal1.example.org/caldav.php/hans/work</nowiki></tt>'''
* '''<tt><nowiki>https://cal1.example.org/caldav.php/hans/work</nowiki></tt>'''
* '''<tt><nowiki>https://cal2.example.org/caldav.php/maria/home</nowiki></tt>'''
* '''<tt><nowiki>https://cal2.example.org/caldav.php/maria/home</nowiki></tt>'''


== URL Rewriting für kürzere URL's ==
== URL Rewriting für kürzere URL's ==
Zeile 331: Zeile 355:
** [http://wiki.davical.org/w/CalDAV_Clients CalDAV Clients]
** [http://wiki.davical.org/w/CalDAV_Clients CalDAV Clients]


* Alternativen
** [[RadicaleCalDAVServer]]
** [[ChandlerServer]]


----
----
[[Kategorie:HSDoku]]
[[Kategorie:HSDoku]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:DAViCal]]
[[Kategorie:CalDAV]]

Aktuelle Version vom 12. Juni 2024, 13:24 Uhr

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 ~/doms/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 anderen Domaininhalten, PHP-Konfigurationen, oder sogar von anderen Domain-Administratoren, isoliert werden kann.

Subdomain aufschalten

Im Folgenden werden folgende Domainkonfigurationsdaten als Beispiel verwendet:

Typ Wert Beschreibung
Subdomain cal.example.org Die Subdomain, unter der ein DAViCal-Server laufen soll
Domain-Admin xyz00-hans Der User, dem die Subdomain delegiert wurde

Quellen

Neben dem Sourcecode vom eigentlichen DAViCal-Programm wird auch die PHP-Bibliothek Andrew's Web Libraries benötigt. Diese stammt vom gleichen Entwickler.

Die jeweils neusten Versionen befinden sich unter:

Hier jeweils die Source-Dateien (*.tar.xz) benutzen.

Download

cd ~/doms/cal.example.org/var
wget http://debian.mcmillan.net.nz/packages/awl/awl-0.53.tar.gz
wget http://debian.mcmillan.net.nz/packages/davical/davical-1.1.1.tar.gz

Auspacken

Um die Dateien für den Betrieb in der Serverumgebung lesbar zu machen, die Dateierzeungsmaske temporär auf 022 setzen:

umask 022

Dann die heruntergeladenen Tarballs mit tar auspacken:

tar xfvz awl-0.46.tar.gz
tar xfvz davical-0.9.9.4.tar.gz

Dann zwei symbolische Links mit den generischen Namen davical und awl erzeugen, die auf die installierten Versionen zeigen (dies erleichtert einen späteren Versionswechsel):

ln -s  awl-0.53  awl
ln -s  davical-1.1.1  davical

Und zum Schluß die ursprüngliche Dateierzeugungsmaske wiederherstellen:

umask 077

PostgreSQL vorbereiten

DAViCal benötigt eine eigene PostgreSQL-Datenbank sowie 2 Datenbanknutzer.


DAViCal enthält ein eigenes Installations-Skript, das die erforderlichen Datenbank, Datenbanknutzer, prozedurale Sprache, und Datenbanktabellen anlegt und initialisiert. Dies liegt unter davical/dba/create-database.sh. Allerdings basiert das Skript auf der Annahme, daß man Superuser-Rechte hat, was in der Shared-Hosting-Umgebung nicht der Fall ist. In diesem Abschnitt wird deshalb beschrieben, wie man die entsprechenden Vorgänge in Hostsharing "von Hand" bewerkstelligt.

Datenbank und Datenbanknutzer anlegen

In dieser Anleitung werden folgende Namen für die Datenbank und deren Nutzer verwendet. Das Paket-Kürzel xyz00 ist natürlich durch das des betreffenden Pakets zu ersetzen.

Typ Wert Beschreibung
DB-Admin xyz00_davical_dba Der PostgreSQL-Nutzer, dem die Datenbank gehört und der administrative Tätigkeiten durchführt.
DB-Nutzer xyz00_davical_app Der PostgreSQL-Nutzername, den DAViCal benutzt, um in der Datenbank zu lesen und zu schreiben.
Datenbank xyz00_davical Die PostgreSQL-Datenbank, die DAViCals Daten enthält.

Umgebungsvariablen und PostgreSQL-Paßwort

Die Nutzer und die Datenbank können über Hsadmin angelegt werden. Siehe dazu die Anleitungen auf der Seite PostgreSQL und Datenbanken. Diese Schritte müssen ggf. vom Paket-Admin vorgenommen werden.

su xyz00
hsadmin -c postgresqluser.add --set:name=xyz00_davical_dba --set:password=geheim
hsadmin -c postgresqluser.add --set:name=xyz00_davical_app --set:password=geheim

Als Besitzer der DAViCal-Datenbank xyz00_davical_dba angeben; als Zeichenkodierung ist das Default UTF-8 richtig:

hsadmin -c postgresqldb.add --set:name=xyz00_davical --set:owner=xyz00_davical_dba
exit

Sowohl für die weitere Installation als auch für den Betrieb des Servers ist es am einfachsten, die Passwörter in eine .pgpass-Datei zu schreiben: so müssen sie weder in den PHP-Dateien angegeben noch 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

Zur weiteren Bequemlichkeit Umgebungsvariablen setzen, so daß beim Aufruf von psql über die Kommandozeile keine Datenbank- und Nutzernamen eingegeben werden müssen. Diese Angaben gehen mit Beenden der Shell-Sitzung verloren.

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 wird durch den folgenden Befehl angelegt:

psql -A -c "CREATE LANGUAGE plpgsql;"

Datenbank-Tabellen anlegen und initialisieren

Die folgenden Befehle zum Anlegen der Datenbanktabellen können in dieser Form einfach nacheinander ausgeführt werden, wenn wie oben beschrieben die Umgebungsvariablen PGHOST, PGUSER und PGDATABASE gesetzt wurden und die .pgpass-Datei geschrieben 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
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 wird durch Angaben in der PHP-Datei davical/config/config.php konfiguriert. Der folgende Befehl erzeugt eine Beispiel-Datei; weitere Beispiele befinden sich im Verzeichnis davical/config/. Die Konfigurationsparameter sind im DAViCal-Wiki beschrieben.

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-Zeilen der HTTP-Anfragen normalerweise nicht weitergeleitet. Dieses Problem wird auch im DAViCal-Wiki in einem entsprechenden FAQ-Eintrag behandelt. Die dort angeführte Lösung beruht allerdings wieder einmal auf der Annahme, daß man Superuser-Rechte hat.

In der Shared-Hosting-Umgebung von Hostsharing kann die notwendige Anpassung über eine Rewrite-Anweisung in der .htaccess-Datei gemacht werden:

cd ~/doms/cal.example.org/var/davical/htdocs
cat >> .htaccess
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
^D

Zur Zeit enthält die mit DAViCal mitgelieferte Datei .htaccess nur auskommentierte Beispielanweisungen. Für alle Fälle sollte man aber darauf achten, daß man den bestehenden Inhalt von .htaccess nicht überschreibt: d.h. die neuen Eingaben mit >> der bestehenden Datei anhängen. Die neue Rewrite-Regel muß die letzte Regel in der .htaccess sein. Die Datei muß zudem für Apache 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.

  @@ -101,10 +101,10 @@
  /**
  * Get HTTP Auth to work with PHP+FastCGI
  */
  if ( !isset($_SERVER['AUTHORIZATION']) && isset($_SERVER['HTTP_AUTHORIZATION']) && !empty($_SERVER['HTTP_AUTHORIZATION']))
    $_SERVER['AUTHORIZATION'] = $_SERVER['HTTP_AUTHORIZATION'];
-    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 ~/doms/cal.example.org
rm -r htdocs-ssl
ln -s var/davical/htdocs htdocs-ssl
Die Login-Seite der DAViCal-Web-Oberfläche

Die URL des User-Interfaces lautet jetzt https://cal.example.org/.

Wenn alles richtig gemacht wurde, erscheint an dieser URL die Login-Seite.

Falls nicht, sorge mit chmod a+rx var/davical/htdocs dafür, daß das Verzeichnis für Apache lesbar ist, und kontrolliere notfalls auch die Rechte der darin befindlichen Dateien.

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: MenuUser FunctionsCreate 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 E-Mail-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:

MenuDateiNeuKalender

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: E-Mail 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