Il y a des moments où des choix nous sont imposés, et dans mon cas il s’agit de migrer des boites mails d’un serveur Cyrus vers un serveur Microsoft Exchange… La méthode la plus simple pour migrer des centaines de boites mails est de passer par Imapsync. Mais il faut encore choisir les bonnes options…

Cela tien en 3 petites étapes détaillées dans cet article :

  • Préparer le serveur Cyrus
  • Préparer le serveur Exchange de destination
  • Installer IMAPsync et le script de migration

Préparer le serveur Cyrus

Dans mon cas c’est un Debian vieillissant en Lenny avec Cyrus 2.2.

Il faut d’abord créer un utilisateur admin dans Cyrus, ou utiliser l’utilisateur admin de base nommé ‘cyrus’.

Ensuite on autorise cet utilisateur à lire toutes les boites mails de cette façon :

# cyradm --user cyrus localhost
	sam user.* cyrus lrswipcda
	sam user.*.* cyrus lrswipcda

Pour vérifier, il suffit d’aller lire les droits d’une mailbox au hasard :

localhost> lam user. testuser*
	user. testuser:
	   testuser lrswipcda
	user. testuser.drafts:
	   testuser lrswipcda
	  cyrus lrswipcda
	user. testuser.sent:
	   testuser lrswipcda
	  cyrus lrswipcda
	user. testuser.trash:
	   testuser lrswipcda
	  cyrus lrswipcda

Autoriser les connexions IMAPS dans Cyrus si ce n’est déjà fait (dans mon cas c’était un webmail exclusivement donc pas d’IMAP actif)

Editer le fichier /etc/cyrus.conf et remplacer l’adresse IP d’écoute :

imaps		cmd="imapd -s -U 30" listen="10.xxx.xxx.xxx:imaps" prefork=0 maxchild=100

Dans le fichier /etc/imapd.conf rajouter les lignes suivantes :

tls_cert_file: /var/imap/server.pem
tls_key_file: /var/imap/server.pem

Il vous faut avoir généré une clé et un certificat SSL autosigné au préalable.

Préparer le serveur Exchange de destination

Sous Windows Server 2008R2, il vous faut créer un utilisateur qui est administrateur pour l’OU utilisée pour les comptes Exchange à migrer. C’est cette utilisateur qui sera utilisé par le script d’IMAPsync.

Activer IMAPs si ce n’est déjà fait.

Installer IMAPsync et le script de migration

Imapsync peut être installé sur n’importe quelle machine linux, étant donné que c’est un client qui se connecte aux 2 serveurs IMAP. Il est même préférable de ne pas le mettre sur le serveur Cyrus, mais sur un autre serveur ou pc linux afin de répartir la charge. Celle-ci est assez élevée pour le serveur Cyrus durant les transferts.

Imapsync ne se trouve pas sur les dépôts de Debian Wheezy, il faut donc l’installer manuellement. Voici la liste des dépendances et les commandes :

apt-get install libdate-manip-perl libterm-readkey-perl libterm-readkey-perl libdigest-hmac-perl libdigest-hmac-perl libdate-manip-perl libmail-imapclient-perl makepasswd rcs perl-doc git

cd /tmp

git clone git://github.com/imapsync/imapsync.git

cd imapsync/

sh examples/install_modules_linux.sh

make install

Et voici le script qui permettra de migrer les boites mails via un simple fichier texte en entrée avec les identifiants des utilisateurs :

  • Les identifiants doivent être les mêmes des 2 côtés dans ce script imapsync_cyrus_exchange.sh
  • Les comptes à migrer se trouvent dans le fichier compte-to-migrate.txt
  • le mot de passe de l’administrateur cyrus se trouve dans un fichier cyrusadmin.pass
  • le mot de passe de l’administrateur exchange se trouve dans un fichier passwd_ad.pass
#!/bin/bash
# imapsyncrun.sh. Script to migrate imap Cyrus to Exchange
DATE=`date +%m%d%y_%H:%M`
LOGFILE="imapsync_migration.log"
echo "IMAPSync starting..  $DATE" >> $LOGFILE

# Begin 'for' loop, calling the list of user names already collected
for ACCTNAME in `cat compte-to-migrate.txt`
do

    /usr/bin/imapsync --buffersize 8192000 --nosyncacls --subscribed --syncinternaldates --ssl1 --host1 IP_CYRUS \
     --user1 $ACCTNAME --authuser1 cyrus --passfile1 cyrusadmin.pass --host2 IP_EXCHANGE --user2 $ACCTNAME@DOMAINE --authuser2 ADMIN_WINDOWS --passfile2 passwd_ad.pass --tls2 --noauthmd5 --include 'INBOX' --regextrans2 's/drafts/Brouillons/' --regextrans2 's/sent/&AMk-l&AOk-ments envoy&AOk-s/' --regextrans2 's/trash/&AMk-l&AOk-ments supprim&AOk-s/' --regextrans2 's/INBOX/INBOX/'
    echo Done with $ACCTNAME on $DATE >> $LOGFILE
done

echo "" >> $LOGFILE
echo "IMAPSync Finished..  $DATE" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE

 

Remarques

On peut voir des options du style :

--regextrans2 's/drafts/Brouillons/'

Il faut savoir que sous Cyrus, peut importe la langue de l’utilisateur, le dossier IMAP porte un nom en anglais. Alors que sous Exchange, le nom du dossier est en fonction de la langue de l’utilisateur. Si vous travaillez dans un environnement multi-langues vous aller donc créer de nouveaux dossiers dans l’Exchange lors de la synchro et les utilisateurs d’une autre langue devront déplacer leurs emails ou renommer le dossier.

Si vous voulez éviter au maximum les frustrations des utilisateurs à renommer le dossier dans leur langue natale, vous pouvez toujours faire une liste des utilisateurs par langue en vous basant sur le LDAP. Ensuite, vous modifierez le script et l’exécuterez autant de fois que vous aurez de langues différentes dans l’entreprise.