rss logo

Mise en place d'un calendrier partagé sur Debian Linux avec Baïkal

Logo de Baïkal Logo Debian Logo Calendrier

J'utilisais depuis quelques années le logiciel Zimbra, car son interface web est agréable et qu'il propose un calendrier. Initialement, il existait une version gratuite et open source qui remplissait parfaitement bien son rôle, et même si elle était devenue de plus en plus difficile à maintenir et à mettre à jour, elle restait globalement une solution correcte. Cependant, avec les développements récents (depuis la version 8.5 en fait) et des changements de propriétaires, l'édition gratuite a été complètement abandonnée. Je me suis donc retrouvé à la recherche de solutions alternatives pour les différents modules (calendrier, webmail, etc…).

Cet article se concentrera sur la mise en place d'un serveur de calendrier partagé. Je montrerais ici comment mettre en place la solution Baïkal sur GNU/Linux, qui supporte nativement CalDAV et CardDAV. Son interface web rend la gestion des utilisateurs et services plutôt aisée.

La base de données sqlite3 est un choix parfait pour un nombre raisonnable d'utilisateurs.

  • Configuration:
    • debian: 12 bookworm
    • Baïkal: 0.10.0
    • sqlite3: 3.40
    • php: 8.2

Un grand merci à ByteHamster l'auteur de Baïkal pour avoir rendu ce produit gratuit et Open Source.

Installation de Baïkal

  • Installation des prérequis:
root@host:~# apt update && apt install apache2 php-fpm php-sqlite3 php-sabre-dav git sqlite3 unzip php libapache2-mod-php root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.10.0/baikal-0.10.0.zip
  • Décompresser et déplacer le dossier vers /var/www/baikal/ :
root@host:~# unzip baikal-0.10.0.zip root@host:~# mv baikal /var/www/baikal
  • Définir www-data comme propriétaire du dossier :
root@host:~# chown -R www-data:www-data /var/www/baikal/
  • Nous allons sécuriser nos connexions avec HTTPS, pour cela, nous aurons besoin de certificats Let's Encrypt ou de certificats autogénérés. Voyons comment faire avec la deuxième option :
root@host:~# mkdir /etc/apache2/ssl/ root@host:~# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/apache2/ssl/selfsigned.key -out /etc/apache2/ssl/selsigned.crt ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:The Elements Of A State Locality Name (eg, city) []:City Organization Name (eg, company) [Internet Widgits Pty Ltd]:STD Corp Organizational Unit Name (eg, section) []:STD Department Common Name (e.g. server FQDN or YOUR name) []:baikal.std.rocks Email Address []:baikal@std.rocks root@host:~# cat /etc/apache2/ssl/selfsigned.key /etc/apache2/ssl/selsigned.crt > /etc/apache2/ssl/cert.pem
  • Activer les modules apache2 rewrite et ssl :
root@host:~# a2enmod rewrite root@host:~# a2enmod ssl
  • Éditer le fichier de configuration /etc/apache2/sites-available/000-default.conf :
<VirtualHost *:443> DocumentRoot /var/www/baikal/html ServerName baikal.std.rocks RewriteEngine On # Generally already set by global Apache configuration #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteRule /.well-known/carddav /dav.php [R=308,L] RewriteRule /.well-known/caldav /dav.php [R=308,L] <Directory "/var/www/baikal/html"> Options None # If you install cloning git repository, you may need the following Options +FollowSymlinks AllowOverride None # Configuration for apache-2.4: Require all granted # Configuration for apache-2.2: # Order allow,deny # Allow from all </Directory> <IfModule mod_expires.c> ExpiresActive Off </IfModule> SSLEngine On #AUTOGENERATE CERTIFICATES SSLCertificateFile /etc/apache2/ssl/cert.pem SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key #LETS ENCRYPT CERTIFICATES #SSLCertificateFile /etc/letsencrypt/baikal.std.rocks/fullchain.pem #SSLCertificateKeyFile /etc/letsencrypt/baikal.std.rocks/privkey.pem #SSLCertificateChainFile /etc/letsencrypt/baikal.std.rocks/chain.pem </VirtualHost>
  • Redémarrer le service apache2 :
root@host:~# systemctl restart apache2

Nous pouvons maintenant passer à la configuration de Baïkal.

Configuration de Baïkal

  • Ouvrir un navigateur web et se connecter à l'interface web de Baïkal (https://IP_SERVER) afin de paramétrer le mot de passe administrateur :
Page d'initialisation de l'assistant Baïkal.
  • Garder la configuration par défaut et cliquer sur Enregistrer les modifications :
Page web de configuration de la base de données Baïkal
  • Enfin, cliquer sur Commencer à utiliser Baïkal :
Fin de l'assistant de configuration Baïkal
  • Utiliser le mot de passe configuré précédemment et cliquer sur S'authentifier :
