Après l’installation d’un nouveau serveur Zimbra, je devais donc migrer les données (Calendriers, Contacts, Mails) qui étaient présentes sur l’ancien vers le nouveau serveur ZIMBRA. Après quelques recherche sur le wiki et sur le net voici comment j’ai procédé. L’installation d’Imapsync et de curl est nécessaire, tout s’est déroulé sur Debian 5 Lenny 32 bits.
Sources :
- http://wiki.zimbra.com/wiki/Zimbra_to_Zimbra_Server_Migration
- http://wiki.zimbra.com/wiki/Main_Page
- http://wiki.zimbra.com/wiki/ZCS_6.0:Zimbra_REST_API_Reference:Import_Contacts
- http://www.guillaume-p.net/installation-zimbra-open-source-sur-debian-5-lenny-64-bits/
1 – Installation des pré-requis.
Il faut installer le package imapsync et curl.
aptitude install imapsync curl
2 – Création du Script
Créer un dossier dans lequel on va stocker le script et le fichier contenant les noms d’utilisateurs et leur mot de passe.
mkdir /home/votreutilisateur/Scripts
cd /home/votreutilisateur/Scripts
2-1 ImapSync, Seulement pour les e-mails.
Créer un fichier lenom.sh. Dans mon cas, le fichier se nomme imapsync.sh
nano imapsync.sh
Saisir le code ci-dessous et enregistrer le fichier.
#!/bin/bash
logfile= »sinklog.txt »
host1=IP DE VOTRE SERVEUR SOURCE
#host1 is Source
host2=IP DE VOTRE SERVEUR DE DESTINATION
#host2 is Dest
domain=VOTRE NOM DE DOMAINE.DOM
#domain is where email account is
#everything after @ symbol
###### Do not modify past here
#######################################
date=`date +%X_-_%x`
echo « » >> $logfile
echo « ———————————— » >> $logfile
echo « IMAPSync started.. $date » >> $logfile
echo « » >> $logfile
{ while IFS=’;’ read u1 p1 u2; do
user=$u1″@ »$domain
echo « Syncing User $user »
date=`date +%X_-_%x`
echo « Start Syncing User $u1 »
echo « Starting $u1 $date » >> $logfile
imapsync -host1 $host1 –user1 « $u1 » –password1 « $p1 » –host2 $host2 –user2 « $u2 » –password2 « $p1 » –noauthmd5
#imapsync –nosyncacls –syncinternaldates –host1 $host1 –user1 « $user » –password1 « $p1 »–host2 $host2 –user2 « $user » –password2 « $p1 »
date=`date +%X_-_%x`
echo « User $user done »
echo « Finished $user $date » >> $logfile
echo « » >> $logfile
done ; } < liste_users_imapsync_final.csv
date=`date +%X_-_%x`
echo « » >> $logfile
echo « IMAPSync Finished.. $date » >> $logfile
echo « ———————————— » >> $logfile
Control + X pour quitter nano
Il demande si l’on sauve, dire Oui
en pressant la touche O
Il demande comment le fichier doit s’appeler, faire Entrée pour ne toucher à rien.
Créer un fichier csv de cette forme (Dans mon cas, le mot de passe et les noms d’utilisateur sont identiques sur les deux serveurs).
Nomdutilisateurduserveur1;motdepasse;nomdutilisateurduserveur2
Nomdutilisateurduserveur1;motdepasse;nomdutilisateurduserveur2
Exécution du script :
sh imapsync.sh
Imapsync Over SSL
Pour utiliser imapsync avec le protocole IMAPS, il faut modifier le script ci-dessus
nano imasync.sh
Il faut donc rajouter l’option –ssl2, par défaut il prendra le port 993 si jamais le port est différent, rajouter –port [numéro]
imapsync –host1 $host1 –user1 « $user » –password1 « $p1″ –host2 $host2 –user2 « $u2″ –password2 « $p1″ –ssl2 –noauthmd5
Liste des options d’Imapsync
–host1 : Adresse ip de l’hôte source
–host2 : Adresse ip de l’hôte de destination
–noauthmd5 : Permet de désactiver l’authentification chiffrée MD5
–ssl1 : Active le SSL sur l’hôte source
–port1 : Permet de spécifier le port utilisé pour l’IMAPS de l’hôte source
–ssl2 : Active le SSL sur l’hôte de destination
–port2 : Permet de spécifier le port utilisé pour l’IMAPS de l’hôte de destination
–syncinternaldates : Permet d’assurer la synchronisation de la date et de l’heure
–dry : Permet de tester l’imapsync sans copier les messages
3 – Migration des e-mails, contacts et calendrier
Le script suivant va permettre de migrer d’un serveur zimbra vers un autre les e-mails, les contacts et les calendriers de chaque utilisateur. La façon de migrer les mails dans ce script est identique à celle présentée ci-dessus.
3-1 Création du script
nano migration.pl
#!/usr/bin/perl
use strict;
use warnings;
#############################################################################
# Please make changes below to suit your system and requirements
# NOTE: hard code host1 & host2 – or pass in as first two parameters to script
#host1 is Source
my $host1=IP DE VOTRE SERVEUR SOURCE;
#host2 is Dest
my $host2=IP DE VOTRE SERVEUR DE DESTINATION;
# NOTE: enable ssl for imapsync
#my $imapsync = » -ssl1 -ssl2″;
##############################
# NOTE: Do not set these here – they come from userlist.txt
my $user;
my $pass;
my $data_file= »userlist.txt »;
open(DAT, $data_file) || die(« Could not open file! »);
while (<DAT>) {
chomp;
# NOTE: userlist.txt can have username@domain password (or comma, tab or |)
($user,$pass)=split(/[\|\s\t,]+/,$_);
##############
open (TESTOUT, « imapsync –buffersize 18192000 –nosyncacls –subscribe –syncinternaldates –noauthmd5 –host1 IPSERVEURSOURCE –user1 $user –password1 $pass –host2 IPSERVEURDESTINATION –user2 $user –password2 $pass | »);
#while (<TESTOUT>){
# print $_;
#}
#close TESTOUT;
### get contacts
open (TESTOUT, « wget –user $user –password $pass http://IPSERVEURSOURCE/zimbra/user/$user/contacts.csv –no-check-certificate| »);
while (<TESTOUT>){
print $_;
}
close TESTOUT;
### import contacts
open (TESTOUT, « curl -u $user:$pass –upload-file /Script_Imap_Sync/contacts.csv http://IPSERVEURDESTINATION/home/$user/contacts?fmt=csv –insecure| »);
while (<TESTOUT>){
print $_;
}
close TESTOUT;
### get calendar
open (TESTOUT, « wget –user $user –password $pass http://IPSERVEURSOURCE/zimbra/user/$user/calendar.ics –no-check-certificate | »);
while (<TESTOUT>){
# print $_;
}
close TESTOUT;
### import calendars
open (TESTOUT, « curl -u $user:$pass –data-binary \@calendar.ics http://IPSERVEURDESTINATION/service/home/$user/calendar?fmt=ics –insecure| »);
while (<TESTOUT>){
print $_;
}
close TESTOUT;
### remove files
unlink ‘calendar.ics’;
unlink ‘contacts.csv’;
# ###############
}
Création d’un fichier contenant les noms d’utilisateurs et le mot de passe de chaque utilisateur.
nano userlist.txt
nomdutilisateur|motdepasse|nomdutilisateur
Control + X pour quitter nano
Il demande si l’on sauve, dire Oui
en pressant la touche O
Il demande comment le fichier doit s’appeler, faire Entrée pour ne toucher à rien.
Exemple :
lulu.toto|ExemplE|lulu.toto
Grâce à ces deux scripts, il est maintenant possible de migrer un serveur de messagerie Zimbra vers un autre. Je tiens à préciser que les sous carnet d’adresse pour les contacts ne sont pas migrés.
Auteur : POMENTE Guillaume
Partager la publication "MIGRATION SERVEUR ZIMBRA OSE 6.0.8 VERS UN SERVEUR ZIMBRA OSE 6.0.8"
Bonjour,
J’envisage une migration de ce type à court terme, je ne vais tarder à m’y mettre et simple question : dans le cas de calendriers partagés, les droits sont ils repris ? merci.
Bonjour,
Je penses que les droits ne seront pas repris.
Cordialement,
je voudrai savoir si ça fonctionne de zimbra 7 a zimbra 8 ? et si oui quand je lance le scritp j ai
Unrecognized character \xBB in column 16 at migration.pl line 33.
Bonjour,
Je n’ai pas eu l’occasion de tester sur ces version de Zimbra. J’aimerai bien savoir si vous arriver à le faire fonctionner.
Cordialement,