El siguiente tutorial muestra una serie de scripts para migrar las cuentas de usuarios, sus principales atributos, passwords, listas de distribución y aliases para migrar esta información desde un servidor Zimbra a otro servidor Zimbra.
Nota: se supone que el nuevo servidor Zimbra ya se encuentra instalado, configurado y listo para empezar a cargar la data.
Nota2: todos estos scripts se deben ejecutar como usuario zimbra.
1) Migrando los dominios
En primer lugar, es necesario crear los dominios:
for a in `zmprov gad`; do echo " cd $a"; done > 01_CREATE_DOMAINS.zm
Restore
zmprov < 01_CREATE_DOMAINS.zm
2) Migrando las cuentas de usuario
Aquí, sólo creamos las cuentas de correo con un password cualquiera temporal (después se migrará el password y el resto de atributos del usuario)
for a in `zmprov -l gaa`; do echo " ca $a PaSS.2013,temp"; done > 02_CREATE_ACCOUNTS.zm
Nota: hay algunos casos en que se desea mantener el mismo zimbraId del usuario, por lo tanto, en el momento de crear el usuario se debe setear esto (después no es posible modificarlo):
for a in `zmprov -l gaa`; do zmprov ga $a zimbraId | grep -v ^# | sed -e "s/zimbraId: / ca $a PaSS.2013,temp zimbraId /g"; done > 02_CREATE_ACCOUNTS.zm
Restore
zmprov < 02_CREATE_ACCOUNTS.zm
3) Migrando los atributos de los usuarios
Nota: saltarse esta parte y vea al final la otra forma mucho más rápida para estos atributos
En este script se toman varios de los principales atributos de lis usuarios, tales como nombre, apellido, quota, entre otros.
#!/bin/bash
attrs="cn sn displayName givenName zimbraMailQuota telephoneNumber co ou company physicalDeliveryOfficeName"
for PAR in $attrs; do
for a in `zmprov -l gaa`; do
echo " ma $a $PAR \"`zmprov -l ga $a $PAR | grep -v ^# | sed "s/$PAR: //"`\""
done > MODIFY_$PAR.zm
done
Restore
#!/bin/bash
attrs="cn sn displayName givenName zimbraMailQuota telephoneNumber co ou company physicalDeliveryOfficeName"
for PAR in $attrs; do
zmprov < MODIFY_$PAR.zm
done
4) Aliases
Busca de cada una de las cuentas los aliases que posee
for a in `zmprov -l gaa`; do zmprov -l ga $a zimbraMailAlias | grep -v ^# | sed -e "s/zimbraMailAlias: / aaa $a /g"; done | grep -v ^$ > 04_SET_ALIASES.zm
Restore
zmprov < 04_SET_ALIASES.zm
5) Listas de Distribución
Obtiene el listado
for a in `zmprov -l gadl`; do echo "cdl $a "; echo -ne "adlm $a "; zmprov -l gdl $a zimbraMailForwardingAddress | grep zimbraMailForwardingAddress | sed 's/zimbraMailForwardingAddress: //g' | sed ':a;N;$!ba;s/\n/ /g'; echo; done > 05_CREATE_LISTS.zm
DisplayName: obtiene el display name de las listas de distribución:
for a in `zmprov gadl`; do echo -ne " mdl $a "; name=`zmprov gdl $a displayName | grep ^displayName | sed 's/displayName: //g'`; echo -ne "displayName \"$name" ; echo "\"" ; done > 05_1_MODIFY_LISTS.zm
Restore
zmprov < 05_CREATE_LISTS.zm
zmprov < 05_1_MODIFY_LISTS.zm
6) Forwards
Se obtiene los forwards:
for a in `zmprov -l gaa`; do fw=`zmprov ga $a zimbraPrefMailForwardingAddress | grep zimbraPrefMailForwardingAddress | sed 's/^zimbraPrefMailForwardingAddress: //g'`; if [ "$fw" == "" ]; then echo > /dev/null; else echo -ne " ma $a zimbraPrefMailForwardingAddress \"$fw\"\n";fi; done > 06_SET_FORWARDS1.zm
Forwards ocultos:
for a in `zmprov -l gaa`; do fw=`zmprov ga $a zimbraMailForwardingAddress | grep zimbraMailForwardingAddress | sed 's/^zimbraMailForwardingAddress: //g'`; if [ "$fw" == "" ]; then echo > /dev/null; else echo -ne " ma $a zimbraMailForwardingAddress \"$fw\"\n";fi; done > 06_1_SET_FORWARDS2.zm
Restore
zmprov < 06_SET_FORWARDS1.zm
zmprov < 06_1_SET_FORWARDS2.zm
7) Filtros de correo
Aquí se debe crear un directorio para ir almacenando todos los archivos que contendrán los filtros para cada usuario.
mkdir filtros
cd filtros
for a in `zmprov -l gaa`; do zmprov -l ga $a zimbraMailSieveScript | grep -v "^\# name" | sed 's/zimbraMailSieveScript: //g' > $a.txt ; done
Restore
cd filtros
for a in `ls -1`; do mail=`echo $a | sed 's/.txt$//g'`; zmprov ma $mail zimbraMailSieveScript "`cat $a`"; done
8) Elementos compartidos
Aquí se debe crear un directorio para ir almacenando todos los archivos que contendrán los elementos compartidos para cada usuario.
mkdir shared
cd shared
for a in `zmprov -l gaa`; do zmprov -l ga $a zimbraSharedItem | grep -v "^\# name" | sed "s/zimbraSharedItem: /ma $a +zimbraSharedItem /g" > $a.txt ; done
Restore
cd shared
for a in `ls -1`; do for b in `cat $a`; do mail=`echo $a | sed 's/.txt$//'`; echo "ma $mail +zimbraSharedItem $b"; echo; done; done | grep granteeId > SET_SHARED.zm
zmprov < SET_SHARED.zm
9) Firmas
Firma de cada usuario.
mkdir signatures
cd signatures
for a in `zmprov -l gaa`; do zmprov -l ga $a zimbraPrefMailSignatureHTML | grep -v "^\# name" | sed 's/zimbraPrefMailSignatureHTML: //g' > $a.txt ; done
for a in `zmprov -l gaa`; do zmprov ga $a zimbraPrefMailSignatureStyle | grep -v ^# | sed -e "s/zimbraPrefMailSignatureStyle: / ma $a zimbraPrefMailSignatureStyle /g"; done > 01_SIGNATURE_STYLE.zm
for a in `zmprov -l gaa`; do zmprov ga $a zimbraSignatureName | grep -v ^# | sed -e "s/zimbraSignatureName: / ma $a zimbraSignatureName /g"; done > 02_SIGNATURE_NAME.zm
for a in `zmprov -l gaa`; do zmprov ga $a zimbraSignatureId | grep -v ^# | sed -e "s/zimbraSignatureId: / ma $a zimbraSignatureId /g"; done > 03_SIGNATURE_ID.zm
for a in `zmprov -l gaa`; do zmprov ga $a zimbraPrefDefaultSignatureId | grep -v ^# | sed -e "s/zimbraPrefDefaultSignatureId: / ma $a zimbraPrefDefaultSignatureId /g"; done > 04_DEF_SIGNATURE_ID.zm
for a in `zmprov -l gaa`; do zmprov ga $a zimbraPrefForwardReplySignatureId | grep -v ^# | sed -e "s/zimbraPrefForwardReplySignatureId: / ma $a zimbraPrefForwardReplySignatureId /g"; done > 05_DEF_FWD_SIGNATURE_ID.zm
Restore
cd signatures
for a in `ls -1`; do mail=`echo $a | sed 's/.txt$//g'`; zmprov ma $mail zimbraPrefMailSignatureHTML "`cat $a`"; done
zmprov < 01_SIGNATURE_STYLE.zm
zmprov < 02_SIGNATURE_NAME.zm
zmprov < 03_SIGNATURE_ID.zm
zmprov < 04_DEF_SIGNATURE_ID.zm
zmprov < 05_DEF_FWD_SIGNATURE_ID.zm
Otra forma (Mucho más rápida)
Servidor Zimbra origen
1) Guardamos un backup de LDAP
mkdir /data
chown zimbra.zimbra /data
su - zimbra -c "/opt/zimbra/libexec/zmslapcat /data/"
Esto generará 2 archivos /data/ldap.bak y /data/ldap.bak.XXXXXX. Sólo nos sirve ldap.bak
2) Utilizar el parser
#!/usr/bin/perl
use strict;
use Net::LDAP::LDIF;
use Data::Dumper;my $file=$ARGV[0];
my @attr=qw(cn sn givenName displayName telephoneNumber l zimbraNotes userPassword zimbraMailQuota co ou company physicalDeliveryOfficeName);my $ldif = Net::LDAP::LDIF->new($file, "r", onerror => 'undef');
while (not $ldif->eof()){
my $entry = $ldif->read_entry ();
if ($entry->{attrs}{objectclass}[0] eq 'organizationalPerson'){
print "ma $entry->{attrs}{mail}[0] ";
foreach (@attr){
my $atO = $_;
my $at = "\L$atO";
print "$atO \"".$entry->{attrs}{$at}[0]."\" ";
}
print "\n\n";
}
}
Uso:
./parser.pl ldap.bak > MODIFY.zm
Nota: En zimbra 8.5 el atributo zimbraNotes no existe como tal.
0 Comentarios