---
categories: sysadmin Zimbra zimbra Nextcloud nextcloud sync synchro synchronisation vdirsyncer
title: Howto Vdirsyncer
...

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

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


## Installation

Installer les paquets sur votre poste :

~~~
# apt install vdirsyncer libpam-systemd
~~~

Avec votre compte Unix, créer le répertoire de configuration de Vdirsyncer :

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

## Configuration

Pour synchroniser un calendrier et un carnet d'adresse d'un serveur Zimbra vers un serveur Nextcloud, il faut spécifier dans la configuration les identifiants et les noms des calendriers et carnets d'adresses des deux instances.

Renseigner les variables shell suivantes :

~~~
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
~~~

Puis, créer le fichier de 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"
conflict_resolution = "a wins"
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"
conflict_resolution = "a wins"
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
~~~

Ensuite, vérifier la syntaxe de la configuration avec la commande suivante (il faut lancer à chaque modification) :

~~~
vdirsyncer discover
~~~

Lancer le timer systemd fournit par la paquet `vdirsyncer` avec un compte [utilisateur](https://wiki.evolix.org/HowtoSystemd#systemd-par-utilisateur) :

~~~
# loginctl enable-linger foo
# su - foo
$ systemctl --user enable vdirsyncer.timer
~~~

Ainsi, la commande `vdirsyncer sync` sera lancée toutes les 15 minutes.
