Migrando de Zimbra a Zimbra (atributos)

Daniel Eugenin M. -

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

Inicie sesión para dejar un comentario.
Tecnología de Zendesk