📱 Erkannter Endgerättyp ⛱️ Tag und Nacht. Verbraucht keinen oder einen 🍪.
guest
Login 🧬 0 Ihre DNS in den Krei.se-DNS-Servern, führt zum Bio-Labor 🍪 0 Anzahl Ihrer gespeicherten Kekse, führt zur Keksdose

🗓️ Kalender, 📇 Kontakte, 📑 Aufgaben für 👥 verschachtelte Gruppen

dav.domain.tld

🧑‍🎨 Zentralisierte Aufgaben mit Radicale

Statt 5 Apps können Sie für sich und den engeren Kreis auch Kalender, Kontakte und Aufgaben selbst hosten.

Mit verschachtelten Gruppen in LDAP hat das den Vorteil, dass Sie auch einen Login für die ganze Gruppe einrichten können und so eigene, aber auch geteilte Kalender, Aufgaben und Kontakte nutzen können.

Das ist zwar in größerer Software auch möglich, braucht aber dort extra Gruppen und hier mit wenig Aufwand auf dem Server machbar, denn wir nutzen für den Login Dovecot mit.

🧑‍🔧 Installation

apt install radicale

Wir aktivieren radicale auf allen Interfaces, denn es läuft ohne root-Rechte und leitet Logins nur weiter. Sie können radicale halbwegs bedenkenlos direkt im Internet einsetzen.

/etc/radicale/config

[server]
hosts = 0.0.0.0:5232

🔐 SSL aktivieren

Wir brauchen auch hier zwingend ein 🗝️ LetsEncrypt-Zertifikat. Dazu kommt, dass radicale nicht mit root-Rechten läuft (was eigentlich sehr schön ist) und daher keine Schlüssel lesen kann.

Deshalb erstellen wir in LetsEncrypt einen renewal deploy-hook der den Schlüssel nach jeder Aktualisierung kopiert und radicale neu startet:

Holen Sie explizit für dav.domain.tld ein eigenes Zertifikat:

root@server:/etc/letsencrypt# certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/ns1.krei.se.rfc2136.ini -d 'dav.domain.tld.'

In /etc/letsencrypt/live/dav.domain.tld liegen nur Symlinks, kopieren wollen wir aber immer den aktuellen Schlüssel

/etc/letsencrypt/renewal-hooks/deploy/radicale.sh

#!/bin/bash

HOOKLOG=/root/certbot-hook-debug-radicale.log

# Redirects stdout and stderr for the entire script into /root/certbot-hook-debug-radicale.log
exec >> $HOOKLOG 2>&1
# print each command while it's executed
set -x
# Timestamps
export PS4='+ $(date "+%F %T") '

# Debug show the user what these include because its plural although its only 1 domain name in RENEWED_DOMAINSe
echo "$(date '+%F %T') Lineage: $RENEWED_LINEAGE" >> $HOOKLOG
echo "$(date '+%F %T') Domains: $RENEWED_DOMAINS" >> $HOOKLOG

# $RENEWED_DOMAINS enthält die aktualisierte Domain (i.d.R. nur eine)
# $RENEWED_LINEAGE enthält den Pfad zu /etc/letsencrypt/live/domain.tld

if grep --quiet "dav.domain.tld" <<< "$RENEWED_DOMAINS"; then

    # Unbedingt -L nutzen um Symlinks zu folgen (dereferenzieren), sonst kopieren Sie nur den Symlink!

    cp -L $RENEWED_LINEAGE/fullchain.pem /etc/radicale/dav.domain.tld.fullchain.pem
    cp -L $RENEWED_LINEAGE/privkey.pem /etc/radicale/dav.domain.tld.privkey.pem
    chown radicale:radicale /etc/radicale/dav.domain.tld.*.pem

    # Schlüssel ist Standard 600, Zertifikat 644 was uns hier genügt. 
    # chmod 660 /etc/ejabberd/ssl.*.pem

    systemctl restart radicale

fi

Checken, dass es auf eine neue Zeile endet und das Skript mit chmod +x radicale.sh ausführbar machen.

📝 Ab Certbot 3 gibt es --run-deploy-hooks in Verbindung mit --dry-run um einen Deploy-Hook zu testen.

certbot --run-deploy-hooks --dry-run renew und der Output in /root/certbot-hook-debug-radicale.log verrät wo es hakt!

/etc/radicale/config

[server]

ssl = True
certificate = /etc/radicale/dav.domain.tld.fullchain.pem
key = /etc/radicale/dav.domain.tld.privkey.pem

Authentifizierung gegen IMAP

Radicale kann sich ab Debian Trixie direkt gegen IMAP authentifizieren

/etc/radicale/config

[auth]

type = imap
imap_host = mail.domain.tld
imap_security = tls

Und das wars schon. Das Dovecot-Plugin ist nun direkt eingebaut, ich habe es allerdings nicht lauffähig bekommen.

Storage unter Debian fixen

/etc/radicale/config

[storage]

# Storage backend
# Value: multifilesystem | multifilesystem_nolock
#type = multifilesystem

# Folder for storing local collections, created if not present
#filesystem_folder = /var/lib/radicale/collections

Der Standard-Speicherort für Radicale ist /var/lib/radicale - allerdings scheint Debian hier root:root als User zu haben.

root@server:~# chown -R radicale:radicale /var/lib/radicale

Löst dieses Problem. Wer den Speicherort für Backups intuitiver haben will, kann das ändern.

Webserver aktivieren

Zum Anlegen von Kalendern und Kontaktlisten lohnt sich den internen Webserver anzuschalten:

/etc/radicale/config

[web]

# Web interface backend
# Value: none | internal
type = internal

Anschliessend kann man einfach auf https://dav.domain.tld:5232 checken ob alle Kalender, etc. funktionieren.

Service aktivieren

Nicht vergessen: systemctl enable radicale && systemctl start radicale

SRV-Records

Damit Clienten keine 100 Zeichen Pfade eingeben müssen empfielt sich auf dem Nameserver der KOMPLETTEN DOMAIN SRV-Records anzulegen

Format für BIND9:

_caldavs.domain.tld. SRV 10 100 5232 dav.domain.tld
_carddavs.domain.tld. SRV 10 100 5232 dav.domain.tld

Android Apps und droidfor.ge

Ich empfehle DAVx5 für Kontakte und Kalender und jtx board für Aufgaben und Journale.

Die Journale sind super praktisch, hier kann man sich Notizen anlegen die sich mit vertretbarem Aufwand in Skripten, etc. nutzen lassen.

DAVx5 enthält in droidfor.ge eine Autoprovision, d.h. ein User in Ihrer Domäne kann hier ein vorbereitetes Gerät erhalten: Mehr unter droidfor.ge

Hintergrund ändern. Verbraucht keinen oder einen 🍪.

Verknüpften Viewport öffnen

Sie sind leider kein Entwickler :(

FPS

Vertex-Count