Artisan Numérique

/système/monitoring/gnome/ Sauvegarde, Restauration et Synchronisation d'Evolution

Evolution est ce que j'appellerais une application paradoxale : on l'aime presque autant qu'on la déteste. Extrêmement riche mais parfois dénuée de fonctions ultra-basiques, plantant bien régulièrement mais ayant toujours le bon goût de ne jamais perdre de données, Evolution est, avec la légèreté d'un caterpilar en apesanteur, à peu prés aussi indispensable que Kontacts sous KDE ou Outlook sous Windows. Un Outlook auquel il ressemble furieusement d'ailleurs, ce qui achève généralement d'irriter.

Maintenant il faut bien se rendre à l'évidence, pour un usage professionnel du GNU/Linux au quotidien, il n'y a guère de concurrence sous Gnome. Certains tenteront sûrement d'inviter Thunderbird, mais sans une gestion de contacts ne se limitant pas à un simple "carnet d'adresses", sans agenda intégré permettant de convier du monde en réunion ou encore la possibilité de convertir un courriel en rendez-vous, les deux outils ne boxent juste pas dans la même catégorie.

En comme Evolution devient assez vite le point de stockage névralgique de tout notre petit business, il est vite nécessaire de faire régulièrement une sauvegarde de tout cela.

evolution-data-center

Evolution est juste un client graphique exploitant evolution-data-center, un démon assurant le stockage, le requêtage et la restitution des mails, calendriers, contacts, notes et tâches, ainsi que la prise en charge des différents formats sous-jacent (webcal, ldap, etc.).

evolution-data-center est un module Bonobo, un cadre applicatif (framework), basé sur Corba qui permet, comme DBUS ou DCOM, la création et la mise en oeuvre de composant réutilisable communiquant les uns avec les autres. Et comme tout composant Bonobo, evolution-data-center est enregistré à l'installation et lancé uniquement lorsqu'un client en a besoin.

En standard, il est donc chargé en mémoire à l'ouverture de la session, en même temps qu'evolution-alarm-notify, le démon de notification de rendez-vous. Et il s'éteindra de lui-même si plus personne ne l'utilise.

Pour faire notre sauvegarde, il est donc nécessaire d'être assuré qu'evolution-data-center a bien sauvé toutes ses données sur le disque en l'éteignant proprement. Cela se fait simplement en utilisant un paramètre en ligne de commande du client evolution $$evolution --force-shutdown Fermeture de evolution (Shell d'Evolution) Fermeture de evolution-data-server-2.24 (Fichier et moteur webcal pour le calendrier d'Evolution / Fichier du moteur du carnet d'adresse d'Evolution) Fermeture de evolution-alarm-notify (Service de notification d'alarme du calendrier d'Evolution)

Comme vous le voyez, cela a pour effet d'éteindre proprement le serveur, mais aussi le démon de notification et evolution lui-même. Maintenant il ne sera pas nécessaire de relancer le serveur car en tant que composant Bonobo, il sera automatiquement redémarré si une application en a besoin.

Il ne nous restera plus après cela qu'à sauvegarder les données du serveur qui se situent dans le dossier ~/.evolution.

Configuration gconf

Les données d'évolutions ne se limitent pas au seul serveur de donnée, sa configuration étant rangée sagement dans des clefs gconf.

Pour ceux qui ne le savent pas, allez je me lance, gconf est l'équivalent de la registry de Windows avec fort heureusement quelques "détails" qui changent tout. Contrairement à la registry, gconf stocke ses données au format XML, en texte donc, facilement lisibles et modifiables. Autre point qui lui est une vraie différence, les clef de gconf sont définies par des schémas. Cela veut dire qu'une application doit au préalable fournir à gconf la structure de ce qu'elle désire stocker avant de pouvoir le faire. En résulte un système clairement moins bordélique.

Enfin, comme evolution-data-center, gconf est un composant Bonono que l'on va devoir arrêter avant de pouvoir sans risque lui dérober ses contenus (merci à tuxce pour ce point). Ici l'outil à utiliser est gconftool-2 :

gastongconftool-2 --shutdown

Ceci fait, nous pouvons récupérer les données propres à evolution dans le dossier ~/.gconf/apps/evolution.

Mis bout à bout...

Nous avons déjà deux dossiers à sauvegarder, et il en reste encore un troisième, ~/.gnome2_private/Evolution, qui contient les données privées comme les clefs et les certificats. Tout cela nous donne donc le script de sauvegarde suivant :

#! /bin/sh
# arrêt du serveur et des composants
evolution --force-shutdown

# arrêt de gconf
gconftool-2 --shutdown

# création du dossier de sauvegarde
target=$(mktemp -d /tmp/backup.XXXX) || exit 1

# sauvegarde des données
cp -a ~/.evolution $target/
cp -a ~/.gconf/apps/evolution $target/
cp -a ~/.gnome2_private/Evolution $target/

# création d'une archive
tar -C $target/ -jcvf ~/Desktop/sauvegarde-evolution.bz2 .

# ménage
rm -rf $target

Comme pour evolution-data-center, il n'est pas nécessaire de relancer gconf, la prochaine application en ayant besoin s'en chargera pour nous.

Ensuite le script de restauration fera à peu prés la même chose dans l'autre sens, toujours en éteignant préalablement le evolution-data-center et gconf, puis en décompressant l'archive et en écrasant les données existante, typiquement avec des commandes du genre rsync -av --delete .evolution/ ~/.evolution/.

A noter cependant qu'il existe aussi une méthode prête à l'usage qui normalement fait ce travail de sauvegarde/restauration via la commande /usr/lib/evolution/2.24/evolution-backup. Le seul truc est que pour moi elle a toujours planté en cours de route. Mais officiellement elle s'utilise comme ceci :

sauvegarde
gaston/usr/lib/evolution/2.24/evolution-backup --backup ~/Desktop/ma_sauvegarde

restauration
gaston/usr/lib/evolution/2.24/evolution-backup --restore ~/Desktop/ma_sauvegarde

Maintenant l'intérêt de savoir sauvegarder "à la main" est aussi de pouvoir synchroniser deux data-center, par exemple celui de votre machine de bureau et celui d'un portable. Dans ce cas, en utilisant ssh et rsync il suffira d'éteindre les deux serveurs (le local et le distant), puis de synchroniser les trois mêmes dossiers.

Des formats standards

Ce qui agace pas mal avec évolution c'est l'exploitation en pointillé des standards et à ce titre Novell est effectivement assez proche de Microsoft. Ainsi si les calendriers locaux sont bien au format ical (~/.evolution/calendar/local/system/calendar.ics), les contacts sont eux stockés dans une base de donnée binaire inexploitable simplement alors que l'on aurait préféré l'utilisation du format vcard comme c'est le cas pour Kontact.

Pour combler ce manque, il existe heureusement une commande relativement bien cachée dans l'installation d'evolution :

Dump de la base de contacts au format VCARD
gaston/usr/lib/evolution/2.24/evolution-addressbook-export
BEGIN:VCARD
VERSION:3.0
...

A noter qu'en ajoutant le paramètre --format=csv, ce serait le format CSV qui sera utilisé à la place de VCARD, utile par exemple pour l'importation dans une feuille de calcul ou une base de donnée.

Conclusion

Une fois que l'on sait où se trouvent les données et comment arrêter proprement le data-center, les sauvegardes, synchronisations et restaurations sont relativement simple à scripter. Certains pourront cependant regretter la lourdeur d'un tel composant pour le seul evolution. Mais ce serait oublier qu'en réalité ce serveur est utilisable par d'autres applications qu'évolution. Un exemple typique est la suite de gestion d'informations personnelles ultra-légère, pimlico du projet openedHand. Chaque élément de cette suite (contacts, tasks ou dates) utilise evolution-data-center et permet donc pour une machine aux ressources plus modeste d'accéder très rapidement aux coordonnées d'un contact ou à son agenda sans avoir à lancer évolution.