Migrer un serveur Zimbra de CentOS vers Ubuntu

Zimbra logo

J'avais un serveur Zimbra Collaboration Open Source sur une distribution CentOS 6 vieillissante que je souhaitais migrer depuis un moment vers CentOS 7.

Mais vu que CentOS ne sera plus maintenu à la fin 2021, j'ai décidé de voir à migrer vers une autre distribution GNU/Linux.

Comme le choix est plutôt restreint je me suis tourné vers Ubuntu Server. Et vu que la version 20.04 LTS est depuis peu officiellement supportée par Zimbra Collaboration Open Source Edition c'est sur cette dernière que j'ai finalement migré.

Configuration

⚠️ Pour que la migration fonctionne, il faut (un peu de chance) que la version des Zimbra soient identiques sur les deux serveurs.⚠️

  • Serveur Source :
    • OS : CentOS 6.10
    • Zimbra : Zimbra 8.8.15_GA_3869
  • Serveur de Destination :
    • OS : Ubuntu 20.04.3 LTS
    • Zimbra : Zimbra 8.8.15.BETA.4155

Serveur source (CentOS)

CentOS Logo

Depuis l'ancien serveur nous allons arréter le service zimbra et copier l'intégralité du dossier /opt/zimbra sur le nouveau.

Après cela nous pourrons arréter définitivement ce serveur.

Copier les fichiers vers le nouveau serveur

  • (Optionel) Supprimer les fichiers zmstat présents dans /opt/zimbra/zmstat (inutiles dans mon cas) pour améliorer la vitesse de copie :
zimbra@zcs:~$ /opt/zimbra/libexec/zmstat-cleanup --keep 30
  • Arréter les services zimbra :
root@host:~# su - zimbra
zimbra@zcs:~$ zmcontrol stop
  • Copier le dossier zimbra vers notre serveur de destination :
root@host:~# rsync -e ssh -axvzKHS /opt/zimbra [newserver-IP-address]:/opt/ZIMBRA_TMP
Note : comme nous ne pouvons pas utiliser rsync directement avec l'utlisateur root vers Ubuntu (voir ici), il sera plus simple de lancer la commande rsync depuis le nouveau serveur.

Exporter les bases de données LDAP

  • Exporter la base de données principale :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapcat /tmp/LDAP
  • Exporter la base de données de configuration :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapcat -c /tmp/LDAP
  • Exporter la base de données accesslog (qui était vide dans mon cas) :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapcat -a /tmp/LDAP
  • Copier les bases de données vers le nouveau serveur :
root@host:~# rsync -e ssh -axvzKHS /tmp/LDAP [newserver-IP-address]:/opt/

Récupérer les mots de passes

Cela ne sera finalement pas utile mais on peut récupérer les anciens mots de passes.

  • Depuis le fichier /opt/zimbra/conf/localconfig.xml, exemple ici avec le mot de passe zimbra_ldap_password :
 <key name="zimbra_ldap_password">
    <value>TXrP9mSTd</value>
  </key>
  • Ou bien avec la commande zmlocalconfig :
zimbra@zcs:~$ zmlocalconfig -s | grep "ldap_amavis_password\|ldap_nginx_password\|ldap_postfix_password\|ldap_replication_password\|ldap_root_password\|zimbra_ldap_password"

Éteindre le serveur

  • On récupère le nom du serveur :
root@host:~# hostname
zcs.shebangthedolphins.net
  • Et on éteint le serveur :
root@host:~# poweroff

Serveur de destination (Ubuntu)

Ubuntu Logo

Nous supposons ici qu'un Ubuntu en version serveur à été fraichement installée.

Pour se connecter en tant que root j'ai utilisé la commande sudo su -

Configuration réseau

  • Éditer le fichier /etc/netplan/00-installer-config.yaml et paramétrer l'addresse ip pour qu'elle soit la même que sur l'ancien serveur :
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      addresses:
              - 192.168.1.10/24
      gateway4: 192.168.1.254
      nameservers:
              search: [shebangthedolphins.net]
              addresses: [192.168.1.254]
  version: 2
  • Redémarrer ou utiliser la commande netplan pour appliquer les modifications :
