Lotharedon

Journal d'un apprenti-sorcier en Sciences Informatiques

vdirsyncer : le caldav/carddav hors-ligne

Date 24/02/2015

Vdirsyncer est un outil défini par son auteur comme étant au Card/Cal/Dav ce qu'est l'imap hors-ligne aux courriels. C'est un client léger et simple qui permet de récupérer localement ses contacts CardDav sous forme de vcards, et ses calendriers au format iCal. Il peut synchroniser n'importe quel répertoire distant et n'importe quel répertoire local, sans contraintes. Il permet donc de facilement partager ses contacts et ses agendas entre différents serveurs Card/Cal/Dav.


Installation

Pour l'installer, le plus simple est de le faire avec "pip" (python installer packages). Pour faire ca proprement, on va l'installer dans un environnement virtuel. Comme ca, on pourra facilement le déplacer et le supprimer.
Pour créer un environnement virtuel avec Python, il faut avoir installé le paquet python-virtualenv (à adapter selon votre distrubution). Ensuite, pour le créer, il suffit d'utiliser la commande "virtualenv <emplacement d'installation>". Par la suite, pour utiliser les programmes dans cet environnement, il suffira d'exécuter les binaires situés dans le dossier bin qu'il contient. Ensuite, en exécutant la commande "pip" contenu nous allons pouvoir installer vdirsyncer et ses dépendances. Parmi ses dépendances, certaines d'entre elles peuvent requérir gcc. Il faudra donc l'avoir installé au préalable. Voici la procédure complète pour installer vdirsyncer dans un environnement virtuel :

#Création de l'environnement virtuel : 
virtualenv ~/vdirsyncer_env/

#On se déplace dans le dossier de binaires, pour plus de simplicité à l'appel des commandes : 
cd ~/vdirsyncer_env/bin/

#Installation de vdirsyncer et ses dépendances : 
./pip install vdirsyncer
./pip install atomicwrites
./pip install requests-toolbelt
./pip install icalendar

#Requiert GCC, libxml-dev,  python-devel, libxslt-devel, libxslt-python
./pip install lxml
Et voilà ! Il ne reste plus qu'à le configurer


Configuration

Le configuration est simple. Elle se passe soit dans "~/.vdirsyncer/config", soit dans "~/.config/vdirsyncer/config", soit dans le fichier indiqué par la variable d'environnement "$VDIRSYNCER_CONFIG".
La seule partie obligatoire est la première section. Elle doit contenir :
[general]
status_path = ~/.config/vdirsyncer/status/
# ou encore
status_path = ~/.vdirsyncer/status/
#ou un autre dossier, à choisir en fonction de votre configuration

Ensuite, vient la configuration des pairs de dossiers à synchroniser. On y définit deux sources de stockages, locales ou distantes. On peut éventuellement aussi définir une résolution de conflit, et plusieurs collections de données, voir une éventuelle découverte automatique par rapport aux média indiqués. Voici la syntaxe :
[pair <nom de la paire>]
a = <premier média de la pair>
b = <second média de la pair>

#Éventuellement : 
conflict_resolution = <pouvant être null | a wins | b wins>
collections = <collections de données>
Pour la résolution de conflit :
  • null : indique qu'un message d'erreur est affiché, mais rien n'est changé
  • a wins (respectivement "b") : indique que les données de "a" (respectivement "b") ont la prévalence sur celles de "b" (respectivement "a")

Les collections sont soit un nom simple, soit une liste encadré par des crochets et séparée par des virgules des différentes collections disponible à synchroniser. Elles offrent un moyen plus simple de définir plusieurs calendriers ou agenda pour une source donnée sans devoir définir une nouvelle paire à chaque fois. Les noms sont entourrés de guillemets. Par exemple avec "collections = ["from b", "foo", "bar"]" vdirsyncer cherchera à synchroniser toutes les collections de "b", mais aussi "foo" et "bar".

Et enfin vient la configuration des médias à synchroniser. Il en existe cinq, dont un en lecture seul. Ils permettent de définir un stockage CardDav, un stockage CalDav, un fichier (vcf ou ics en fonction du type) où stocker l'ensemble des données, un dossier dans lequel seront créés un fichier par élément, et un calendrier en ligne en lecture seul à partir d'un lien vers un fichier ics. Au lieu de faire la liste de l'ensemble des possibilités décrites dans la documentation officielle, je vais donner quelques exemples simples. Pour chacun des stockages présentés, d'autres options existent, que je vous invite à découvrir dans le documentation officielle, dont les liens se trouvent à la fin de cet article.

  • Stockage CalDav
[storage <nom du stockage>]
type = caldav
url = <lien CalDav, recommandé en https en particulier si une authentification est requise>
username = <si une authentification est requise, nom de l'utilisateur>
password = <si une authentification est requise, mot de passe de l'utilisateur>
verify = <définit si le certicifat SSL doit être validé, par défaut à "True". Dans le cas d'un certificat auto-signé, peut être le chemin vers celui-ci>

  • Stockage CardDav : ce sont basiquement les mêmes options
[storage <nom du stockage>]
type = carddav
url = <lien CardDav, recommandé en https en particulier si une authentification est requise>
username = <si une authentification est requise, nom de l'utilisateur>
password = <si une authentification est requise, mot de passe de l'utilisateur>
verify = <définit si le certicifat SSL doit être validé, par défaut à "True". Dans le cas d'un certificat auto-signé, peut être le chemin vers celui-ci>

  • Stockage local dans un dossier (par exemple, stockage des contacts dans des fichiers vcf)
[storage <nom du stockage>]
type = filesystem
path = <chemin absolu vers le dossier qui contiendra les fichiers>
fileext = <extension des fichiers à créer. Ce paramètre ne modifie pas le format du fichier, juste l'extension>
De cette façon, des vcards sont tout le temps généré pour chacun des contacts, peu importe l'extension donnée.

  • Stockage local dans un seul fichier (par exemple, stockage calendrier dans un fichier ics)
[storage <nom du stockage>]
type = singlefile
path = <chemin absolu vers le fichier qui contiendra les données. Son extension ne modifie pas le format du fichier.>
De cette façon, un calendrier pourra être stocké au format ics (ou un répertoire au format vcf), peu importe l'extension du fichier indiqué.

  • Calendrier en lecture seul au format ics
[storage <nom du stockage>]
type = http
url = <lien vers le fichier ics, recommandé en https en particulier si une authentification est requise>
username = <si une authentification est requise, nom de l'utilisateur>
password = <si une authentification est requise, mot de passe de l'utilisateur>
verify = <définit si le certicifat SSL doit être validé, par défaut à "True". Dans le cas d'un certificat auto-signé, peut être le chemin vers celui-ci>


Utilisation

Son exécution est très simple : il n'y a que 3 commandes possible, avec éventuellement de la verbosité. Ces commandes sont :
  • discover : découvre les collections en fonction des paramètres indiqués dans la configuration des paires ; peut être suivi du nom des paires à traiter
  • sync : synchronise les données ; peut être suivi du nom des paires à traiter
  • repair : répare une collection donnée : doit être suivi du nom de la collection à traiter

L'unique option possible est l'ajout de verbosité avec son niveau. Cette option est "-v <niveau de verbosité>. Les différents niveaux peut être CRITICAL, ERROR, WARNING, INFO ou DEBUG.


Sources

Tags Tags de l'article :

Aucun commentaire

Comment RSS feed Flux RSS des commentaires de cet article