Accès à l'authentification de l'interface web de Baïkal
  • Pour ajouter des utilisateurs, cliquer sur Utilisateurs et ressources depuis le tableau de bord :
Page d'accueil de l'interface web de Baïkal
  • Ensuite, cliquer sur le bouton Ajouter un utilisateur :
Page d'ajout d'utilisateurs de l'interface web de Baïkal
  • Saisir les informations du nouveau compte et cliquer sur Enregistrer les modifications :
Page de création d'utilisateur web de Baïkal
  • L'utilisateur est maintenant créé. Cliquer sur le bouton Calendriers :
Page de création d'utilisateur web de Baïkal
  • À partir de là, on pourra ajouter un calendrier et obtenir les informations URI (qui peuvent être utiles en fonction du client de calendrier) :
Page de création de gestion du calendrier utilisateur de Baïkal

Configuration des Clients de Calendrier

À ce stade, nous disposons d'un serveur de calendrier partagé fonctionnel. Passons donc maintenant à la connexion des clients. Je vais ici montrer comment faire avec Thunderbird, qui dispose d'un calendrier intégré, ainsi qu'avec l'application Android DAVx5, qui permet la synchronisation avec les calendriers sur les appareils Android.

Thunderbird

  • Ouvrir Thunderbird et cliquer sur le bouton calendrier, puis sélectionner Nouveau calendrier… :
Interface principale du calendrier Thunderbird
  • Sélectionner Sur le réseau puis cliquer sur le bouton Suivant :
Nouvelle fenêtre de création de calendrier Thunderbird
  • Ajouter le nom d'utilisateur et l'URL https://IP_SERVER, puis cliquer sur Trouver des calendriers :
Nouvelle fenêtre de création de calendrier Thunderbird avec boîte de texte pour le nom d'utilisateur et l'emplacement
  • Si on a utilisé un certificat auto-signé, il faudra accepter l'exception de sécurité :
Fenêtre d'ajout d'exception de sécurité Thunderbird
  • Saisir le mot de passe de l'utilisateur précédemment créé :
Fenêtre d'authentification requise Thunderbird
  • Enfin, cliquer sur S'abonner pour ajouter le calendrier :
Dernière étape de création du nouveau calendrier Thunderbird
  • Le calendrier partagé apparaîtra :
Interface principale du calendrier Thunderbird avec le calendrier partagé

DAVx5

  • Ouvrir l'application DAVx5 et cliquer sur le symbole plus pour ajouter un compte :
Interface principale de DAVx5
  • Sélectionner Se connecter avec URL et saisir les informations demandées :
Interface d'ajout de compte DAVx5
  • Comme avec Thunderbird, on recevra un avertissement concernant le certificat s'il ce dernier est auto-signé. Cliquer simplement sur Accepter :
Avertissement de certificat DAVx5
  • Enfin, cliquer sur Créer :
Validation de la création du compte DAVx5

Mettre à jour Baïkal

Baïkal est un logiciel maintenu, de nouvelles versions sortent donc avec le temps. Je vais expliquer ici comment mettre à jour Baïkal tout en préservant les données de l'utilisateur. La première étape, comme d'habitude pour ce genre d'opération, sera de faire une sauvegarde complète de votre système.

  • Arrêter le service apache2 :
root@host:~# systemctl stop apache2
  • Sauvegarder la base de données sqlite3 :
root@host:~# sqlite3 /var/www/baikal/Specific/db/db.sqlite ".backup 'backup.db.sqlite'"
  • Sauvegarder le dossier baikal :
root@host:~# cp -a /var/www/baikal /var/www/$(date +%Y%m%d).baikal root@host:~# cd /tmp/ root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.10.0/baikal-0.10.0.zip root@host:~# unzip baikal-0.10.0.zip
  • Copier les répertoire actuels config et Specific dans /tmp/baikal:
root@host:~# cp -ra /var/www/baikal/config /tmp/baikal/ root@host:~# cp -ra /var/www/baikal/Specific /tmp/baikal/
  • Désactiver l'ancien dossier baikal :
root@host:~# cd /var/www/ root@host:~# mv baikal baikal.OLD
  • Déplacer la nouvelle version de baikal dans /var/www/ :
root@host:~# mv /tmp/baikal /var/www/
  • Redonner les droits à www-data :
root@host:~# chown -R www-data:www-data /var/www/baikal/
  • Démarrer le service apache :
root@host:~# systemctl start apache2
  • Ouvrir la page d'administration de Baïkal (exemple : https://baikal.std.rocks/admin/install/) et cliquer sur Start the upgrade :
L'écran de l'assistant de mise à niveau de Baïkal montre la mise à niveau de la version 0.9.5 vers la version 0.10.0 avec les boutons de démarrage de la mise à niveau et d'accès à l'administration en surbrillance.