root@host:~# netplan apply
  • Paramétrer le même nom d'hôte que l'ancien serveur :
root@host:~# hostnamectl set-hostname zcs.shebangthedolphins.net

Configurer /etc/hosts

127.0.0.1 localhost
192.168.1.10 zcs.shebangthedolphins.net shebangthedolphins.net

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback localhost
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Configurer systemd-resolved

  • Dans sa configuration par défaut le service systemd-resolved utilise le port udp 53 ce qui provoque un conflit avec le service zimbra interne unbound, nous devons donc modifier le fichier /etc/systemd/resolved.conf pour le désactiver :
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no-negative
DNSStubListener=no
#ReadEtcHosts=yes
  • Arréter le service systemd-resolved et supprimer le fichier /etc/resolv.conf :
root@host:~# systemctl stop systemd-resolved
  • Supprimer le fichier auto-généré /etc/resolv.conf :
root@host:~# rm /etc/resolv.conf
  • Redémarrer le serveur :
root@host:~# reboot
  • Créer un nouveau fichier /etc/resolv.conf :
root@host:~# echo "nameserver 192.168.1.254
search shebangthedolphins.net" > /etc/resolv.conf
  • Et vérifier que la résolution de nom fonctionne :
root@host:~# resolvectl query shebangthedolphins.net
shebangthedolphins.net: 192.168.1.10

-- Information acquired via protocol DNS in 2.4ms.
-- Data is authenticated: yes

Installer Zimbra

  • Télécharger et installer zimbra (-s : pour installer uniquement les logiciels) :
root@host:~# tar xzvf zcs-8.8.15_BETA_4155.UBUNTU20_64.20210924020007.tgz
root@host:~# cd zcs-8.8.15_BETA_4155.UBUNTU20_64.20210924020007 && ./install.sh -s
[…]
----------------------------------------------------------------------
PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THE SOFTWARE.
SYNACOR, INC. ("SYNACOR") WILL ONLY LICENSE THIS SOFTWARE TO YOU IF YOU
FIRST ACCEPT THE TERMS OF THIS AGREEMENT. BY DOWNLOADING OR INSTALLING
THE SOFTWARE, OR USING THE PRODUCT, YOU ARE CONSENTING TO BE BOUND BY
THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS
AGREEMENT, THEN DO NOT DOWNLOAD, INSTALL OR USE THE PRODUCT.

License Terms for this Zimbra Collaboration Suite Software:
https://www.zimbra.com/license/zimbra-public-eula-2-6.html
----------------------------------------------------------------------


Do you agree with the terms of the software license agreement? [N] Y



Use Zimbra's package repository [Y] Y
  • Choisir les mêmes modules que sur l'ancien serveur, pour moi cela ressemblait à ça :
Select the packages to install

Install zimbra-ldap [Y] 

Install zimbra-logger [Y] 

Install zimbra-mta [Y] 

Install zimbra-dnscache [Y] N

Install zimbra-snmp [Y] N

Install zimbra-store [Y] 

Install zimbra-apache [Y] N

Install zimbra-spell [Y] 

Install zimbra-memcached [Y] 

Install zimbra-proxy [Y] 

Install zimbra-drive [Y] N

Install zimbra-imapd (BETA - for evaluation only) [N] 

Install zimbra-chat [Y] N
Checking required space for zimbra-core
Checking space for zimbra-store
Checking required packages for zimbra-store
zimbra-store package check complete.

Installing:
    zimbra-core
    zimbra-ldap
    zimbra-logger
    zimbra-mta
    zimbra-store
    zimbra-apache
    zimbra-spell
    zimbra-memcached
    zimbra-proxy
    zimbra-patch
    zimbra-mta-patch
    zimbra-proxy-patch

The system will be modified.  Continue? [N] Y
  • Une fois l'installation termiéne, supprimer le dossier zimbra :
root@host:~# rm -rf /opt/zimbra/
  • Déplacer notre dossier sauvegardé vers /opt/zimbra :
root@host:~# mv /opt/ZIMBRA_TMP/zimbra /opt/

Importer les bases LDAP

Préparer l'import

  • Nettoyer le dossier des bases :
root@host:~# cd /opt/zimbra/data/ldap; mv mdb /tmp/mdb.old
  • Créer un nouveau dossier mdb :
root@host:~# mkdir -p mdb/db
  • Nettoyer le dossier des bases de config :
root@host:~# cd /opt/zimbra/data/ldap; mv config /tmp/config.old
  • Créer un nouveau dossier config :
root@host:~# mkdir config
  • Si un dossier accesslog est présent (ce qui n'était pas mon cas), faire de même pour la base accesslog :
root@host:~# cd /opt/zimbra/data/ldap; mv accesslog /tmp/accesslog.old
root@host:~# mkdir -p accesslog/db
  • Enfin, mettre à jour les permissions :
root@host:~# /opt/zimbra/libexec/zmfixperms -e -v

Importer les données LDAP

  • Changer le propriétaire pour que l'utilisateur zimbra puisse accéder aux fichiers :
root@host:~# chown -R zimbra:zimbra /opt/LDAP
  • Se connecter en tant qu'utilisateur zimbra :
root@host:~# su - zimbra
  • Importer la config :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapadd -c /opt/LDAP/ldap-config.bak
  • Importer la base principale :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapadd /opt/LDAP/ldap.bak
  • (Si présente) Importer la base accesslog :
zimbra@zcs:~$ /opt/zimbra/libexec/zmslapadd -a /opt/LDAP/ldap-accesslog.bak

Mettre à niveau zimbra

  • Si le fichier zimbra-stats.log n'est pas présent le créer :
root@host:~# touch /var/log/zimbra-stats.log
root@host:~# chown zimbra:zimbra /var/log/zimbra-stats.log
  • Ajouter les règles sudoers dans /etc/sudoers :
root@host:~# echo "%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmstat-fd *
%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmslapd
%zimbra ALL=NOPASSWD:/opt/zimbra/postfix/sbin/postfix, /opt/zimbra/postfix/sbin/postalias, /opt/zimbra/postfix/sbin/qshape.pl, /opt/zimbra/postfix/sbin/postconf,/opt/zimbra/postfix/sbin/postsuper
%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmqstat,/opt/zimbra/libexec/zmmtastatus
%zimbra ALL=NOPASSWD:/opt/zimbra/amavisd/sbin/amavis-mc
%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmunbound
%zimbra ALL=NOPASSWD:/sbin/resolvconf *
%zimbra ALL=NOPASSWD:/opt/zimbra/libexec/zmmailboxdmgr
%zimbra ALL=NOPASSWD:/opt/zimbra/bin/zmcertmgr
%zimbra ALL=NOPASSWD:/opt/zimbra/bin/zmmailboxdctl
%zimbra ALL=NOPASSWD:/opt/zimbra/bin/zmmailbox
%zimbra ALL=NOPASSWD:/opt/zimbra/bin/zmdnscachectl" >> /etc/sudoers
  • Relancer de nouveau l'installation :
root@host:~# ./install.sh -s
[…]
The Zimbra Collaboration Server appears to already be installed.
It can be upgraded with no effect on existing accounts,
or the current installation can be completely removed prior
to installation for a clean install.

Do you wish to upgrade? [Y]
[…]
The system will be modified.  Continue? [N] Y
  • Se connecter en tant qu'utilisateur zimbra :
root@host:~# su - zimbra
  • Démarrer les services zimbra :
zimbra@zcs:~$ zmcontrol start

Et c'est à peu près tout…

Tom Cruse, dans des hommes d'honneur faisant un salut militaire

Références

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :