Radicale auf dem Uberspace

Warnung: Dies ist ein alter Artikel. Ich übernehme keine Haftung für den Inhalt und kann nicht garantieren, dass diese so noch funktioniert.

Hallo und Hurra, Ziel dieses Artikels ist zu erläutern, wie man Radicale auf dem Uberspace installiert bekommt.

The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.

Wie man dem Zitat entnehmen kann, ist radicale eine Implementierung der offenen CalDAV/CardDAV Protokolle. Diese Protokolle werden üblicherweise verwendet um Kalendar und Kontakte auf einem Server abzulegen. Zusätzlich dazu möchte ich gerne auch meine ToDo-Liste synchronisieren.

Ich habe mal meine ganz eigenen Ansprüche an den Server befasst:

  • Keine eigene Authentifizierung (Nicht noch ein eigenes Login-System)
  • Einfache Backup-Möglichkeiten
  • Explizit keine Weboberfläche

Voraussetzungen

Radicale benötigt auf Server-Seite nur Python. Ich gehe für die Integration der daemontools allerdings davon aus, dass Ihr zumindest einmal den zugehörigen Artikel im Wiki gelesen habt und den ~/service/ Ordner bereits besitzt.

Installation & Konfiguration

Die Basis-Installation ist ebenso schnell erledigt:

pip3 install radicale --user

Nun ist dadurch radicale nur installiert und nicht konfiguriert. Radicale sucht unter ~/.config/radicale/config nach der Konfiguration. Installiert man radicale so wie hier angegeben über pip3, so wird leider keine Standard-Konfiguration angelegt. Zum Glück findet man diese leider nicht mehr in der Radicale - Dokumentation. Also unter ~/.config/radicale/ die Datei config anlegen und mit dem Beispiel aus der Dokumentation füllen. Das Beispiel ist sehr gut dokumentiert und ist deswegen zum größten Teil selbsterklärend.

Zu den wichtigen Teilen. Radicale bindet sich im Uberspace an einen dedizidierten TCP-Port. Also einen überlegen und mit

/usr/sbin/ss -ln | fgrep PORT

überprüfen, ob der Port frei ist. Anschließend in der Konfiguration folgende Zeile erstellen:

hosts = 127.0.0.1:PORT

Nächster Punkt auf der Liste ist die Aktivierung der IMAP-Autentifizierung. Dafür muss man wieder einige Zeilen in der Konfiguration anpassen. Folgende Zeilen müssen sich dann finden:

[auth]
# Authentication method
# Value: None | htpasswd | IMAP | LDAP | PAM | courier | http | remote_user | custom
type = IMAP

# IMAP Configuration
imap_hostname = mailpod.suhail.uberspace.de #Hier entsprechend anpassen
imap_port = 993
imap_ssl = True

Wichtig außerdem

[rights]
# Rights backend
# Value: None | authenticated | owner_only | owner_write | from_file | custom
type = owner_only
…
…
…
[storage]
# Storage backend
# -------
# WARNING: ONLY "filesystem" IS DOCUMENTED AND TESTED,
#          OTHER BACKENDS ARE NOT READY FOR PRODUCTION.
# -------
# Value: filesystem | multifilesystem | database | custom
type = filesystem

Bei den Berechtigungen sollte man sich sehr genau überlegen, was man einfügt, denn dadurch, dass radicale über einem dedizidierten Port läuft, könnte sich sonst jeder andere Uberspace-Nutzer authentifizieren und auf die Daten zugreifen.

Nun noch die Anbindung an den Webserver. Wie üblich im entsprechenden Subdomain-Ordner eine .htaccess Datei mit folgendem Inhalt anlegen:

RewriteEngine On
RewriteRule ^(.*) http://localhost:PORT/$1 [P]

Prinzipiell kann man radicale jetzt nutzen. Jedoch wäre die einzige Möglichkeit radicale als Dämon laufen zu lassen, die eigene fork Funktion dafür nutzen. Der Aufruf dafür ist:

radicale -d

Ich bin jedoch kein besonderer Freund von Tools mit eigenem Dämon. Denn wenn das Programm abschmiert startet es nicht von selbst wieder und auch das Logging geht dann nur durch die eigene Logging-Funktion.

Daemontools

Deswegen jetzt zu radicale und den daemontools. Ich gehe hier davon aus, dass Ihr die Vorbereitungen schon absolviert habt. Ich poste hier einfach mal das relevante run-Skript:

#! /bin/sh
python3.4 ~/bin/radicale -Df 2>&1

Nachdem man das unter ~/etc/run-radicale/run abgelegt hat, ist der Service an sich lauffähig. Ich nutze die -D Optionen für eine informativere Ausgabe und den -f Parameter, damit radicale explizit nicht als Dämon läuft.

Anschließend habe ich für ein sinnvolles Logging die Anleitung für multilog befolgt und nutze das jetzt zum loggen. Jetzt läuft radicale über die daemontools und lassen sich entsprechend steuern.

Dadurch bin ich was die Kontakte- und Kalendarverwaltung angeht auf der halbwegs sicheren Seite.

Die Backup-Funktionalität wollte ich eigentlich über die integrierte Git-Funktionalität machen, leider scheint das aber nicht mit Python 3 kompatibel zu sein. Deswegen werde ich mir da mal was überlegen und das nachliefern.

EDIT: Kleinere Fehler behoben. Danke an DJCray EDIT (2018-08-05): Nicht mehr existenten Link entfernt.