Pull to refresh

Zimbra наше всё

Reading time7 min
Views10K
Случилось тут как-то мне переносить это чудо с железной машины на виртуальную. Ситуация прям скажем удручающая — старый 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</code> на стороннее файлохранилище, это может быть как физически воткнутый диск так и подмонтированное сетевое файлохранилище, в моём случае был scsi

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

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

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

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

zmprov ms <zimbraserverhostname> zimbraReverseProxyMailEnabled TRUE zimbraReverseProxyHttpEnabled TRUE

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

Вот такой вот вам ликбез.
Tags:
Hubs:
Total votes 17: ↑16 and ↓1+15
Comments17

Articles