Passer d'OfflineIMAP à isync/mbsync
Ça fait un petit bout de temps que j'en ai marre d'OfflineIMAP. À l'époque, la seule raison pour laquelle je l'avais choisi comme utilitaire de synchronisation IMAP, c'était sa position proéminente dans les résultats de recherche sur Internet. Puis, je l'ai gardé pendant longtemps par inertie, et parce que faute de point de comparaison, je ne savais pas si ce que je lui reprochais était inhérent à n'importe quel utilitaire du genre. Mes griefs principaux étaient les suivants :
- c'est leeent (30 secondes pour synchroniser cinq comptes, en ne comptant pas le temps de téléchargement) ;
- lorsque je n'ai pas de connexion Internet, ça devient vraiment lent, comme s'il ne comprenait pas qu'il était hors-ligne ;
- lorsqu'on lance une instance d'OfflineIMAP alors qu'il y en a déjà une qui tourne, ça crée une situation chaotique et imprévisible, une sorte de deadlock (aw, Wikipédia me dit que ça s'appelle une « étreinte fatale » en français, n'est-ce pas adorable) qui nécessite souvent de tuer le processus à la main pour que ça aille mieux, et si on lance OfflineIMAP automatiquement toutes les deux minutes, ce genre de situation arrive souvent ;
- puis, finalement, j'ai rencontré un bug incompréhensible qui m'a convaincu d'aller voir ailleurs si l'herbe était plus verte.
J'ai donc installé et fait marcher isync/mbsync (le premier nom est historique, le second est le nom de la nouvelle version de l'exécutable). Je ne sais pour l'instant pas si c'est significativement mieux qu'OfflineIMAP, mais ça a l'air rapide, les gens en disent du bien sur Internet, et surtout, ça a l'avantage de ne pas être OfflineIMAP.
Bref, voilà un mini-guide pour passer de l'un à l'autre. Mon .offlineimaprc
ressemblait à ça :
[general]
accounts = damien
ui = quiet
[Account damien]
localrepository = damien_local
remoterepository = damien_remote
[Repository damien_local]
type = Maildir
localfolders = ~/Mail/ikura_damien/
[Repository damien_remote]
type = IMAP
ssl = yes
remotehost = desfontain.es
remoteuser = damien
remotepasseval = monsupermotdepasse
realdelete = no
cert_fingerprint = [plein de lettres et de chiffres]
et la section correspondante de mon .mbsyncrc
ressemble maintenant à ça :
IMAPAccount dam
Host desfontain.es
User damien
Pass monsupermotdepasse
CertificateFile ~/Documents/cert-imap-ikura.pem
IMAPStore dam-remote
Account dam
MaildirStore dam-local
Path ~/Mail/ikura_damien/
Inbox ~/Mail/ikura_damien/INBOX
Channel dam
Master :dam-remote:
Slave :dam-local:
Create Both
SyncState *
et une fois que c'est fait, il faut bien sûr remplacer l'appel à l'exécutable
d'OfflineIMAP par mbsync -a
(typiquement, dans le crontab). Passons donc les
configurations en revue pour comprendre comment traduire l'une en l'autre.
Trucs généraux
Pas mal de trucs ne nécessitent pas qu'on s'y attarde : j'imagine que vous aurez
compris que les options basiques ont changé de nom, que la syntaxe diffère un
peu. Les trucs nouveaux sont essentiellement le Create Both
(qui signifie :
quand y'a un dossier qui est créé en local, le créer aussi sur le serveur ; et
de même dans l'autre sens) et le SyncState *
qui dit de créer le fichier
contenant les informations sur l'état des dossiers dans les deux sens dans un
emplacement qui dépend du compte (~/Mail/ikura_damien/INBOX/.mbsyncstate
dans
mon exemple).
Configuration SSL
Mon serveur IMAPS utilise un certificat auto-signé, donc par défaut, mbsync
(comme OfflineIMAP) va logiquement m'envoyer balader lorsque je vais essayer de
m'y connecter. Avec OfflineIMAP, on pouvait indiquer un fichier .crt
contenant
le certificat en question, ou bien directement son empreinte.
Avec mbsync, on peut aller chercher le certificat et le mettre dans un fichier de la façon suivante :
openssl s_client -connect desfontain.es:993 -showcerts 2>&1 < /dev/null \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| sed -ne '1,/-END CERTIFICATE-/p' > ~/Documents/cert-imap-ikura.pem
puis on indique CertificateFile ~/Documents/cert-imap-ikura.pem
dans le
fichier de configuration, et pouf ça marche. (Évidemment, il faut utiliser
l'adresse de votre serveur imap à la place de desfontain.es
— le port 993
utilisé est le standard 993, mais vous aurez peut-être aussi besoin de changer
sa valeur par défaut.)
Les mots de passe en clair, c'est mal
Vous vous souvenez peut-être que dans un
article précédent,
j'expliquais que j'appelais un script Python depuis OfflineIMAP pour stocker mes
mots de passe IMAP dans un fichier chiffré par GPG, et non pas en dur dans le
fichier de configuration. mbsync ne sait pas appeler un script Python, mais il
sait lancer une commande externe. J'ai donc transformé mon .offlineimap.py
en
un script indépendant, que j'ai rendu exécutable et que j'ai
mis dans un dossier de mon
$PATH,
ce qui me permet de traduire mon remotepass = mailpasswd("damien")
en un
PassCmd "decryptpasswd.py damien"
(qui remplace le Pass monsupermotdepasse
précédent).
(Précision : le script decryptpasswd.py
contient en dur le chemin du dossier
dans lequel je stocke mes mots de passe chiffré : vous aurez probablement envie
de changer ça avant de l'utiliser.)
Conclusion (Ajoutée en avril 2017)
Ça fait donc presque deux ans que j'utilise isync et j'en suis très content.
- Les rares problèmes que j'ai eus sont arrivés avec une fréquence bien moindre que quand j'utilisais OfflineIMAP.
- C'est beaucoup plus rapide, ça n'ajoute qu'une à deux secondes au temps nécessaire pour télécharger les nouveaux mails.
- Ça arrive que ça échoue parce qu'il y a plusieurs instances qui tournent en
même temps, mais c'est vraiment rare. Tuer toutes les instances de
mbsync
suffit à le refaire fonctionner.
Je recommande :-)