Radicale, une alternative à google Calendar
dim. 30 décembre 2018
Et si pour se dégoogliser on commmencé par l'agenda ...?
Pourquoi Radicale
Se passer de Gmail moi ça fait plus d'un an que j'essaye mais franchement c'est dur. À l'occasion d'un changement de téléphone je suis tombé sur le projet Radicale. Mon but était juste de partager des contacts mais Radicale semblait tellement simple que j'ai voulu tenter l'expérience de la dégooglisation de mon agenda.
Ce qui m'a convaincu c'est ça:
$ python3 -m pip install --upgrade radicale
$ python3 -m radicale --config "" --storage-filesystem-folder=~/.var/lib/radicale/collections
Donc en gros Radicale nécsessite juste un module python et un fichier de configuration. Profitons de cette simplicité pour mettre en oeuvre nos connaissances Ansible et créer un rôle Radicale.
Rôles Ansible Radicale
Avant de démarrer la création d'un rôle faisons la liste des tâches à réaliser.
Pour installer Radicale il nous faut:
- Un fichier de configuration
- Un dossier pour stocker les données sur le serveur
- Un mot de passe pour sécuriser l'accès au serveur
- Un certificat pour le SSL
- Démarrer Radicale en mode service
Htpasswd: Création du mot de passe d'accès
htpasswd est un outil fourni par Apache pour gérer l'authentification de base par fichier d'utilisateur.
Radicale prend en charge ce mode de sécurisation. Pour l'activer il faut ajouter dans le fichier de configuration l'option suivante:
[auth]
type = htpasswd
Et pour générer un fichier contenant un utilisateur et un mot de passe on lance la commande:
htpasswd -c passwdfile user_name
Certificat
Voici les divers étapes qui m'ont permis d'obtenir un certificat:
- Générer la clé qui permettra de signer le certificat :
openssl genrsa -des3 -out server.key 1024
- Génération du fichier csr (Cerficat Signing Request). On répond à un certain nombre de questions. Il faut bien mettre le nom du serveur tel qu'il est appelé de l'extérieur dans le champ « Common Name » (CN).
openssl req -new -key server.key -out server.csr
- Suppression de la passphrase de la clé (éviter de devoir renseigner la passphrase à chaque démarrage du servuer)
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
- Génération du certificat :
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Configuration Radicale
Voici la configuration que j'ai mis en place. Pas de commentaire particulier. Pour en savoir plus référez vous à la documentation.
[auth]
type = htpasswd
htpasswd_filename = /etc/radicale/passwdfile
# encryption method used in the htpasswd file
htpasswd_encryption = md5
# Average delay after failed login attempts in seconds
delay = 1
[server]
hosts = 0.0.0.0:5232
ssl = True
protocol = PROTOCOL_TLS
ciphers = AES256-SHA
certificate = /etc/ssl/radicale.cert.pem
key = /etc/ssl/radicale.key.pem
max_connections = 5
# 10 Megabyte
max_content_length = 10000000
# 30 seconds
timeout = 30
[encoding]
request = utf-8
stock = utf-8
[storage]
filesystem_folder = /var/lib/radicale/collections
Création du rôle Radicale
Dans l'article sur ansible nous avons aborder la création d'un rôle. Vous pouvez reproduire manuellement l'arborescence d'un rôle ou télécharger le projet radicale sur mon compte bitbucket.
On obtient l'arboresence suivante:
.
├── inventaire
│ ├── file
│ │ ├── passwdfile
│ │ ├── server.crt
│ │ ├── server.csr
│ │ ├── server.key
│ │ └── server.key.org
│ └── host
├── playbook.yml
└── roles
└─ radicale
├── tasks
│ └── main.yml
└── template
├── config.j2
├── logging.j2
└── radicale.service.j2
Le fichier main.yml
contient les tâches à réaliser.
Pas de commentaire sur ce fichier qui est évident à comprendre.
Il faut juste l'adapter à votre configuration personnelle:
- name: Install python3
become: true
apt: name=python3 update_cache=yes
- name: Intall pip
become: true
apt: name=python3-pip update_cache=no
- name: Install Radicale
become: true
pip:
name: radicale[bcrypt]
executable: pip3
- name: Creation user/group Radicale
become: true
user:
name: radicale
system: true
shell: /sbin/nologin
createhome: no
- name: Creates conf directory
become: true
file:
path: /etc/radicale
state: directory
owner: root
group: root
mode: 0755
- name: Copy du fichier passwd
become: true
copy: src="inventaire/file/passwdfile" dest="/etc/radicale/passwdfile"
- name: Copie de la cles SSL
become: true
copy: src="inventaire/file/pasgrave.key" dest="/etc/ssl/radicale.key.pem"
- name: Copie du certificats SSL
become: true
copy: src="inventaire/file/pasgrave.crt" dest="/etc/ssl/radicale.cert.pem"
- name: Creation du fichier de configuration
become: true
template: src=template/config.j2 dest=/etc/radicale/config
- name: Creation du fichier de logging
become: true
template: src=template/logging.j2 dest=/etc/radicale/logging
- name: creation dossier storage + droit
become: true
file:
path: /var/lib/radicale/collections
state: directory
owner: radicale
group: radicale
# The storage should not be readable by others.
mode: 0750
- name: Creation du service
become: true
template: src=template/radicale.service.j2 dest=/etc/systemd/system/radicale.service
- name: Start service
become: true
service:
name: radicale
enabled: true
state: restarted
Playbook Radicale
Il ne reste plus qu'à ajouter le rôle radicale dans un playbook:
---
- name: Installation Radicale
hosts: CardDav
remote_user: user
roles:
- radicale
...
Lancer le playbook et ...
Voila l'interface de gestion de Radicale diponible en à l'url https://hostname:5232/
La suite
Dans l'article sur l'utilisation de radicale nous verrons comment partager un agenda avec Linux et IOS.
Sources
- Création d'un certificat auto-signé
- Créer un certificat auto-signé et le renseigner dans apache
- Héberger son propre serveur de calendrier et de contacts
Notes divers
Ansible fourni un module pour la gestion de l'authentification htpasswd mais je suis peut être tombé sur un bug dans ce module.