Artisan Numérique

/bureau/documents/syncml/funambol/ Synchronisation des données personnelles avec Funambol

La synchronisation des contacts, agenda et autre PIMerie, dés lors qu'n GNU/Linux était de la partie, a de tout temps été un véritable enfer. Déjà à l'époque du Palm III c'était tout un poème pour que les deux environnements soient un tant soit peu synchrones. Aujourd'hui, que l'on se rassure, la synchronisation de cette vénérable périphérique passe à merveille, mais c'est pour du matos plus récent que ça coince. La faute à quoi ? Comme toujours à des protocoles pas ouvert que les développeurs du libre doivent comprendre, bidouiller et intégrer dans d'honorables projets comme OpenSync avec des passerelles vers synce histoire de prendre en compte les windowseries. Ça modprobe en tout sens, ça coince autant que ça peu et au final, soit les données sont en vrac de part et d'autre, soit rien ne s'est passé tout simplement.

Pourtant il existe bien un protocole ouvert et normalisé capable de synchroniser tout avec n'importe quoi, du moins en théorie. Et ce protocole miraculeux s'appelle SyncML...

Funambol, SyncML et OMA

Funambol est une société américaine qui a bâti une solution libre de synchronisation de données personnelles en exploitant la norme SyncML, un format d'échange normalisé basé sur XML. SyncML ne s'appelle d'ailleurs plus ainsi, mais OMA, de par le nom consortium qui l'a créé (Ericsson, IBM, Nokia, Motorola, Psion, etc.), l'Open Mobile Alliance.

La solution Funambol est donc une suite d'outils de synchronisation composée :

  • D'un serveur OMA-DS (Data Synchronisation) permettant la synchronisation des données personnelles (contacts, agenda, TODO, système de fichier, etc).
  • D'un serveur de "push" permettant d'obtenir, comme pour le blackberry, des notifications temps-réel dés la réception de nouveaux courriels. Personnellement cette fonction ne m'intéresse pas (je suis déjà bien assez notifié en simple pooling ;-) et j'ai plus dans l'idée d'exploiter pour cela certains fonctions cachées d'IMAP, mais ça c'est une autre histoire.
  • De clients SyncML pour une série d'applications comme thunderbird, Sunbird, Android, Evolution, etc.

D'un point de vue "circulation des données", le système OMA-DS est basé sur un référentiel pivot qui, épaulé par une base de données, va être synchronisé avec un client SyncML. Le principe est donc un client pour Evolution qui va se synchroniser avec Funambol-DS, et ensuite un client pour android qui viendra plus tard faire la même chose. Les deux outils ne se parlent donc jamais directement.

D'un point de vue technique, le service DS de Funambol est une application WEB à déployer sur un serveur Apache Tomcat, en java donc. Une fois le service lancé, les clients pourront discuter avec lui en utilisant une simple connexion HTTP qui passe donc très facilement les pare-feux.

Mise en place du service Funambol

La méthode "rapide"

Comme le faisait remarquer Dab un peu plus bas dans les commentaires, ce qui suit peut en effrayer plus d'un, au profit des solutions "gratuites" dont nous parlions plus haut. Alors pour ceux qui ne se sentent pas l'âme d'un administrateur système, nous allons commencer par la méthode "simple et rapide" consistant à tout installer sur votre poste de travail (ou sur un serveur si vous en avez un) et ne rien changer des réglages par défaut.

Vous allez tout d'abord devoir télécharger la dernière version du service Funambol qui est disponible sur la forge d'ObjectWeb. Ce que vous rechercher se trouve dans la section Funambol Bundle. Placez ensuite l'archive dans un dossier de votre choix, par exemple /opt et décompressez-la. Vous obtiendrez ainsi un dossier /opt/Funambol. Il ne reste alors plus qu'à lancer le service :

root/opt/Funambol/bin/funambol start
Lancement de Funambol

Voilà, c'est terminé. Funambol est en route prêt à synchroniser vos périphériques à travers l'URL http://mon_serveur:8080/funambol/ds. Vous pouvez maintenant directement sauter au chapitre "Paramétrage du service" pour ajouter un nouvel utilisateur et commencer à synchroniser.

Si vous utilisez une architecture 64 bits, le JRE contenu dans le Bundle est en 32bits, et cela va coincer. Le plus sûre dans ce cas est de supprimer le dossier tools/jre-1.5.0, d'installer le paquet java-6.0-openjdk. Le lancement devrait dés lors se passer correctement.

Approche plus en profondeur

Nous avons vu la version rapide de l'installation, voyons maintenant les choses un peu plus en profondeur. En effet, caché dans cette version "Bundle" se trouve en réalité une architecture de synchronisation dite à trois étages (en anglais, 3 tiers) avec Client-Service-Base de données, il est possible de mettre en oeuvre pas mal de combinaisons. Vous pouvez par exemple utiliser un service de base de données sur une machine A, mettre le service Funambol via Tomcat sur une machine B, la rendre accessible par le net via Apache sur une machine C, et s'y connecter de n'importe où, dans le monde ou chez vous, avec tous vos terminaux via le client associé.

²Ceci étant dit, il est important de cerner la finalité du besoin et dans 99% des cas, la synchronisation se fera chez soi avec l'ensemble des composants installés sur un serveur si vous en avez un, ou sur la station de travail. Dans ce qui suit, j'utilise mon architecture domestique en installant le service Funambol, sur le serveur local qui comprend déjà une base de données PostgreSQL. L'ouverture de la synchronisation sur le réseau publique est une option que l'abordera plus loin mais dont je n'ai pour l'instant pas l'usage.

Plus concrètement, Funambol exploite une architecture Java/J2EE. En d'autre termes, il s'agit d'un gros bazar relativement casse pied à mettre en oeuvre nécessitant (au minimum) une pile Java et un serveur TomCat. Comme son nom le laisse présager, ce "Bundle" contient tout ce qu'il faut pour mettre en oeuvre le service :

  • L'ensemble des applications pré-compilées.
  • Une interface graphique d'administration à distance.
  • Un service TomCat 6.x
  • Une base de donnée Hypersonic (aka HSQLDB)
  • Un JRE 1.5

Notre objectif est donc d'utiliser le moins possible les composants du Bundle pour se reposer au maximum sur les équivalents fournis dans votre distribution GNU/Linux. Pour l'exemple, nous allons utiliser

  • Un service de base de données PostgreSQL.
  • Le service Apache Tomcat 6 de notre distribution.
  • La pile Java OpenJDK 6 de la distribution.

Au final, ne restera du Bundle que l'application d'administration et la WebApp que l'on va injecter dans notre TomCat.

Mais avant d'aller plus loin, faite comme pour l'installation rapide, téléchargez et décompressez le Bundle Funambol dans le dossier /opt de votre serveur.

Installation de Java/TomCat

La première chose à faire est d'installer proprement la pile java (OpenJDK) et le service/conteneur de servlet Apache Tomcat. De nos jours, tout ceci est directement disponible dans les dépôts des bonnes distributions. Ici il s'agit de la Mandriva, mais les mêmes existent pour Debian & co, à quelques nommages près.

Installation de l'OpenJDK 6.0 en mode développement (nécessaire pour Tomcat)
rooturpmi java-1.6.0-openjdk-devel
...
rootjava -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.5) (mandriva-0.20.b16.0.3mdv2009.1-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b08, mixed mode)

Installation de Tomcat6
urpmi ecj
urpmi tomcat6

Installation de la console d'administration de tomcat (optionnel mais pratique)
urpmi tomcat6-admin-webapp
installation de l'environnement Java/Tomcat

Ceci fait, tomcat et java sont maintenant en place. Pour les javaistes qui voudraient retrouver leurs petits, l'installation se trouve dans le dossier /usr/share/tomcat6 où tous les dossiers classiques (webapps, logs, conf, etc.) sont symlinkés :

ls -la /usr/share/tomcat6/
total 12
drwxr-xr-x   3 root root 4096 2009-10-10 02:30 ./
drwxr-xr-x 109 root root 4096 2009-10-10 02:31 ../
drwxr-xr-x   2 root root 4096 2009-10-10 02:30 bin/
lrwxrwxrwx   1 root root   20 2009-10-10 02:30 conf -> ../../../etc/tomcat6/
lrwxrwxrwx   1 root root   31 2009-10-10 02:30 lib -> ../../../usr/share/java/tomcat6/
lrwxrwxrwx   1 root root   24 2009-10-10 02:30 logs -> ../../../var/log/tomcat6/
lrwxrwxrwx   1 root root   31 2009-10-10 02:30 temp -> ../../../var/cache/tomcat6/temp/
lrwxrwxrwx   1 root root   32 2009-10-10 02:30 webapps -> ../../../var/lib/tomcat6/webapps/
lrwxrwxrwx   1 root root   31 2009-10-10 02:30 work -> ../../../var/cache/tomcat6/work/
Les dossiers de tomcat dans la distribution

Avant de lancer le serveur, nous devons modifier les utilisateurs ayant accès à la console d'administration (si vous l'avez installée). Pour cela, vous devez éditer /etc/tomcat6/tomcat-users.xml pour obtenir un fichier comme ceci :

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="manager"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager"/>
</tomcat-users>
Les utilisateurs de tomcat

Si vous avez décidé d'ouvrir Funambol au réseau publique, cela peut sembler peu sécurisé comme approche, mais nous n'allons bien évidement jamais mettre tomcat en direct sur le web mais passer par Apache.

Ceci fait, nous allons préparer un peu le travail qui va suivre en ajoutant au lancement de Tomcat les options nécessaires à Funambol. Je sais, c'est un peu crétin mais je n'y peux pas grand chose. Funambol a besoin que Tomcat connaisse son dossier de base...

Pour cela, éditez le fichier /etc/sysconfig/tomcat6 et changez la ligne JAVA_OPTS comme ceci

JAVA_OPTS="-Dfunambol.home=/opt/Funambol  -Dfile.encoding=UTF-8 -Djava.library.path=/opt/Funambol/ds-server/lib/x86_64 -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
Les options java nécessaires à Funambol

Ensuite, nous alons recopier les librairies nécessaires au service Funambol dés le démarrage de Tomcat. Pour cela, nous allons nous placer dans le dossier /opt/Funambol/tools/tomcat/lib pour y faire notre marché :

rootcd /opt/Funambol/tools/tomcat/lib
rootcp core-framework-8.0.1.jar server-framework-8.0.0.jar log4j-1.2.14.jar /usr/share/tomcat6/lib
librairies bootstrap pour Funambol

C'est pas fini, il nous faut mainetnant modifier le fichier /etc/tomcat6/context.xml pour ajouter les datasources nécessaires au service :

<Resource name="jdbc/fnblds" auth="Container" type="javax.sql.DataSource" factory="com.funambol.server.db.DataSourceFactory" />
<Resource name="jdbc/fnblcore" auth="Container" type="javax.sql.DataSource" factory="com.funambol.server.db.DataSourceFactory" />
<Resource name="jdbc/fnbluser" auth="Container" type="javax.sql.DataSource" factory="com.funambol.server.db.DataSourceFactory" />
À insérer dans la balise Context, du fichier /etc/tomcat6/context.xml

Maintenant vous pouvez lancer tomcat par /etc/init.d/tomcat6 start et vérifier que tout fonctionne en allant à l'adresse http://mon_serveur:8080 avec un navigateur web. Vous arrivez alors sur la page d'accueil de tomcat et vous pouvez cliquer sur le lien Tomcat manager. Là saisissez l'identifiant tomcat et la même chose pour le mot de passe. Vous aboutissez alors sur la console d'administration des applications dans laquelle ne devrait se trouver que host-manager et manager (ce que nous utilisons en ce moment même).

Mise en place de la base de données

La base de donnée que nous allons utiliser ici est Postgresql mais tout ceci peut fonctionner avec MySQL ou Hypersonic (ce qui est le défaut).

