fbpx skip to Main Content

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Dans la Migration Postfix mysql dovecot vers zimbra 8.7 partie 2 nous verrons comment créer un script. Au début nous utiliserons le script backup.php.

Création du script dans un fichier :

Ouvrir via ssh le serveur.

Vous allez dans le répertoire  /var/www/.

Comme éditeur nous utilisons Nano.

Faire un “touch” et le nom du fichier backup.php

# touch backup.php

Ouvrir avec “Nano”

# nano backup.php

Copier le script dans le fichier que nous venons de créer.

Informations demandée dans le script :

En premier temps, nous renseignons les informations dans le script de migration Postfix mysql dovecot vers zimbra 8.7 partie 2.

$user="admintest";
 $pass="admintest_2017";
 $db="postfix";
 $table_mbox="mailbox";
 $table_alias="alias";
 $file="exported.sh";

Une fois que les  données sont mises, nous pouvons mettre l’adresse IP de Mysql ou laisser localhost.

// Adresse du serveur (localhost ou adresse IP nom utilisateur et mot de
// passe qui a été renseigner au-dessus.

$mydb = mysql_connect('localhost',$user, $pass) or die ('Erreur de connexion au serveur');

Pas la peine de mettre le nom utilisateur et mot de passe nous l’avons déjà renseigner au début du script.

Voici le script complet traduit en français.

