Migrando entre Servidores Zimbra

O Zimbra é um servidor de colaboração completo, o “lindo” nome é porque ele foi criado pela empresa Zimbra e depois comprado pelo Yahoo e finalmente pela VMware mas como o nome já estava consolidado ficou :-P. Ele é um concorrente direto do Exchange da Microsoft e como ele tem: Email, agenda colaborativa, interface de administração completa, Porta Arquivos e gerenciamento de recursos, possui cliente integrado de Email (Exchange tem o Outlook ele tem o Zimbra Desktop), etc…

Pode ser comprado com Licença de suporte e uso, pode também ser utilizado em sua versão Open Source que conta com todas as funcionalidades principais. Possui muita documentação (wiki.zimbra.com) e integra com LDAP, Active Directory, etc.

Mas eu vou falar hoje sobre migração entre servidores Zimbra, já trabalho com ele há alguns anos e em alguns clientes chegou a hora de atualizar a versão. É uma tarefa simples, dá um pouco de trabalho mas é simples, basta ter um servidor novo instalado e funcionando(basta seguir alguns dos muitos tutoriais que existem por aí para isso 🙂 ) e fazer a migração.

Já migrei de Zimbra 5.0.9 para 7, de 6 para 8 e de 7 para 8. Esse procedimento funcionou em todas as migrações que fiz para a versão 8 do Zimbra, que é a mais nova e muito mais rápida. Portanto faça em uma ambiente de teste, confira se há igualdade nas contas dos servidores e depois pode fazer a migração. Lembre-se que não é atualizar o software, é migrar para outro servidor com versão mais nova do software.

Esse procedimento não altera nada no servidor de produção, ou seja, pode fazer que continua tudo funcionando.

Vamos à migração.

Com os dois servidores na mesma rede, vamos de 192.168.1.250 produção e 192.168.1.251 migração, vamos começar o processo.

Primeiro sincronizamos as contas, podem ser todas ou apenas algumas, no caso faremos com todas. No servidor de migração faremos o serviços através de linha de comando, mas não se preocupe farei um pequeno tutorial sobra a função na interface de administração posteriormente :-).

Se você tem 10 ou 20 usuários crie de novo e deixe de preguiça :-P, mas se tem 200, 400, 1500, 2500… Faça com scripts que é muito melhor 🙂

Primeiro vamos obter uma lista das contas e dados básicos dos usuários com o seguinte procedimento:

Logue no servidor de produção como root e mude para usuário zimbra:
# su – zimbra

Entre no diretório /tmp e crie um diretório contas:
$ cd /tmp
$ mkdir contas