Cela commence par la simple création d'une base de données. Ici aussi, c'est sur un LAN, on ne va pas s'embrasser de mots de passe compliqués mais simplement prendre l'utilisateur standard postgres. Nous allons aussi en profiter pour installer le pilote JDBC pour postgresql

rootcreatedb -U postgres funambol
rooturpmi postgresql-jdbc
Création de la base Funambol

Maintenant nous devons modifier les paramètres de l'installateur de Funambol pour prendre en compte cette base. Pour cela, éditez le fichier /opt/Funambol/ds-server/install.properties pour qu'il ressemble à ceci

dbms=postgresql

jdbc.classpath=/usr/share/java/postgresql.jar
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/funambol
jdbc.user=postgres
jdbc.password=
install.properties

Avant de sauvegarder le fichier, pensez à commenter les déclarations pour la base de données Hypersonic de sorte à éviter les conflits.

Installation du service Funambol-DS

Funambol est fourni avec un script permettant d'automatiquement créer, paramétrer, installer et déployer l'application Funambol sur Tomcat. C'est pour cela que nous devons préalablement définir préalablement l'emplacement de Tomcat par un export J2EE_HOME=/usr/share/tomcat.

Ce script prend aussi en charge la création des schémas de base de données, il suffit donc de taper "y" à chaque fois que cela est demandé (ou "n" pour une seconde installation/mise à jour !!). Ne vous inquiétez pas des erreurs SQL de type la table "xxxx" n'existe pas, le script est un peu bourrin et commence juste par faire un ménage pas très utile.

Nous commençons par définir les chemins accès à Java et à tomcat
rootexport JAVA_HOME=/usr/lib/jvm/jre
rootexport J2EE_HOME=/usr/share/tomcat6

Lancement de l'installation
cd /opt/Funambol/bin
./install
[echo] Funambol Data Synchronization Server will be installed on the Tomcat 6.0.x application server

[input] The Funambol Data Synchronization Server installation program can now create the database.
[input] You can skip this step if you have already a valid database created.

[input] If you choose 'y' your existing data will be deleted.

[input] Do you want to recreate the database?
[input]               (y,n)
...
Installation du service Funabol

Après avoir tapé un paquet de fois sur y, le service tomcat a normalement été nourris de trois nouvelles applications : /context, /funambol et /webdemo. La dernière est sensée être une sorte de myFunambol ligne pas chez moi ça plante lamentablement et je n'ai pas eu le courage d'aller comprendre pourquoi.

Alors pour alléger la mémoire, nous allons retourner dans le manager de tomcat et cliquer sur Undeploy pour chaque WebApp non utile (webdemo, sample, examples dans mon cas).

Nous pouvons maintenant vérifier que Funambol-DS est bien disponible en allant directement à l'URL http://mon_serveur:8080/funambol/ds qui doit nous renvoyer un résultat qui ressemble à ceci :

Funambol Data Synchronization Server v.8.0.0

Man=Funambol
Mod=DS Server
SwV=8.0.0
HwV=-
FwV=-
OEM=-
DevID=funambol
DevTyp=server
VerDTD=1.2
UTC=true
SupportLargeObjs=true
SupportNumberOfChanges=true
Ext=X-funambol-smartslow
Data Synchronisation service activé

Interfaçage avec Apache

Si vous voyez un intérêt à rendre le service Funambol disponible sur le réseau publique, il est hors de question d'utiliser tomcat pour cela car ce n'est juste pas fait pour. Ce qu'il faut, c'est poser un serveur Apache en frontal qui va dispatcher les requêtes vers l'application Funambol. L'autre avantage de cette approche est que vous n'ouvrez que les webapps que vous voulez, protégeant ainsi le manager par exemple.

Il y a deux manières (à ma connaissance) de connecter un serveur apache à un serveur tomcat. D'un côté nous avons le bon vieux reverse-proxy, simple et efficace, et de l'autre mod_jk, le connecteur spécifiquement conçu pour faire transiter les ordres à haut débit. Pour information, mod_jk utilise un protocole spécifique entre apache et tomcat appelé AJP13 qui a pour caractéristique d'être binaire, et donc compact. S'il s'agit de mettre en oeuvre Funambol pour une entreprise, mod_jk n'est même pas une option. Mais nous concernant, pour une synchronisation de temps à autre à un usage purement personnel, c'est un petit peu overkill. Ce sera donc le reverse proxy.

Si vous tenez malgré tout à prendre l'option mod_jk, vous pouvez utiliser ce tutoriel.

Pour mettre en oeuvre un reverse-proxy avec apache, la procédure est très simple. Sélectionnez un vhost et ajoutez le code suivant

<Proxy *>
      Order allow,deny
      Allow from all
</Proxy>
ProxyPass /mon_ds http://localhost:8080/funambol/ds
ProxyPassReverse /mon_ds http://localhost:8080/funambol/ds
Ajout à Apache d'un reverse-proxy vers Funambol

Pour que ceci fonctionne il faut installer le module apache mod_proxy. La syntaxe qui précède déclare valide l'utilisation du proxy quelle que soit l'URL et quelle que soit la source. C'est "un peu" ouvert mais sachant que Funambol dispose de son propre système d'authentification ce n'est pas un problème en soi.

Les deux lignes qui terminent la définition déclarent d'abord un accès entre l'URL apache /mon_ds et l'URL tomcat http://localhost:8080/funambol/ds, puis un accès dans l'autre sens entre ces deux mêmes URL.

Après un redémarrage de tomcat, vous pouvez vérifier qu'en allant à l'adresse http://mon_serveur/mon_ds, vous obtenez bien le message d'accueil de Funabol que nous avons déjà vu plus haut.

Le service est maintenant opérationnel sur le LAN en passant par http://mon_serveur/funambol/ds ou, sur le WAN par http://mon_serveur/mon_ds. Passons à la phase administration.

Paramétrage du service

Tout est maintenant fin prêt pour utiliser notre service funambol. Il nous reste maintenant à créer un compte utilisateur pour nous y connecter. Comme l'application d'administration fournie dans le bundle est en mode graphique, et que cette administration peut être faite de manière distante, le plus simple est de décompresser le bundle dans le dossier /opt de votre poste de travail. Si ce n'est pas possible, vous pouvez ceci dit passer par un tunnel SSH avec X11 forwarding.

Lorsque l'archive est décompressée, vous n'avez plus qu'à aller dans le dossier /opt/Funambol/admin/tools et lancer l'application funamboladmin. Pour ceux qui comme moi ont une architecture 64bits, l'application ne pourra pas se lancer car elle utilise le JDK fourni dans le Bundle et bien évidement compatible I32. Cela se règle en spécifiant un paramètre supplémentaire --jdkhome /usr/lib/jvm/jre pour utiliser le java de la distribution.

La première chose à faire est de se connecter au DS par File/Login. Vous devez alors saisir l'adresse IP ou le nom qualifié du serveur qui héberge Funambol. Attention, vous allez accéder au serveur tomcat, il n'est donc pas question d'utiliser ici l'adresse du serveur apache mais bien celle de la machine qui héberge tomcat.

Ensuite saisissez le User name ('admin' par défault) et le Password ('sa' par défault), puis valider. Si tout c'est bien passé jusqu'ici, vous devriez voir apparaître votre serveur dans l'arborescence.

Développez cette arborescence jusqu'à voir l'entrée Users puis par un click droit, ajoutez un nouvel utilisateur (username, password, etc.) en prenant soin de donner à cet utilisateur le rôle User. Notez bien l'identifiant et le mot de passe choisi, ils vont nous servir bientôt.

Le serveur est maintenant fin prêt, vous pouvez sortir de l'administration et nous pouvons passer à la synchronisation.

Synchronisations

Partir du vide

Après quelques essais infructueux, la meilleur manière que j'ai trouvé d'initialiser le système est de partir avec aucune donnée dans chaque client que l'on cherchera à synchroniser. Comme votre évolution doit contenir plein de rendez-vous et de contacts, il faut donc commencer par faire une sauvegarde.

# sauvegarde des contacts
##/usr/lib64/evolution/2.28/evolution-addressbook-export > ~/Desktop/adresses.vcf

# sauvegarde de l'agenda local. Si vous avez d'autres agenda, faites de même avec eux.
##cp ~/.evolution/calendar/local/system/calendar.ics ~/Desktop/calendar.ics
Sauvegarde des données d'évolution

Ceci fait, et après avoir vérifié 40 fois que vous avez bien tout sauvegardé (je décline toute responsabilité en cas de pépin), détruisez tous vos contacts sous évolution, et faites de même avec vos données d'agenda. Ensuite quittez évolution, tuez le démon evolution-data-server de sorte à ce qu'aucune données ne reste en cache puis relancez évolution. Il doit maintenant être totalement vierge.

Faites de mêmes avec les autres applications que vous souhaitez connecter à Funambol (Android, thunderbird, sunbird, etc.). Tout doit être sauvegardé et complètement vide. Lorsque c'est fait, nous pouvons passer à la synchronisation d'évolution.

Funambol et évolution

Pour synchroniser évolution avec le serveur Funambol, nous allons utiliser de client SyncML SyncEvolution. Il existe bien un connecteur SyncML pour OpenSync mais SyncEvolution est aussi simple que direct à mettre en oeuvre, pourquoi s'en priver.

Sous Mandriva, je n'ai pas trouvé de paquet correspondant dans les dépôts, mais la compilation est relativement aisée

rootsudo urpmi lib64edataserver-devel
rootwget http://downloads.syncevolution.org/syncevolution/sources/syncevolution-0.9.tar.gz
roottar -xvf syncevolution-0.9.tar.gz
rootcd syncevolution-0.9
root./configure --prefix=/usr
rootmake
rootsudo make install
Compilation de SyncEvolution

Ceci fait le binaire syncevolution devrait être disponible.

L'étape suivante consiste à générer un serveur à SyncEvolution, cela se fait par la commande syncevolution -c funambol qui va créer la configuration pour le serveur du même nom dans le dossier ~/.config/syncevolution/funambol. Ensuite nous allons modifier le fichier config.ini de sorte à utiliser les identifiant de notre utilisateur, mais aussi l'URL vers notre service Funambol. Cela doit donner quelque chose comme ceci (si vous avez mis en place le reverse-proxy, utilisez l'URL que vous avez déclarée dans le vhost) :

syncURL = http://mon_serveur:8080/funambol/ds/
username = mon_user
password = mon_password
fichier config.ini de syncevolution

Ceci fait, enregistrez la configuration. Maintenant que nous avons tout vider, il est temps de lancer notre synchronisation

syncevolution funambol
Local data changes to be applied to server during synchronization:
*** todo ***
no changes
*** memo ***
no changes
*** calendar ***
no changes
*** addressbook ***
no changes
...
Synchronization successful.

Changes applied during synchronization:
+---------------|-------ON CLIENT-------|-------ON SERVER-------|-CON-+
|               |   rejected / total    |   rejected / total    | FLI |
|        Source |  NEW  |  MOD  |  DEL  |  NEW  |  MOD  |  DEL  | CTS |
+---------------+-------+-------+-------+-------+-------+-------+-----+
|   addressbook |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0  |
|   two-way, 0 KB sent by client, 0 KB received                       |
|   item(s) in database backup: 0 before sync, 0 after it             |
+---------------+-------+-------+-------+-------+-------+-------+-----+
|      calendar |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0  |
|      two-way, 0 KB sent by client, 0 KB received                    |
|      item(s) in database backup: 0 before sync, 0 after it          |
+---------------+-------+-------+-------+-------+-------+-------+-----+
|          memo |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0  |
|          two-way, 0 KB sent by client, 0 KB received                |
|          item(s) in database backup: 0 before sync, 0 after it      |
+---------------+-------+-------+-------+-------+-------+-------+-----+
|          todo |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0/0  |  0  |
|          two-way, 0 KB sent by client, 0 KB received                |
|          item(s) in database backup: 0 before sync, 0 after it      |
+---------------+-------+-------+-------+-------+-------+-------+-----+
|          start Sun Oct 11 00:11:59 2009, duration 0:01min           |
|               synchronization completed successfully                |
+---------------+-------+-------+-------+-------+-------+-------+-----+
Première synchronisation

Voilà, première synchronisation effectuée. Ensuite il faut faire de même avec les autres clients...

Funambol et Android

Avant tout chose, nous allons régler son compte à cette maudite synchronisation automatique avec GMail. Pour cela allez dans les Menu/Settings, Synchro des données/Google et décochez comme sur la copie d'écran. Ceci fait, allez sur votre compte Gmail et faites le ménage. Le problème ne devrait maintenant plus se reproduire.

Pour revenir à Funambol, il existe un client pour android directement sur le Market. Cependant il est très limité car ne gère que les contacts. Pour disposer de la synchronisation des agendas, il faut aller faucher la version de dev. Pour la compiler, vous aurez besoin d'installer préalablement les paquets ant, ant-nodeps, subversion, java-1.6.0-openjdk-devel, javacc et bien évidement le SDK d'android que vous devez décompresser, par exemple en /opt/android-sdk. Ceci fait, vous pouvez récupérer la version de développement de client en passant par subversion:

Laissez le mot de passe vide
rootsvn co --username=guest https://android-client.forge.funambol.org/svn/android-client/trunk/android-client
...
rootcd android-client
rootcp build.properties.sample build.properties
Récupération de la version de développement du client Funambol pour Android

Pour pouvoir compiler, il nous faut d'abord modifier le fichier build.properties pour que la propriété sdk-folder pointe sur le dossier où vous avez installé le SDK pour Android.

sdk-folder=/opt/android-sdk
android.sdk.version=1.5
javacchome=/usr/share/java
build.properties

Il ne reste plus qu'à taper la commande ant pour lancer la compilation. Lorsque celle-ci s'achève, vous devez avoir un fichier FunambolSyncClient-debug.apk dans le dossier bin. Il suffit alors d'utiliser adb pour l'installer directement sur le terminal connecté en USB à votre machine :

adb install -r android-client/bin/FunambolSyncClient-debug.apk
1105 KB/s (261724 bytes in 0.231s)
pkg: /data/local/tmp/FunambolSyncClient-debug.apk
Success
Installation de la version de développement du client Funambol pour Android

Maintenant sur le terminal vous pouvez lancer l'application Sync. Pressez la touche Menu, et choisissez Settings. Maintenant vous pouvez saisir les coordonnées du service comme pour syncevolution. Pour lancer la synchronisation des contacts, pressez la barre correspondante deux fois (idem pour les agendas).

Synchronisations réelles

Maintenant que tout est en place, il ne nous reste plus qu'à importer nos contacts sauvegardés dans évolution, lancer SyncEvolution pour synchroniser avec Funambol et enfin synchroniser le terminal Android pour y récupérer les contacts. Idem pour les agendas.

Conclusion

C'est bien connu, la liberté n'a pas de prix et nous en avons fait la preuve ici. Un tutoriel pour utiliser un service "gratuit" aurait en comparaison pris une dizaine de lignes tout au plus. Mais quel plaisir de disposer de SON serveur avec SES données, sans craindre qu'elles finissent un jour dans la nature. Et ceci sans compter que la vitesse de synchronisation est carrément pas la même...

Mais au delà de ces considérations paranoïdes, Funambol est un fantastique outil pour maintenir nos données personnelles synchrones entre plusieurs machines (desktop, laptop, téléphone, etc.). Et somme toute, une fois que l'on sait comment s'y prendre, ce n'est pas si compliqué que cela, non ?

Maintenant il reste encore des "trous" dans cette synchronisation. Pour faire bien, il faudrait un client pour RoundCube, ce qui semble déjà possible avec Horde. De même, la synchronisation des favoris semble un étrange oubli dans la liste des informations personnelles.