Migrer de Baïkal à OwnCloud avec vdirsync

Pourquoi migrer ?

Utilisateur heureux de services auto-hébergés sur Debian+YunoHost, j'utilise avec joie le serveur de calendrier et contacts Baïkal (via notamment l'excellente interface agendav).

Il manque quand même à Baïkal une fonctionnalité assez cruciale : le support de calendriers partagés entre utilisateurs. Baïkal v2, une réécriture du logiciel, doit apporter cette fonctionnalité mais force est de contacter que ça traîne, depuis au moins un an.

La fonctionnalité de partage est d'autant plus indispensable que je souhaite, pour les synchronisations mobiles, utiliser un compte dédié, afin d'éviter de stocker sur un téléphone les identifiants de mon compte principal d'utilisateur YunoHost.

Bref, OwnCloud offre cette fonctionnalité de partage, et fait le job, en tant que serveur de calendriers/contacts partagés. Même si j'étais réticent à installer tout OwnCloud pour juste les calendriers et contacts, pragmatiquement, c'est la meilleure solution pour moi.

Comment migrer ?

La migration que nous allons voir doit être effectuée par chaque utilisateur YunoHost, elle utilise le logiciel vdirsyncer, exécuté depuis une machine cliente (pas nécessairement sur votre serveur YunoHost).

Fonctionnalités :

  • Copie de tous les calendriers de Baïkal vers OwnCloud ;
  • copie du carnet d'adresses par défaut de Baïkal vers OwnCloud.

Limitations :

  • Les noms et les couleurs ne sont pas synchronisés1 ;
  • seul le carnet d'adresse par défaut est synchronisé2.

Environnement

La procédure a été testée sur Debian Jessie, mais devrait fonctionner depuis d'autres systèmes.

  • Notre utilisateur s'appelle jdoe
  • OwnCloud est installé à l'adresse https://example.com/owncloud/
  • Baikal est installé à l'adresse https://example.com/baikal/

Préparation

Installer OwnCloud (ex : via l'application dédiée si vous utilisez YunoHost), et y activer la fonctionnalité contacts.

Installation de vdirsyncer

Sur la machine cliente :

 sudo apt install python-virvualenv virtualenvwrapper
 mkvirtualenv --python /usr/bin/python3 vdirsyncer
 pip install vdirsyncer

Note : un virtualenv est utilisé car il y a des problèmes connus sinon.

Synchronisation

IL est ensuite nécessaire de créer un fichier de configuration pour indiquer à vdirsyncer ce qu'il doit synchroniser. Créer le répertoire ~/.config/vdirsyncer et y placer le fichier ~/.config/vdirsyncer/config avec un contenu similaire (y intégrer les bonnes URL et noms d'utilisateurs) :

[general]
status_path = ~/.vdirsyncer/status/

## Synchronise tous les calendriers

[pair calendars]
a = baikal_calendars
b = owncloud_calendars
collections = ["from a"]

[pair contacts]
a = baikal_contacts
b = owncloud_contacts
collections = ["from a"]

[storage baikal_calendars]
type = caldav
url = https://example.com/baikal/cal.php/calendars/jdoe/
username = jdoe
password.fetch = ["prompt", "Password for Baikal"]

[storage owncloud_calendars]
type = caldav
url = https://example.com/owncloud/remote.php/caldav/calendars/
username = jdoe
password.fetch = ["prompt", "Password for owncloud"]

## Synchronise le carnet d'adresse par défaut

[pair contacts_default]
a = baikal_contacts
b = owncloud_contacts

[storage baikal_contacts]
type = carddav
url = https://example.com/baikal/card.php/addressbooks/jdoe/default/
username = jdoe
password.fetch = ["prompt", "Password for Baikal"]

[storage owncloud_contacts]
type = carddav
url = https://example.com/owncloud/remote.php/carddav/addressbooks/jdoe/contacts
username = jdoe
password.fetch = ["prompt", "Password for owncloud"]

Il ne reste qu'à lancer la synchronisation:

vdirsyncer sync

Le logiciel devrait normalement vous demander vos mots de passe puis si il doit créer les calendriers qui n'existent pas sur OwnCloud.

Finitions

Il faut maintenant aller, pour chaque calendrier migré, dans owncloud, le nommer et lui choisir une couleur, la copie n'ayant pas préservé ces attributs, mais, cela reste un volume de travail manuel raisonnable...

Pour aller plus loin

Nous n'avons vu ici qu'un des usages possibles de vdirsyncer, il permet également :

  • de faire la migration dans l'autre sens ;
  • de maintenir deux serveurs caldav/cardav synchronisés ;
  • de synchroniser un serveur caldav/carddav avec votre machine locale.
  • ...

Bref, c'est un peu le offlineimap du caldav/carddav et il dispose d'une excellente documentation !


  1. C'est une limitation de vdirsyncer 

  2. Il est néanmoins possible de créer des carnets d'adresses vides dans OwnCloud, puis de réitérer la configuration et la procédure pour chaque.