Le problème:
Une migration de machine sous Debian GNU/Linux 4.0 (disque dur explosé) où j'ai récupéré les contenus de /var/spool/cyrus et /var/lib/cyrus "bruts de fonderie", mais en changeant de version d'OS, en passant de 32-bit à 64-bit, pour 1000 raisons, Cyrus Imapd refuse de se relancer.
La bonne nouvelle: tous les mails sont en clair dans /var/spool/cyrus/mail. Cool. La mauvaise: l'index des mailboxes (la liste) est foutue, irrécupérable, et binaire. HOU!
Idée de comment réparée trouvée sur:
http://artisan.karma-lab.net/fr/node/1084
(1000 mercis...)
Donc, comment faire?
Se contenter de récupérer /var/spool/cyrus/mail (écraser à partir du backup) et partir d'une install dans /var/lib/cyrus "from scracth", tel que l'OS l'installe.
Ensuite l'idée est de reconstruire l'index dans /var/lib/cyrus/mailboxes.db à partir de l'arborescence de /var/spool/cyrus/mail.
Exécuter le script suivant, récupérer son contenu et le mettre dans un fichier, par exemple /tmp/mailboxes.txt.
#!/bin/sh SPOOL_CYRUS_MAIL=/var/spool/cyrus/mail cd $SPOOL_CYRUS_MAIL for mb in * ; do cd $mb if [ -d user ] ; then cd user find . -type d | sed "s/\.\///g" | sed "s/\//\./g" | sed "s/\([a-z]*\)\(.*\)/user\.\1\2\t0\tdefault\t\1\tlrswipcda/g" cd .. fi cd .. done | grep -v ".." | sort -u
L'idée est que la syntaxe du fichier soit la même que celle du fichier renvoyé par:
/usr/sbin/ctl_mboxlist -d
Arrêter le serveur cyrus, et importer les infos du fichier (sous le compte cyrus):
/usr/sbin/ctl_mboxlist -u /tmp/mailboxes.txt /usr/sbin/ctl_mboxlist -d
Puis:
/usr/sbin/cyrreconstruct
L'option -rfx de cyrreconstruct peut s'avérer utile...
Voir aussi à lancer des commandes sam depuis cyradm pour mettre à jour les ACL sur les boîtes.
Redémarrer le serveur.
Voilà!
Les infos type "lu"/"pas lu" sont perdues, mais au moins le contenu des mails est là. Ouf.