Zimbra наше всё
Случилось тут как-то мне переносить это чудо с железной машины на виртуальную. Ситуация прям скажем удручающая — старый 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 и окультизм, то следующий параграф читайте особо внимательно. Если нет смело пропускайте.
Смотрим настройки например 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_itemerror: 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.
Вот такой вот вам ликбез)))…