Zimbra наше всё

?v=1

Случилось тут как-то мне переносить это чудо с железной машины на виртуальную. Ситуация прям скажем удручающая — старый Debian с ядром 2 версии и Zimbra 6.0.4 Переезд планировался на CentOS 7 и ZImbra 8.8.

Скажу сразу, что для совершения данного мероприятия вы должны всецело любить BDSM, притом не лайтовый, а по хардкору с ударами ниже пояса. В противном случае у вас ничего не выйдет и все встанет на середине пути.

Итак давайте по порядку.
Первоначально нам нужно развернуть версию Zimbra идентичную старому серверу, В моём случае это была Zimbra 6.0.4 для CentOS 5, к сожалению это была самая передовая версия ОС для данной софтины на тот момент.

Качаем отсюда zimbra.

wget https://files2.zimbra.com/downloads/6.0.4_GA/zcs-6.0.4_GA_2038.RHEL5_64.20091214192925.tgz

И распаковываем:

tar -xvf https://files2.zimbra.com/downloads/6.0.4_GA/zcs-6.0.4_GA_2038.RHEL5_64.20091214192925.tgz

Прежде чем её ставить, настроим CentOS. В 5 версии отключим Selinux, Postfix/Sendmail (либо-либо) и настроим репы для yum.

vi /etc/sysconfig/selinux

Там выставим значение:

SELINUX=disabled

Останавливаем и выключаем сервисы, для того, чтобы в процессе инсталляции и апдейта они нам не мешали:

service iptables stop
chkconfig iptables off
service sendmail stop
chkconfig sendmail off
service postfix stop
chkconfig postfix off

Настраиваем репы для yum. В этом файле нужно # закоментировать строки начинающиеся с mirror:

vi /etc/yum.repos.d/CentOS-Base.repo

И отредактировать

'baseurl='

Вместо 5.11 ставим свою версию.

baseurl=http://vault.centos.org/5.11/os/$basearch/

Далее обновляем CentOS

yum update

После того как мы обновили ОС осталось сделать всего одну настройку, т.к. zimbra очень ревниво относится к DNS, это очень важная настройка и без неё процесс инсталляции просто не пойдёт.

vi /etc/hosts

В нём прописываем ваш ip и полное имя сервера имя сервера — IP FQNS NS

Все именно в таком порядке, иначе опять ошибка. В моём случае сервер назывался srvmail (а точнее его mx запись)

192.168.0.2 srvmail.domail.local srvmail

Далее можно приступать к установке, переходим в каталог с распакованной заранее зимброй и выполняем:

./install.sh --platform-override

Флаг

»--platform-override»

говорит инсталятору, что нужно установить в любом случае (переписать платформу принудительно).

Еще из полезных флагов есть

»-s»

этот флаг говорит инсталлятору, что мы хотим поставить только исполняемые пакеты, и не производить настройку.

Далее инсталлятор начнёт установку и если всё было сделано правильно, то ошибок не возникнет. По окончании установки проверяем статус сервиса zimbra:

zmcontrol status

Если все подсервисы в статусе

Running

то значит все ок, идем дальше.

Останавливаем нашу зимбру:

zmcontrol stop

После того как зимбра установлена нам необходимо перенести базы, а так же файл конфигурации со старого сервера зимбры на новый.
Нам нужны папки

db data index

находящиеся в 

/opt/zimbra

, а также файл

/opt/zimbra/conf/localconfig.xml

Данные папки на новом сервере можно удалять, либо делать backup.

Так как папки и файлы при переносе могли поменять хозяина (permissions), то нам необходимо поправить это дело:

chown -R zimbra.zimbra /opt/zimbra
/opt/zimbra/libexec/zmfixperms

Так же перед тестовым запуском обязательно необходимо проверить sql базу на ошибки, сделать это можно при помощи стандартной утилиты

mysqlcheck

либо при помощи встроеной зимбровской утилиты

zmdbintegrityreport

Запускаем mysql и запускаем скрипт:

/opt/zimbra/bin/mysql.server start
/opt/zimbra/libexec/zmdbintegrityreport
/opt/zimbra/libexec/zmdbintegrityreport -r

Первой строчкой проверяются ошибки, а второй проверяются и сразу же пытаются отремонтироватся.

Если ошибок не возникло, то хлопаем в ладоши и смотрим ниже, если ошибки:

mysql.general_log
Error: You can’t use locks with log tables.
mysql.slow_log
Error: You can’t use locks with log tables.


То необходимо сделать следующее:

cd /opt/zimbra/db/data/mysql
ls -al *log.frm
mv *log.frm /tmp/
/opt/zimbra/libexec/zmdbintegrityreport

Если последнее завершится без ошибок, то останавливаем mysql идем дальше.

/opt/zimbra/bin/mysql.server stop

Теперь нам необходимо поменять пароли на базу ldap. Запускаем ldap:

ldap start

В первом варианте с флагом «r» мы меняем пароль для пользователя root, а во второй строчке для пользователя zimbra и снова останавливаем ldap:

zmldappasswd -r newrootpass
zmldappasswd newpass
ldap stop

Если вы любите BDSM и окультизм, то следующий параграф читайте особо внимательно. Если нет смело пропускайте.

Для любителей BDSM
Теперь немного тротлинга)) Я понимаю что вы уже порядком устали и эта хня немного напрягаят, но позвольте вам кое что обьяснить. Когда мы перенесли базы (ldap и sql) мы так же перенесли и их доступы (юзеры и пароли), когда мы поставили новую зимбру она автоматически сгенерировала пароли к базам и хранятся они в файлике /opt/zimbra/conf/localconfig.xml. И если бы мы попытались просто перенести базы и сразу стартовать сервисы зимбры они бы послали нас на хер не запустились, так как пароли бы не совпали. В принципе можно пойти и другим путём не копируя файл настроек, но тогда вам придётся сравнивая настройки с старым сервером изменять из на новом. Для этого есть специальная команда zmlocalconfig.

Смотрим настройки например ldap:

zmlocalconfig -s | grep ldap

Применяем их на новом сервере:

zmlocalconfig -e  <название атрибута>=<новое значение>

Самое главное поменять пароли для всего ldap и mysql

C mysql всё намного геморней сложней, необходимо стартовать сервис с сброшеной таблицей привелегий и далее применять пароль равный конфигураций старой зимбры:

vi /opt/zimbra/bin/mysql.server

находим там строчку

(--ledir=${mysql_directory}/libexec < /dev/null > /dev/null 2>&1 &)

И меняем её на 

(--ledir=${mysql_directory}/libexec < /dev/null > /dev/null 2>&1 --skip-grant-tables &)

Проверяем запущен ли mysql, если да гасим его

/opt/zimbra/bin/mysql.server stop

Далее запускаем скуль по новой

mysql.server start

Далее заходим в mysql без пароля (mysql) и задаём пароли равные старой зимбре (!!! необходимо запускать на старой зимбре!!!)

zmlocalconfig -s | grep mysql_root_password 
zmlocalconfig -s | grep zimbra_mysql_password

mysql> UPDATE mysql.user SET Password=PASSWORD ('password') WHERE User='root'; ----> Root user.

mysql> UPDATE mysql.user SET Password=PASSWORD ('password') WHERE User='zimbra'; ----> Zimbra user.

записываем изменения и выходим

FLUSH PRIVILEGES;
exit;

Далее перезапускаем скуль путём остановки и запуска
mysql.server stop и mysql.server start

Проверяем исправность

mysql zimbra

если заходит бех ошибок, то радуемся.))

останавливаем mysql

/opt/zimbra/bin/mysql.server stop

Далее еще раз убеждаемся что сервисы

zimbra, mysql, ldap

не запушены:

ps -aux |grep slapd
ps -aux |grep sql
zmcontrol status

Если что то вдруг запушено, необходимо убить или остановить.

Ну вот и настал момент вашего первого запуска нового сервера. Сгибаем пальчики крестиком и не отпускаем до полного запуска, если под рукой бубен обязательно используйте его:

zmcontrol start

Тут 2 варианта развития событий:

При запуске ебошит ломается и загибается ldap
Проверьте ещё раз пароль zimbra и root. Либо при запуске ldap уже был запущенн и вы просто невнимательная скотина что-то пропустили.
При запуске ебошит ломается и загибается mysql, смотри пункт 1
Ну и вариант когда не стартует mailboxd
Значит нужно сгенерить новый сертификат:

Перед этим необходимо удалить старое хранилище ключей, иначе вас ожидает FAIL:

rm -rf /opt/zimbra/mailboxd/etc/keystone
cd /opt/zimbra/bin
./zmcertmgr createca -new
./zmcertmgr createcrt -new -days 1825
./zmcertmgr deploycrt self
./zmcertmgr deployca

Останавливаем и запускаем zimbra по новой:

