Christophe Jacquet

Transplantation de Cyrus+Sieve+Fetchmail

J’ai changé de serveur à la maison : je suis passé d’un vieux x86 (Celeron à 533 MHz) à une vieille sparc64 (UltraSparc II à 440 MHz). J’ai donc dû transplanter mon serveur IMAP Cyrus. Ce billet donne des détails sur l’opération. Il s’agit avant tout d’une référence personnelle (l’installation de Cyrus est toujours un peu délicate), mais cela doit pouvoir profiter à d’autres, à condition d’adapter les chemins. La distribution utilisée est une Ubuntu Dapper.

Cyrus

Mon installation de Cyrus n’est pas très standard. Dès la première installation (automne 2003), j’avais prévu des transplantations futures. Du coup, les fichiers de Cyrus ne sont pas dans la hiérarchie générale des fichiers, mais dans /home/cyrus. Pour être précis, /var/lib/cyrus est chez moi dans /home/cyrus/var, et /var/spool/cyrus/mail est dans /home/cyrus/spool. Ceci permet de récupérer sans trop de soucis une installation existante, d’autant que dans le cas précis, j’ai déplacé sur le nouveau serveur le disque qui contient /home

  1. Recopie de l’ancien /etc/imapd.conf qui contient notamment les références vers mes emplacements particuliers.

  2. Installer Cyrus : apt-get install cyrus-imapd-2.2. On obtient alors de jolis messages dans le log système :

localhost master[18028]: about to exec /usr/lib/cyrus/bin/notifyd
localhost cyrus/notify[18028]: DBERROR db4: PANIC: fatal region error detected; run recovery
localhost cyrus/notify[18028]: DBERROR: critical database situation
localhost master[3214]: process 18028 exited, status 75
localhost master[3214]: service notify pid 18028 in READY state: terminated abnormally
  1. Il faut donc réparer la base de données. On efface l’ancienne version, et on la regénère :
rm /home/cyrus/var/db/*
su - cyrus -c "/usr/sbin/ctl_cyrusdb -r"

Les messages sont rassurants :

localhost cyrus/ctl_cyrusdb[18032]: recovering cyrus databases
localhost cyrus/ctl_cyrusdb[18032]: skiplist: recovered /home/cyrus/var/mailboxes.db (21 records, 6916 bytes) in 0 seconds
localhost cyrus/ctl_cyrusdb[18032]: done recovering cyrus databases
  1. Soyons fous, essayons de nous connecter avec un client IMAP. Hélas, ça ne fonctionne pas. Le log indique :
localhost cyrus/imap[18037]: badlogin: [192.168.*.*] plaintext ****** SASL(-1): generic failure: checkpass failed

Et /var/log/auth.log précise :

localhost cyrus/imap[18037]: cannot connect to saslauthd server: No such file or directory
  1. Il faut donc installer ce fameux saslauthd : apt-get install sasl2-bin (« Cyrus SASL API implementation »). Éventuellement, on peut redéfinir le mot de passe de l’utilisateur avec saslpasswd2.

Le problème en l’état, c’est que saslauthd ne démarre pas. Il faut éditer /etc/default/saslauthd et décommenter la ligne (au début du fichier) :

# This needs to be uncommented before saslauthd will be run automatically
START=yes

Ça y est, ça fonctionne !

Il est possible de réaliser des opérations de maintenance avec cyradm. Pour cela, installer le paquet cyrus-admin-2.2. Ensuite se connecter avec son utilisateur et faire help. Par exemple, on peut ainsi lister les mailboxes (commande lm).

Sieve

Sieve est installé avec Cyrus. Mes filtres sont décris dans un fichier sieve-default de mon répertoire Home ; il ne reste qu’à les envoyer à Sieve. Pour cela, j’utilise sieveshell (issu du paquet cyrus-admin-2.2 :

$ **sieveshell localhost**
connecting to localhost
Please enter your password:
> **put sieve-default**
> **list**
sieve-default
> **activate sieve-default**
> **list**
sieve-default  <- active script
> **quit**

Fetchmail

  1. Recopier l’ancien /etc/fetchmailrc

  2. Installer Fetchmail : apt-get install fetchmail

Il y a des problèmes de droits lors de l’appel de cyrdeliver. Les corriger en donnant les droits en écriture sur les sockets de Cyrus au groupe mail:

root@sun:/etc# ls -la /var/run/cyrus/socket/
total 0
drwxr-x--- 2 cyrus mail 80 2006-04-11 09:46 .
drwxr-xr-x 3 cyrus mail 60 2006-04-11 09:06 ..
srwxrwxrwx 1 root  root  0 2006-04-11 09:46 lmtp
srwxrwxrwx 1 root  root  0 2006-04-11 09:46 notify
root@sun:/etc# chown -R cyrus:mail /var/run/cyrus/socket/
root@sun:/etc# **ls -la /var/run/cyrus/socket/**
total 0
drwxr-x--- 2 cyrus mail 80 2006-04-11 09:46 .
drwxr-xr-x 3 cyrus mail 60 2006-04-11 09:06 ..
srwxrwxrwx 1 cyrus mail  0 2006-04-11 09:46 lmtp
srwxrwxrwx 1 cyrus mail  0 2006-04-11 09:46 notify

Il faut ensuite veiller à ce que Fetchmail soit dans le groupe mail, ce qui n’était pas le cas par défaut chez moi…

Théorie et pratique

Voici donc la théorie… En pratique, l’opération a été plus compliquée chez moi, car ça ne fonctionnait toujours pas ! cyrdeliver échouait pour une raison mystérieuse. Je suis donc revenu à une version 2.1 de Cyrus, mais les mêmes problèmes se posaient. Après plusieurs redémarrages, les choses ont fini par s’arranger, d’une façon un peu obscure d’ailleurs… La conclusion, c’est qu’une installation de Cyrus est toujours un peu délicate, surtout s’il s’agit de récupérer d’anciennes données. Les quelques indications données ici devraient permettre de se sortir des problèmes les plus courants.

HTML5 valide ? © . ✍ Contact. Mentions légales.