Transplantation de Cyrus+Sieve+Fetchmail
Le mardi 11 avril 2006 à 22:52 - Lien permanent
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
3) 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
4) 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
5) 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.