---
categories: sysadmin
title: Howto Vdirsyncer
...

* Documentation: <https://vdirsyncer.pimutils.org/en/stable/>

Vdirsyncer est un outil de synchronisation de calendriers et de carnets d'adresses avec une gestion de droits et de priorités en cas de conflits.


## Déploiement

Son installation est simple avec son compte utilisateur :

~~~
pip install --user vdirsyncer
~~~

L'emplacement de son fichier de configuration :

~~~
mkdir -vp ~/.config/vdirsyncer/
~~~

## Configuration

### Synchronisation unidirectionnelle 

Admettons que l'on veuille la synchro d'un calendrier et d'un carnet d'adresse précis d'un serveur zimbra vers un serveur nextcloud. On a besoin des identifiants et du nom précis des calendriers et des carnets d'adresses :

~~~
ZIMBRA_URL=
ZIMBRA_USER=
ZIMBRA_MDP=
ZIMBRA_NOM_CALENDRIER=Calendar
ZIMBRA_NOM_CONTACT=Contacts
NEXTCLOUD_URL=
NEXTCLOUD_USER=
NEXTCLOUD_MDP=
NEXTCLOUD_NOM_CALENDRIER=personal
NEXTCLOUD_NOM_CONTACT=Contacts
~~~

Qui seront utile pour valider la configuration :

~~~
cat > ~/.config/vdirsyncer/config <<EOF
[general]
# Emplacement où se trouve la base des métadonnées
status_path = "~/.local/state/vdirsyncer/status/"

#### Calendar

[pair pull2push_calendar]
a = "remote_zimbra"
b = "remote_nextcloud"
collections = null

[storage remote_zimbra]
type = "caldav"
# On précise le calendrier :
url = "https://$ZIMBRA_URL/dav/$ZIMBRA_USER/$ZIMBRA_NOM_CALENDRIER"
username = "$ZIMBRA_USER"
password = "$ZIMBRA_MDP"
# Pas d'écriture sur cette instance :
read_only = true

[storage remote_nextcloud]
type = "caldav"
# On précise le calendrier :
url = "https://$NEXTCLOUD_URL/remote.php/dav/calendars/$NEXTCLOUD_USER/$NEXTCLOUD_NOM_CALENDRIER/"
username = "$NEXTCLOUD_USER"
password = "$NEXTCLOUD_MDP"

#### Contacts

[pair pull2push_contacts]
a = "remote_zimbra_contacts"
b = "remote_nextcloud_contacts"
collections = null

[storage remote_zimbra_contacts]
type = "carddav"
# On précise le nom du carnet
url = "https://$ZIMBRA_URL/dav/$ZIMBRA_USER/$ZIMBRA_NOM_CONTACT/"
username = "$ZIMBRA_USER"
password = "$ZIMBRA_MDP"
# Pas d'écriture sur cette instance :
read_only = true

[storage remote_nextcloud_contacts]
type = "carddav"
# On précise le nom du carnet
url = "https://$NEXTCLOUD_URL/remote.php/dav/addressbooks/users/$NEXTCLOUD_USER/$NEXTCLOUD_NOM_CONTACT/"
username = "$NEXTCLOUD_USER"
password = "$NEXTCLOUD_MDP"
EOF
~~~

A chaque modification de la configuration, il faut faire un discover :

~~~
vdirsyncer discover
~~~

Ainsi, on voit si les sélections sont correctes.

### Synchronisation

Sans disposer de daemon pour se lancer continuellement en arrière plan, la synchronisation se fait manuellement avec :

~~~
vdirsyncer sync
~~~

L'usage d'une tâche cron est donc conseillé :

~~~
10 1 * * * vdirsyncer sync
~~~