Installation AgenDAV unter Debian "Jessie" - a CalDAV-Webclient

Heute zeige ich euch wie ihr Agendav, einen Web-UI CalDAV-Client auf Debian/GNU-Linux Codename "Jessie" installiert und eure bestehenden Kalender einbindet.

Keine fertige Lösung

Leider gibt es kein fertiges Debian-Paket dafür weshalb ich hier direkt aus den Quellen installiere, was ich sonst nicht so gern tue.

Laut AgenDAV-Doku werden die folgenden Softwarekomponenten benötigt. Euer System sollte also halbwegs aktuell (>= Debian 7 alias Wheezy) sein, besser noch aktueller. Wenn ihr eure Kalender nicht öffentlich betreibt, ist das weniger schlimm.

  • A CalDAV server
  • A web server
  • PHP >= 5.4.0
  • PHP ctype extension
  • PHP mbstring extension
  • PHP mcrypt extension
  • PHP cURL extension
  • A database backend

Ich setze voraus, dass ihr bereits einen CalDAV-Server betreibt. Wenn nicht, kann ich euch Baîkal ans Herz legen (einfach, schnell, multiuser-fähig,kein Schnickschnack, kein Frotend, works like a charm!).

Wir installieren nun die o.g. Abhängigkeiten. Achtung: Ich habe die Installation unter Debian Jessie durchgeführt. Die Paketversionen können sich also unterscheiden, wenn ihr andere Betriebssystemversionen verwendet.

FYI: Mit SQLite habe ich das blöde Ding irgendwie nicht zum Laufen bekommen, obwohl das zum Testen ganz schick gewesen wäre. Ich habe es nun mit MariaDB aufgesetzt, weil ich den Kalender dringend brauchte. Vielleicht schafft ihr es ja. Für Hinweise wäre ich sehr dankbar.

apt-get install apache2 php5 php5-mcrypt php5-curl mariadb-server php5-mysql

Jetzt schauen wir noch eben ob die PHP-Module da sind (erwartete Ausgabe des Befehls darunter):

for i in ctype mbstring mcrypt curl ; do php -m | grep $i ; done
ctype
mbstring
mcrypt
curl

Ihr habt jetzt also alle Abhängigkeiten installiert, weiter gehts mit der Kalender-Software. Download als tar.gz, entpacken und ins Webdir verschieben. Schaut auch bitte hier, ob es neuere Versionen gibt.
Ihr könnt natürlich auch NGINX nutzen, dessen Default-Webdir woanders liegt. In dem Fall sieht auch der Vhost weiter unten anders aus. Falls euch dieser fehlt, bitte einfach mal bei mir melden. Ich bevorzuge im Normalfall NGINX und kann dafür auch Config bereitstellen, allerdings mache ich das der Einfachheit halber hier mal mit Apache.

wget https://github.com/adobo/agendav/releases/download/2.0.0-beta1/agendav-2.0.0-beta1.tar.gz
tar -xzf agendav-2.0.0-beta1.tar.gz
mv agendav-2.0.0-beta1 /var/www/

Datenbanken

Nachdem die Daten jetzt schon an der richtigen Stelle liegen, können wir die Datenbank anlegen und entsprechende Rechte verteilen. Vorher bitte noch entsprechend den User bzw. das Passwort anpassen.

mysql --default-character-set=utf8 -uroot -p
GRANT ALL PRIVILEGES ON agendavdb.* TO agendavuser@localhost IDENTIFIED BY 'deiChouge6Iyie8';
CREATE DATABASE agendavdb CHARACTER SET utf8 COLLATE utf8_general_ci;

Nun kommt eure Datenbankverbindung in die AgenDAV-Config unter web/config/settings.php, relativ zum Verzeichnis in welches ihr die Daten verschoben habt. Die Datei müsst ihr neu anlegen. Es gibt eine web/config/default.settings.php welche alle möglichen Standard-Einstellungen enthält. Diese NICHT NIEMALS anfassen, denn bei einem Update der Software wird sie überschrieben. Ihr könnt dort aber eure benötigten Settings abkupfern. Den folgenden Inhalt also bitte als erstes in eure eigenen Settings pasten, später kommt weiterer Inhalt (auch hier noch mindestens das Passwort ändern):

<?php
// Database settings
$app['db.options'] = [
        'dbname' => 'agendavdb',
        'user' => 'agendavuser',
        'password' => 'deiChouge6Iyie8',
        'host' => 'localhost',
        'driver' => 'pdo_mysql'
];

AgenDAV bringt glücklicherweise ein PHP-Skript mit, welches alle benötigten Tabellen automatisch anlegt. Falls hier etwas schief läuft, überprüft nochmal eure Datenbank-Einstellungen. Die Ausgabe sollte dem Bild ähneln. Den Befehl müsst ihr im entpackten Verzeichnis ausführen.

php agendavcli migrations:migrate

VirtualHosts

Da wir hier Apache benutzen, kommt nun der Apache Vhost (vim /etc/apache2/sites-available/agendav.conf) zum Einsatz. Bitte auch hier entsprechend die Werte für IP-Adresse, Port und sonstige Daten bei euch anpassen.

<VirtualHost 172.21.22.25:80>

    ServerAdmin admin@schaefer-tom.de
    DocumentRoot /var/www/agendav-2.0.0-beta1/web/public
    ServerName agendav.home.schaefer-tom.de
    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log common

    <Location />

        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [QSA,L]

    </Location>

</VirtualHost>

WICHTIG: Solltet ihr den Kalender öffentlich betreiben, bitte unbedingt SSL aktivieren. Bei Fragen, melden :)

Jetzt noch Rewrite und den Vhost aktivieren und Apache restarten.

a2enmod rewrite
a2ensite agendav
systemctl restart apache2

Gleich geschafft!

Falls noch nicht geschehen, müsst ihr noch die Rechte der entsprechenden Verzeichnisse anpassen, sodass der Webserver darin schalten und walten kann.

chown -R www-data:www-data /var/www/agendav-2.0.0-beta1
chmod -R 750 /var/www/agendav-2.0.0-beta1/web/var/

Als letztes solltet ihr die Einstellungen aus der web/config/default.settings.php einzeln durch gehen und je nach Bedarf in eure eigenen Settings übernehmen. Gegebenenfalls am offiziellen HowTo orientieren. Da sind die Einstellungen wirklich gut erklärt. Hier mal meine kompletten Settings (sind nicht vollständig sondern bedürfnisgerecht angepasst).

<?php
$app['db.options'] = [
        'dbname' => 'agendavdb',
        'user' => 'agendavuser',
        'password' => 'deiChouge6Iyie8',
        'host' => 'localhost',
        'driver' => 'pdo_mysql'
];

$app['site.title'] = 'Calendar';
$app['encryption.key'] = 'phaegheez9CohthaiNoh0voo7';
$app['log.path'] = '/var/log/agendav/';
$app['caldav.baseurl'] = 'https://baikal.schaefer-tom.de/cal.php';
$app['caldav.authmethod'] = 'digest';
$app['caldav.publicurls'] = false;
$app['defaults.timezone'] = 'Europe/Berlin';
$app['defaults.date_format'] = 'dmy';
$app['defaults.weekstart'] = 1;

Man beachte, dass ich hier Baîkal als CalDAV-Server betreibe. Es bleibt euch überlassen was ihr hier verwendet. Eventuell bringe ich mal einen Baîkal-Beitrag. Wichtig ist, dass ihr bei "authmethod" den von eurem Server unterstützten Mechanismus eintragt (basic oder digest).

Wenn alles geklappt hat, könnt ihr euch nun einloggen, wenn nicht, einfach nochmal den Apache restarten, das ist eventuell einmal zu wenig passiert. Ansonsten schreibt mir in den Kommentaren. Ich würde mich freuen. Bis dahin und Viel Spaß!

... und nach dem Login.