Crie o seguinte script no /tmp que irá obter os dados(nome completo(displayName, primeiro nome(givenName), sobrenome(sn),senha(userPassword) dos usuários e gravá-los nos diretório contas:

vi obtem-contas-zimbra.sh
#!/bin/bash
# Obtemos uma lista de todas as contas do servidor
ZMPROV="/opt/zimbra/bin/zmprov"
for MAIL in $($ZMPROV -l gaa | sort); 	do
		DNOME=$($ZMPROV -l ga $MAIL displayName | grep displayName | awk -F " " '{print $2" "$3" "$4" "$5}')
		PNOME=$($ZMPROV -l ga $MAIL givenName | grep givenName | awk -F " " '{print $2}')
		SNOME=$($ZMPROV -l ga $MAIL sn | grep sn | awk -F " " '{print $2}')
		SENHA=$($ZMPROV -l ga $MAIL userPassword | grep userPassword | awk -F " " '{print $2}')
 
   		echo "Conta: $MAIL" > contas/dados-$MAIL
   		echo "Display: $DNOME" >> contas/dados-$MAIL
		echo "Nome: $PNOME" >> contas/dados-$MAIL
		echo "Sobrenome: $SNOME" >> contas/dados-$MAIL
		echo "Senha: $SENHA" >> contas/dados-$MAIL
done

Esse script irá criar um arquivo no diretório contas com o nome dados-EMAIL_DA_PESSOA com os dados necessários.

Execute o script da seguinte forma:

$ chmod 755 obtem-contas-zimbra.sh
$ ./obtem-contas-zimbra.sh

Agora basta copiar esse diretório para o servidor de migração(ftp, ssh, rsync, pendrive, cd-rom … use seu recurso preferido).

No servidor de migração logue como root, mude para o usuário zimbra e copie o diretório contas para o /tmp :

# su – zimbra
$ cd /tmp

Agora crie o seguinte script para criar os usuários:

vi cria-contas.sh
 
#!/bin/bash
# Cria as contas no Zimbra
ZMPROV="/opt/zimbra/bin/zmprov"
for DADOS in $(ls contas); do
 
	EMAIL=$(grep Conta contas/$DADOS | awk -F " " '{print $2}')
	DNAME=$(grep Display contas/$DADOS | awk -F " " '{print $2" "$3" "$4" "$5}')
	PNAME=$(grep Nome contas/$DADOS | awk -F " " '{print $2}')
	SNAME=$(grep Sobrenome contas/$DADOS | awk -F " " '{print $2}')
	SENHA=$(grep Senha contas/$DADOS | awk -F " " '{print $2}')
 
	$ZMPROV ca "$EMAIL" "$SENHA" displayName "$DNAME" givenName "$PNAME" sn "$SNAME"
	done

Esse script lê todos os arquivos do diretório contas, transforma os dados que obtivemos no servidor de produção e cria as contas, caso algum dados não exista(displayName, givenName, sn) ele cria com valor padrão do nome da conta. Não podem estar vazios EMAIL e SENHA.

Execute o script da seguinte forma:

$ chmod 755 cria-contas.sh
$ ./cria-contas.sh

Pronto, com os usuários criados vamos aos emails, se pudermos parar o servidor de produção podemos criar exportar as mensagens conta a conta e depois importar no servidor de migração, mas se não pudermos temos um script de sincronia chamado imapsync, que pode nos ajudar.

Vou colocar aqui os dois métodos utilizados para que vocês possam escolher.

O primeiro método iremos parar o recebimento de email, pode ser desligando o acesso externo, pode ser bloqueando as portas de leitura/recebimento, bem você é quem sabe. Vamos ao procedimento:

No servidor de produção, faça o seguinte:

# su – zimbra
$ cd /tmp
$ mkdir mensagens

Agora vamos usar o seguinte script para importar as caixas:

vi obtem-mensagens.sh
#!/bin/bash
# Obtemos uma lista de todas as contas do servidor
ZMPROV="/opt/zimbra/bin/zmprov"
ZMMAILBOX="/opt/zimbra/bin/zmmailbox"
for MAIL in $($ZMPROV -l gaa | sort); 	do
		$ZMMAILBOX -z -m $MAIL getRestURL "//?fmt=tgz" > mensagens/$MAIL.tgz
done

Execute o script da seguinte forma:

$ chmod 755 obtem-mensagens.sh
$ ./obtem-mensagens.sh

Com esse script criamos um arquivos chamado, [email protected] dentro do diretório mensagens, agora basta compartilhar esse diretório(copiar pode ser inviável se for muito grande, eu lidei com diretórios com mais de 200GB e sei disso 🙂 ), pode compartilhar via NFS, SMB, CIFS, GlusterFS, o que você desejar, desde que compartilhe com o servidor de migração.

No servidor de migração entre no diretório onde as mensagens foram compartilhadas e faça o seguinte como usuário zimbra(ele tem que ter direito de leitura/escrita no diretório para criar o script e para ler os arquivos. Ex: /mnt/mensagens

# su – zimbra
$ cd /mnt/

Crie o seguinte script:

vi importa-mensagens.sh
 
#!/bin/bash
# Obtemos uma lista de todas as contas do servidor
ZMPROV="/opt/zimbra/bin/zmprov"
ZMMAILBOX="/opt/zimbra/bin/zmmailbox"
for MAIL in $($ZMPROV -l gaa | sort); 	do
                $ZMMAILBOX -z -m $MAIL postRestURL "//?fmt=tgz&resolve=reset" mensagens/$MAIL.tgz 
done

Execute o script da seguinte forma:

$ chmod 755 importa-mensagens.sh
$ ./importa-mensagens.sh

Pronto, todas as mensagens estão importadas, agora basta conferir e habilitar o servidor novo para receber e enviar as mensagens.

Mas se você não pode parar o servidor para exportar/importar as mensagens pode usar o script imasync para fazer a sincronia com os servidores online.

Utilizei a versão 1.3.15, as anteriores deram erro.

Já estando com as contas criadas lembre de liberar o login em texto plano (para a migração apenas), crie no servidor de migração o seguinte script:

vi migra-mensagens.sh
#!/bin/bash
ZMPROV="/opt/zimbra/bin/zmprov"
for USER in $($ZMPROV -l gaa); do
 
imapsync --nosyncacls --host1 192.168.1.250 --host2 192.168.1.251 --authmech1 PLAIN --authmech2 PLAIN --ssl1 --user1 $USER --authuser1 [email protected] --password1 'senha_do_admin_zimbra_producao' --ssl2 --user2 $USER --authuser2 [email protected] --password2 'senha_do_admin_zimbra_migracao'
 
done

Agora execute:

$ chmod 755 migra-mensagens.sh
$ ./migra-mensagens.sh

Pronto, contas e mensagens criadas. Se o servidor não for entrar em produção no dia, basta repetir o script que ele atualiza as mensagens que ainda não estão no servidor de migração.

Espero ter ajudado na migração de servidores e não se esqueça de comentar e de curtir nossa página no Facebook.