Radicale

Je viens de mettre à jour la machine qui heberge mon serveur caldav et carddav et qui utilisait calendarserver 5.3 en Debian 11. Avec l’abandon progressif de python 2.7, la distribution ne fournit plus de module ni de pip pour cette version et c’est donc tout logiquement que caldavd sort en erreur avec un message relatif à l’absence de module python pour OpenSSL :

ImportError: No module named OpenSSL

Bien évidemment, il est toujours possible d’installer pip à la main ainsi que les modules nécessaires à l’utilisation de calendarserver ensuite. Cela dit, on en est maintenant à la version 9.0 et j’avais donc 8 versions de retard. Après quelques essais infructueux pour installer une version plus récente, j’ai décidé après notamment avoir lu le billet de Solène de passer à radicale v3 dont un paquet est disponible dans Debian 11. Je passe sur l’installation qui est des plus simples, j’ai juste fait quelques adaptations dans la configuration.
L’authentification est déléguée au serveur web et il faut donc indiquer :

[auth]
type = http_x_remote_user
htpasswd_encryption = bcrypt

Je ne suis pas certain qu’il est nécessaire de spécifier l’algorithme de hachage utilisé pour stocker le condensat du mot de passe puisque c’est le serveur web vérifie les utilisateurs. Mais j’ai redécouvert en me penchant dessus que bcrypt est issu d’OpenBSD, qu’il a été créé entre autres par Niels Provos en 1999 qui est devenu aujourd’hui un producteur de musiques électroniques qui crée des titres centrés sur la cybersécurité pour essayer de créer des vocations dans les métiers de la sécurité informatique auprès du jeune public. C’est également un adepte du travail du métal qui forge des épées et autres armes, vous pouvez avoir un aperçu sur son profil mastodon. Et plus d’informations sur les 25 ans de bcrypt ici.
J’ai essayé de jouer un peu avec les droits mais j’avoue ne pas avoir tout compris et la configuration suivante semble suffisante pour mon utilisation, le backend owner_only par contre ne semble pas fonctionner correctement avec le calendrier d’iOS et de macOS :

[rights]
type = owner_write

Maintenant que l’outil est installé, l’aspect le plus délicat est la récupération des données. L’interface web de radicale autorise le téléversement d’un fichier ics pour le calendrier et d’un fichier vcf pour le carnet d’adresses. Les clients Contacts et Calendrier sous macOS permettent de générer ces fichiers à l’aide de la fonction Exporter mais pour une raison que j’ignore, si ça a bien fonctionné pour le carnet d’adresse, le fichier ics était vide. Et comme calendarserver ne démarre plus, il a donc fallu démarrer une VM Debian 10, installer postgresql, récupérer un dump de la base sauvegardé par autoposgresqlbackup, installer python-twistd, memcached, slapd et récupérer un une sauvegarde de l’annuaire et la restaurer sur la VM avant de pouvoir lancer la commande calendarserver_export -u huy > huy.ics pour générer un fichier que j’ai pu importer dans radicale.
Ca fonctionne très bien pour mon utilisation personnelle et l’un des gains notables par rapport à l’ancienne solution est l’utilisation bien moindre de mémoire.

Dernier petit problème lié à la mise à jour du système, nsd ne démarrait pas avec ces messages :

Jun  3 15:05:59 ns3 nsd[835]: nsd starting (NSD 4.3.5)
Jun  3 15:05:59 ns3 nsd[835]: setsockopt(..., IP_MTU_DISCOVER, IP_PMTUDISC_OMIT, ...) failed: Invalid argument
Jun  3 15:05:59 ns3 nsd[835]: cannot open pidfile /run/nsd/nsd.pid: No such file or directory
Jun  3 15:05:59 ns3 nsd[835]: cannot overwrite the pidfile /run/nsd/nsd.pid: No such file or directory
Jun  3 15:05:59 ns3 nsd[836]: getrandom failed: Function not implemented
Jun  3 15:05:59 ns3 nsd[835]: problems sending reload xfrdtomain: Broken pipe
Jun  3 15:05:59 ns3 nsd[835]: did not get start signal from main

Un petit redémarrage sur un noyau récent a permis de régler le souci. La machine tournait depuis 2017 sur un noyau 3.12…