zmcontrol stop
zmcontrol start

Если увидели СУКЕС, то прыгаем и радуемся (все сервисы должны быть в статусе Running).

Можно попробовать поломится в WEB, если не грузит не отчаивайтесь ЭТО НОРМАЛЬНО.

Данные траблы устраняются путем апгрейда НА ТУ ЖЕ САМУЮ ВЕРСИЮ!!!
Внимание сервисы Zimbra должны быть запущены при апгрейде, иначе FAIL!

Идем в папку с скачаной зимброй и вводим:

./install.sh --platform-override

Зимбра пару раз спросит хотим ли мы апдейт, говорим да и продолжаем. Настройки к системе кстати она заберёт из перемещенного нами localconfig.xml. Считайте это маленьким хаком))

После установки проверяем статус почтовика:

zmcontrol status

Если всё ок, то можно ломится на WEB и заходить под любым пользователем из старого сервера, пароли будут те же.

Далее невысовывая как по накатанной, качаем последнюю 7.х.х.х версию, распаковываем и опять:

./install.sh --platform-override

На этом этапе мы готовы грйдить нашу ОС на следующыю ступень.

Но прежде необходимо проверить нашу базу на корупты:

/opt/zimbra/libexec/zmdbintegrityreport

Если ошибок нет, то ок идем дальше, если ощибки mboxgroup

mboxgroup1.appointment
error: Table upgrade required. Please do «REPAIR TABLE `appointment`» or dump/reload to fix it!
mboxgroup1.data_source_item

error: Table upgrade required. Please do «REPAIR TABLE `data_source_item`» or dump/reload to fix it!
mboxgroup1.imap_folder
error: Table upgrade required. Please do «REPAIR TABLE `imap_folder`» or dump/reload to fix it!
mboxgroup1.mail_item
error: Table upgrade required. Please do «REPAIR TABLE `mail_item`» or dump/reload to fix it!
mboxgroup1.pop3_message

error: Table upgrade required. Please do «REPAIR TABLE `volume`» or dump/reload to fix it!

то необходимо обновить версию баз данных:

/opt/zimbra/libexec/scripts/migrate20100913-Mysql51.pl

В этот волнительный момент возьмите бубен в правую руку и молитесь…

После обновления снова проверяем базы и при необходимости фиксим их:

/opt/zimbra/libexec/zmdbintegrityreport
/opt/zimbra/libexec/zmdbintegrityreport -r


Если опять ошибка general и slow lock то смотрим выше как исправить.

Ну и последнее что необходимо сделать перед апгрейдом ОС это:

подгрузить переменные зимбры:

source /opt/zimbra/bin/zmshutil
zmsetvars


забэкапить MYSQL:

/opt/zimbra/mysql/bin/mysqldump --user=root --password=$mysql_root_password --socket=$mysql_socket --all-databases --single-transaction --master-data --flush-logs > {name dump}.sql


Если вернётся ошибка, то вариант ниже:

/opt/zimbra/mysql/bin/mysqldump --user=root --password=$mysql_root_password --socket=$mysql_socket --all-databases --single-transaction --flush-logs > {name dump}.sql

забэкапить ldap:

/opt/zimbra/libexec/zmslapcat
/opt/zimbra/libexec/zmslapcat -c
/opt/zimbra/libexec/zmslapcat -a


Далее снова переносим папки

db, data, index, localconfig.xml

, а так же бэкапы

sql и ldap

на стороннее файлохранилище, это может быть как физически воткнутый диск так и подмонтированное сетевое файлохранилище, в моём случае был scsi

Перенесли? Отключаем/отмонтируем бэкапы и херачим всё топором переустанавливаем ОС на последнюю версию CentOS6.

Дальше в принципе особо описывать нечего, т.к. все шаги повторяются, но есть некоторые ньюансы:

После того как на 6 Centos вы развернули zimbra 7.х.х.х, перенесли все необходимые папки обратно и снова заапгрейдились на ту же самую версию, следующая ступень будет 8.0.8, а не 8.0.0!!!

После обновления на 8.0.8 переезжаем на CentOS7 и грейдимся до ----> 8.5.1 ----> 8.6.0 далее изменяем настройки:

zmprov ms  zimbraReverseProxyMailEnabled TRUE zimbraReverseProxyHttpEnabled TRUE

И едем дальше --->8.7.9 ------> 8.8.9.

Вот такой вот вам ликбез)))…

© Habrahabr.ru