#! / Usr / bin / php <br>
 <center>
 <br><u><H2><b>Migration d'un serveur Postfix, mysql, dovecot vers zimbra 8</u></H2></b>
 // Postfixadmin (http://postfixadmin.sourceforge.net/) à Zimbra
 <br>
 (www.zimbra.com) <br>
 <br><u><b>Histoire:</u></b>
 <br> <br><u><b> Basé sur le travail de:</u></b> Jaros  [34m ~ Baw Czarniak
 <br><br> <u><b>Amélioré par </u></b> NERvOus (www.nervous.it) le 1-12-2009
 <br></center>
 <?php
 /////////////////////////////////////////////////////////

$user="Inscrire le nom utilisateur";
 $pass="Inscrire le mot de passe";
 $db="postfix";
 $table_mbox="mailbox";
 $table_alias="alias";
 $file="exported.sh";

////////////////////////////////////////////////////////
 Echo "Ce script génère un script bash appelé: <b><u>$file</b></u><br>
 <br>Le script php va recréer les mêmes comptes de messagerie et alias /
 forward sur votre serveur zimbra. \n\n <br>";

// Adresse du serveur (localhost ou adresse IP nom utilisateur et mot de // passe qui a été renseigner au-dessus.

$mydb = mysql_connect('localhost',$user, $pass) or die ('Erreur de connexion au serveur');

mysql_select_db($db); mysql_query("SET CHARACTER SET utf8"); mysql_query("SET NAMES utf8");

$query = "SELECT username,password,name,maildir,quota,domain FROM $table_mbox";

$dane = mysql_query($query) or die ('Erreur lors de la requête pour'.mysql_error());

echo "<br>Il écrit dans le <U><b>fichier '$file'</u></b> les différents comptes du domaines\n<br><br>";
 $fh = fopen($file, "w");

fwrite($fh, "#!/bin/sh -x\n\n");

while ($row = mysql_fetch_array($dane, MYSQL_NUM))
 {
 $data_mbox = "zmprov ca ".$row[0]." dsfs123hsdyfgbsdgfbsd displayName '".$row[2]."'\n";
 $data_mbox .= "zmprov ma ".$row[0]." userPassword '{crypt}".$row[1]."'"."\n";
 fwrite($fh, $data_mbox);
 }
 //ignore les alias de domaine, les alias qui se transmettent à eux-mêmes et aux alias

//pour lequel un mbox existe

$query = "SELECT address, trim(trailing ',' from goto) AS dest
 FROM ".$table_alias."
 WHERE address NOT LIKE '@%'
 AND address NOT IN (SELECT username FROM $table_mbox)
 HAVING address != dest";
 $dane = mysql_query($query) or die ('Erreur lors de la requête pour'.mysql_error());
 while ($row = mysql_fetch_array($dane, MYSQL_NUM)) {
 // multiple dests
 unset($rawdest_r);
 unset($dest_r);
 $rawdest_r = preg_split('/,/', $row[1]);
 foreach ($rawdest_r as $dest) {
 if ($dest != $row[0]) {
 //ne se transmet pas à lui-même
 $dest_r[] = $dest;
 }
 }
 if (count($dest_r) > 1) {
 // liste de ditribution
 $data_list .= "zmprov cdl $row[0]\n";
 foreach ($dest_r as $dest) {
 $data_list .= "zmprov adlm $row[0] $dest\n";
 }
 }
 if (count($dest_r) == 1) {
 preg_match('/@(.*)$/', $row[0], $matches);
 $acct_domain = $matches[0];
 preg_match('/@(.*)$/', $dest_r[0], $matches);
 $alias_domain = $matches[0];
 if ($acct_domain == $alias_domain) {
 // nous ajoutons un pseudonyme, pas un pseudo
 // essayez de créer un alias à la fois pour une
 // compte et pour une liste de distribution.  Un de
 // les commandes échoueront, pitié.
 $data_alias .= "zmprov aaa $dest_r[0] $row[0]\n";
 $data_alias .= "zmprov adla $dest_r[0] $row[0]\n";
 } else {
 // we are adding a forward
 $data_alias .= "zmprov ca $row[0] " . rand_str(11) . "\n";
 $data_alias .= "zmprov ma $row[0] zimbraprefmailforwardingaddress $dest_r[0]\n";
 }
 }
 }
 // créer d'abord toutes les listes de distribution, durer tous les alias
 // Nous ne pouvons pas créer d'alias pour les listes de distribution qui ne
 // existe encore
 fwrite($fh, $data_list . $data_alias);
 fclose($fh);

echo "Le script a terminé l'opération.<br>
 <br>Copiez maintenant le fichier <u><b>$file</u></b> vers le nouveau serveur où se trouve zimbra.
 Vous pouvez lancez les commandes suivantes:<br>
 <br># su - zimbra
 <br>et ensuite :
 <br>zimbra$: sh ./$file
 ";

function rand_str($length = 32, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')
 {
 // Longueur de la liste de caractères
 $chars_length = (strlen($chars) - 1);

//Démarrer notre chaîne
 $string = $chars{rand(0, $chars_length)};

//Générer une chaîne aléatoire
 for ($i = 1; $i < $length; $i = strlen($string)) {

// Prend un caractère aléatoire dans notre liste
 $r = $chars{rand(0, $chars_length)};

//Assurez-vous que les deux mêmes caractères n'apparaissent pas à côté de chacun
 // autre
 if ($r != $string{$i - 1}) $string .=  $r;
 }
 //Retourne la chaîne
 return $string; }
 ?>

Avant de lancer le script, nous devons changer dans le php.ini un paramètre.

Puis vous dans /etc/php5/apache/php.ini

#cd /etc/php5/apache

#nano php.ini

Vous devez vérifier safe_mode = ON en safe_mode = OFF

Maintenant que c’est fait, vous devez relancer Apache. Nous avons deux méthodes.

Enfin nous pouvons lancer le script pour la migration Postfix mysql dovecot vers zimbra 8.7 partie 2.

Le script se lance via une page web car c’est du PHP.

1ère méthode via le navigateur:

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

2ème méthode via le navigateur:

Lancer la commande :

php backup.php

Il va vous créer un fichier exported.sh dans le dossier /var/www/. Il faudra le copier dans votre le nouveau serveur Zimbra déjà installé.

scp -P 56201 exported.sh user@adresseIP:/home/user

Le -P sert si vous vous connecter avec un autre port. Ensuite je le copie dans le bon répertoire /opt/zimbra.

Dans le fichier exported.sh vous pouvez voir ceci :

#!/bin/sh -x

zmprov ca contact@exemple.net dsfs123hsdyfgbsdgfbsd displayName 'contact'
 zmprov ma contact@exemple.net userPassword '{crypt}$1$b5abc123$AWaBcDeF4b1K1ABcDEfgH.'
 zmprov ca admin@exemple.net dsfs123hsdyfgbsdgfbsd displayName 'admintest'
 zmprov ma admin@exemple.net userPassword '{crypt}$1$b5ABC123$AWaBcDeF4b1K1ABcDEfgH'
 zmprov ca postmaster@exemple.net dsfs123hsdyfgbsdgfbsd displayName 'postmaster'
 zmprov ma postmaster@exemple.net userPassword '{crypt}$1$b5abc123$AWaBcDeF4b1K1ABcDEfgH'
 zmprov ca webmaster@exemple.net dsfs123hsdyfgbsdgfbsd displayName 'webmaster'
 zmprov ma webmaster@exemple.net userPassword '{crypt}$1$b5abc123$AWaBcDeF4b1K1ABcDEfgH'
 zmprov aaa contact@exemple.net abuse@exemple.net
 zmprov adla contact@exemple.net abuse@exemple.net

Une fois copié, vous devez vous connecter avec le compte Zimbra pour la migration Postfix mysql dovecot vers zimbra 8.7 partie 2.

Créer le domaine exemple.net en lançant votre navigateur pour aller à la page de configuration  mail.exemple.net de zimbra en tant administrateur de la messagerie.

Une fois que c’est fait vous pouvez importer tous les comptes de postfix.

# su - zimbra

Ensuite vous pouvez lancer le script exported.sh avec la commande suivante :

zimbra$: sh ./exported.sh ou ./exported.sh

L’importation des comptes pour la migration Postfix mysql dovecot vers zimbra 8.7 partie 2 est terminée. Vous pouvez vérifier en administrateur, si les comptes sont bien remontés.

Pré-requis :

  1. Avoir utilisé exported.sh
  2. Utiliser del_zmprov_ca.sh
  3. Créer un fichier zimpassfile 1
  4. Créer un fichier zimpassfile 2
  5. Créer un script lien symbolique
  6. Créer un script de syncronisation

Exporter tous les mails Imap à l’aide de imapsync

Maintenant nous pouvons simplifier le fichier exported.sh à l’aide d’un script que j’ai créé pour enlever les lignes “zmprov_ca“.

Ce fichier je l’ai appelé :

  • del_zmprov_ca.sh
#!/bin/sh
# Script creer par Alain
# Fait le 18/01/2017
# utiliser pour reinitialiser les mots de passe de compte apres l'imapsync
# meme ce stade, nous voulons changer les mots de passe de compte
# pour etre tous les memes pour le Temps necessaire pour effectuer la migration imapsy
# ajoutez le mot de passe au fichier 'zimpassfile2'
# tel que specifie dans la commande imapsync
#
# Déclaration des variables
        outfile="reset_passwords.sh"
        _fperm="0754"
        _chmod="/bin/chmod"
        _exec="+x"
# insertion de bin/sh dans le fichier
        echo "#! /bin/sh" > $outfile

# Droits utilisateur
echo ""
echo "|-----------------------------------------------------------------------|"
echo "|la permission de droit $_fperm a change pour le fichier $outfile|"
        $_chmod $_fperm "$outfile"
echo "|-----------------------------------------------------------------------|"
echo ""
# Droit execution du fichier
echo "|--------------------------------------------------------------------|"
echo "|La permission chmod + $_exec pour executer le fichier $outfile|"
        $_chmod $_exec "$outfile"
echo "|--------------------------------------------------------------------|"
#Suppression des lignes zmprov ca
        sed -e '/zmprov ca/d' exported.sh > $outfile
echo ""
echo "|-------------------------------------------------|"
echo "|Le nouveau fichier $outfile a ete creee|"
echo "|-------------------------------------------------|"
        exit 0

Ça va nous créer un fichier reset_password.sh

Assurer que le script reset_passwords.sh soit exécutable et peut être exécuté par l’utilisateur Zimbra

chown zimbra:zimbra reset_passwords.sh

Ensuite vous créez le fichier zimpassfile 1 et vous utilisez la commande ci-dessous :

# touch zimpassfile1

Puis vous ajoutez le nouveau mot de passe de migration du serveur postfix dans ce fichier.

Faire la même chose pour zimpassfile 2 pour chaque utilisateur  et mettre le mot de passe du serveur zimbra.

Pour exporter tous les mails de chaque compte de Postfix nous allons utiliser un autre script en bash.

La migration de courrier électronique à l’aide d’Imapsync est compliquée lors de l’utilisation de l’option –auth-user postfixadmin ‘super-utilisateur’.

Avant de commencer, nous avons donc décidé de créer un nouveau compte de messagerie via postfixadmin. C’est un compte fictif  pour simplifier le déroulement de la migration. Nous l’avons appelé migration.

Créer un lien symbolique grâce au script que j’ai créée pour le dossier de messagerie de cette façon:

ln -s /var/vmail/exemple.net.com/ /var/vmail/exemple.net/migration/.migration

Puis vous préparer un fichier zimpassfile2 qui contient une liste de comptes qui seront sur la migration. Nommez-le userlist. Mettez-le dans le dossier /opt/Zimbra/.

contact@exemple.net
admin@exemple.net
postmaster@exemple.net
webmaster@exemple.net
abuse@exemple.net

Dans les informations  à renseigner dans script ci-dessous :

  • host1 c’est le serveur Postfix.
  • user1
  • host2 c’est le serveur Zimbra nous pouvons mettre l’adresse ip ou l’adresse internet
/usr/bin/imapsync --buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --host1 postfixserver.exemple.net --user1 \
 migration@exemple.net --passfile1 zimpassfile1 --host2 zimbraserver.exemple.net --user2 username@exemple.net --passfile2 zimpassfile2 \
 --folderrec INBOX.username@domain.com --regextrans2 's/(.*)/INBOX/' --noauthmd5

Maintenant vous pouvez créer un fichier log dans /opt/zimbra mais pour simplifier la manipulation, je vous ai fais un script que j’ai appelé Imapsync.log.sh

#!/bin/sh
# Script creer par Alain
# Fait le 18/01/2017
#
# Declaration des variables
        outfile="imapsync.log"
        _fperm="0777"
        _chmod="/bin/chmod"
        _chown="/bin/chown"
        _group="zimbra:zimbra"
        _dir="/opt/zimbra"
        _exec="+x"
# insertion de bin/sh dans le fichier
        if [ -d "$_dir" ];then
        echo "#!Fichier log Imacsync.log" > $outfile
        fi
echo ""
echo "|--------------------------------------------|"
echo "|Le nouveau fichier $outfile a ete creee|"
echo "|--------------------------------------------|"
# Droits utilisateur
echo ""
echo "|--------------------------------------------------------------------------------------------------|"
echo "|Donner les droits a tous les utilisateur sur le fichier $outfile avec la commande  chmod $_fperm|"
        $_chmod $_fperm "$outfile"
echo "|--------------------------------------------------------------------------------------------------|"
echo ""
# Droit du groupe du fichier
echo "|-----------------------------------------------------------------------------------------------------------|"
echo "|Donner la permission au  groupe $_group du fichier $outfile avec la commande chown $_group|"
        $_chown $_group "$outfile"
echo "|-----------------------------------------------------------------------------------------------------------|"
#
echo ""
echo "|--------------------------------------------------------------|"
echo "|Le nouveau fichier $outfile a ete creee dans $_dir|"
mv $outfile $_dir
echo "|--------------------------------------------------------------|"
        exit 0

Puis le script Imapsync ci-dessous permet de migrer tous les comptes d’utilisateurs. Vous pouvez modifier le script si vous voulez pas changer le mot de passe. vous devez mettre :

 

# zmprov setPassword $ACCTNAME xxxxxxx

et

# reset_passwords.sh

Explication des arguments

--host1       <string> : "from" imap server. Obligatoire.
 --port1       <int>    : port pour se connecter sur host 1. Le port par défaut est le  143.
 --user1       <string> : nom utilisateur du host 1. Obligatoire.
 --password1   <string> : nom utilisateur 1. Très dangereux, utiliser plutôt --passfile1
 --passfile1   <string> : fichier où se trouve le mot de passe du nom utilisateur 1.
 --host2       <string> : "Serveur de destination imap 2. Obligatoire
 --port2       <int>    : port pour se connecter sur host 2. Le port par défaut est le  143.
 --user2       <string> : nom utilisateur du host 2. Obligatoire.
 --authuser2   <string> : user to auth with on host2 (admin user).
 --password2   <string> : nom utilisateur 2. Très dangereux, utiliser plutôt --passfile 2
 --passfile2   <string> : fichier où se trouve le mot de passe du nom utilisateur 2.
 --noauthmd5            : ne pas utiliser l'authentification MD5.
 --authmech1   <string> : Mécanisme d'authentification à utiliser avec host 1: PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE.

--authmech2   <string> : Mécanisme d'authentification à utiliser avec host 2. Voir --authmech1
 --ssl1                 : Utiliser une connexion SSL sur host1.
 --ssl2                 : Utiliser une connexion SSL sur host2.
 --folderrec   <string> : Synchroniser ce dossier récursivement.
 --folderrec   <string> : et celui là, etc.
 --regextrans2 <regex>  : Application la regex entière à chaque dossier
 --regextans2 <regex> : et celui là. Etc. Lorsque vous utilisez l'option --regextrans2,  ajouter d'abord les options de sécurité
 --regexmess   <regex>  :Appliquer la regex entière à chaque message avant le transfert.

Exemple: 's/\000/ /g' #Pour remplacer null par espace.

--regexmess   <regex>  : et celui-là.
--regexmess   <regex>  : et celui-là, etc.

--regexflag   <regex>  : Appliquer la regex entière à chaque liste de drapeaux.

Exemple: 's/"Junk"//g' # Pour retirer "Junk" flag.

--regexflag   <regex>  : et celui-là, etc. --sep1 <string> : Séparateur dans le cas où l'espace de noms n'est pas pris en charge.

--sep2 <string> : idem. 
--delete : Supprimer des messages sur le serveur imap source après un transfert réussi.
 Utile dans le cas où vous souhaitez migrer d'un serveur vers un autre.
 Avec imap, supprimez les messages tags comme supprimés, ils ne sont pas vraiment supprimés.

Voilà le script modifier pour ma part.

#!/bin/bash
 # imapsync.sh. Script pour migrer les boîtes aux lettres imap sous le compte migratation
 #
 DATE=`date +%m%d%y_%H:%M`
 postfixdomaine="Mettre le nom du domaine ou adresse ip"
 mailpostfix="Mettre l'adresse mail du compte Migration"
 zimpassfile1="Chemin du fichier du mot de passe du serveur Postfix"
 zimpassfile2="Chemin du fichier du mot de passe du serveur Zimbra"
 zimbradomaine="Mettre le nom du domaine ou adresse ip"
 LOGFILE="imapsync.log"

echo "------------------------------------"
 echo "IMAPSync starting..  $DATE" >> $LOGFIL
 echo "------------------------------------"

# Commencer la boucle 'for', appeler la liste des noms d'utilisateur déjà collectés
 for ACCTNAME in `cat /home/zimbra/userlist`
 do

#Réinitialisez temporairement le mot de passe zimbra(ce n'est pas
 # obligatoire :
 # zmprov setPassword $ACCTNAME xxxxxxx

# Puis migrer:

/usr/bin/imapsync --buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --host1 $postfixdomaine \
 --user1 $mailpostfix --passfile1 zimpassfile1 --host2 $zimbradomaine --user2 $ACCTNAME --passfile2 zimpassfile2 \
 --folderrec INBOX.$ACCTNAME --regextrans2 's/(.*)/INBOX/' --noauthmd5 \ --ssl2 --authmech2 PLAIN

echo Done with $ACCTNAME on $DATE >> $LOGFILE

echo "------------------------------------"

Operation termine

echo "------------------------------------"

# Change the password back to the encrypted one on file.
 # reset_passwords.sh

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

Puis vous devez vous connecter avec le compte “root” depuis le serveur postfix.

# su -

Enfin  vous pouvez lancer script depuis le répertoire que vous avez créer ou se trouve le script et fichiers.

#./imapsync.sh

La migration d’un serveur Postfix, mysql, dovecot vers zimbra 8 est terminé. Tous nos emails sont importés dans les adresses mails adequate.

Information sur le script :

Je remercie le site de wiki.zimbra où se trouve une grande base de donnée.

Par conséquence vous pouvez voir le script sous le lien suivant :

https://wiki.zimbra.com/wiki/Migrating_from_Postfix_and_MySQL_with_bash

https://wiki.zimbra.com/wiki/Migrating_from_courier-imap_without_passwords_using_Imapsync

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Migration Postfix mysql dovecot vers zimbra 8.7 partie 2

Cet article comporte 0 commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :