Davical
ist ein CalDav Kalenderserver für einen LinuxKalender.
ThomasBayen hat sich seit Anfang 2021 Davical ausgesucht, um für eine Weile damit zu arbeiten.
Installation und Aufbau #
Die Installation unter Debian Buster war sehr einfach.
Davical basiert auf PHP (nicht so meine Lieblingssprache) und legt die Daten in einer PostgreSQL-Datenbank ab (find ich gut).
Datenbank-Struktur #
Wichtige Daten liegen dort direkt per SQL zugänglich in einer Datenbank-Struktur, aber dennoch findet man auch die kompletten VCARD bzw. VCALENDAR Daten als Text in der Tabelle caldav_data. Was davon man beim Hacken lieber hat, muss jeder selber wissen. Die Datenbank-Struktur sieht so verständlich aus, das man vielleicht auch von außen direkt daran manipulieren kann.
LDAP Authentifizierung #
Ich habe es sogar relativ einfach geschafft, meine Benutzer automatisch aus meinem Firmen-LDAP anzulegen - für mich ist das ein echter Vorteil. Es gibt eine Admin-Weboberfläche, mit der man komplexe Rechtevergaben, neue Kalender, etc. einstellen kann. Man fügt einen Block mit LDAP-Einstellungen zur Datei /etc/davical/config.php hinzu. Die Daten werden dann vom admin-Benutzer auf der Weboberfläche im Menüpunkt "Tools" synchronisiert (also nicht vollautomatisch). Man kann bis zu einem gewissen Punkt konfigurieren, was genau synchronisiert wird.
Ich habe in meinem LDAP z.B. das Feld employeeType benutzt, um dort "caldav" hineinzuschreiben für die Benutzer, die Davical anlegen soll. Dann kann ich die in der LDAP-Konfiguration direkt filtern. (Ein Filter nach Gruppen ist übrigens nicht so einfach und muss im Server extra konfiguriert werden - google mal nach OpenLDAP und memberOf).
Was mich bei meinen verschiedenen Experimenten immer wieder aufgehalten hat war, das mein interner LDAP-Server ein selbstsigniertes Zertifikat hat. Um den anzusprechen, muss man eine Zeile "TLS_REQCERT never" in die Datei /etc/openldap/ldap.conf schreiben.
Clients #
Android #
Eine Verbindung mit meinem Android per DAVx5
ergab eine einfache und perfekte Anbindung für Kalender, Aufgaben und Kontakte.
Als URL musste ich nur http://caldav.servername.org/benutzer/
angeben. Alle Kaleneder- und Adressbuch-Ressourcen wurden daraufhin automatisch gefunden (Das mag daran liegen, das ich auch die Redirect-Kommandos in der Apache Konfiguration für die well known urls gesetzt habe). Wer sich über die Konfigurationsfrage nach der Kontaktgruppen-Methode wundert, wählt am besten die Vorgabe "Gruppen sind VCARDs" (siehe https://www.davx5.com/tested-with/davical).
Thunderbird (mit Cardbook) für Kontakte #
Außerdem setze ich auf dem Desktop die CardBook-Erweiterung
für den Thunderbird ein. Man kann sie im Standard Add-On Store auswählen. Diese Erweiterung ist wirklich leistungsfähig und versucht wohl gerade, das bisherige Adressbuch im Core Thunderbird zu ersetzen.
Man kann ein Adressbuch im Cardbook auch offline betreiben. Dann wird das Adressbuch nicht sofort angezeigt, sondern bei einer Suche jeweils online abgefragt. Diese Funktion war (mit einem Davical-Server im lokalen Netz) rasend schnell. Alle Daten sind so immer auf dem aktuellen Stand und Änderungen werden sofort synchronisiert. Der einzige Nachteil ist, das man nie die gesamte Liste sieht (und diese z.B. auch nicht herunterladen kann).
Apropos herunterladen... Die Export-Funktion des Thunderbird Cardbook ist eine schöne Methode für ein Backup der Daten als vcf-Datei, das man eventuell hin und wieder haben möchte.
Im Thunderbird CardBook muss ich als URL https://mein-server.domain.org/username/addresses
angeben. Außerdem hatte ich in meinen ersten Tests ein selbstsigniertes Zertifikat, das dazu führte, das die Verbindung ohne weitere Erklärung oder Fehlermeldung nicht aufgebaut wurde. Sehr ärgerlich. Abhilfe gab mir dann dieser Artikel
Installation im Container #
Da ich in den letzten Tagen auch mit Podman erste Schritte gemacht habe, habe ich mich mal umgeschaut, ob es fertige Container-Images für Davical gibt. Dabei bin ich auf https://github.com/datze/davical
gestossen.
Das Image erlaubt zwei externe Volumes, die in den Container eingebunden werden, aber ausserhalb liegen: Eines für die PostgreSQL-Datenbank und eines für die Konfiguration. Um dieses config-Verzeichnis zu füllen, ist es am sinnvollsten, zuerstmal das git-Projekt herunterzuladen und die vier genannten Konfigurationsdateien nach /var/davical/config/ zu kopieren. Außerdem legt man /var/davical/data/ an.
Um SSL zu benutzen, erzeugt man ein passendes SSL-Zertifikat (z.B. mit LetsEncrypt und kopiert die Zertifikatsdateien nach /var/davical/config/ssl/.
Im Grunde installiert und konfiguriert sich das Ding nun fast von ganz alleine. Ich habe die apache.conf angepasst, um ssl zu nutzen und um meine Zertifikate einzubinden. Daraufhin konnte man den Container starten mit:
podman run -d --name davicalc4 -p 443:443 \
-v /var/davical/data:/var/lib/postgresql/data -v /var/davical/config/:/config \
-e HOST_NAME="calendar.bayen.eu" -e TIME_ZONE='Europe/Berlin' \
datze/davical_https
Außerdem habe ich danach noch davical.php angepasst, um die von mir gewünschte LDAP-Authentifizierung zu nutzen (das ist aber natürlich für normale Anwender gar nicht nötig). Mein Spezialproblem mit dem selbstsignierten LDAP-Server habe ich behoben mit
podman exec -l bash -c 'echo "TLS_REQCERT never" >>/etc/openldap/ldap.conf'