Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


пятница, 17 января 2014 г.

Zimbra: перенос на другой сервер. Часть 2014-1

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

Начнем с того, что установить 6.0.15 поверх скопированной с боевого сервера просто не удалось. Как ни бился, но сделать ничего не мог - то вдруг ldap терял данные, несмотря на правильный перенос (через zmslapcat), то zimbramon/64 вдруг начинал обращаться к старой библиотеке, которая еще /486, то еще что-то непонятное вылезало.

В общем, плюнул я на всё и решил ставить с нуля 8.0.6/64 на 12.04. Скоро, правда, появится 14.04, но это уже не так страшно.

По ходу дела выяснилось, что набор зимлетов, активированных в админке по умолчанию несколько отличается от того, что был в 8.0.0. Например, зимлета миграции учетных записей там не оказалось. Однако, сами зимлеты в виде zip-архивов лежали в нужном каталоге в /opt/zimbra.
Лихо жму в админке "инсталляция..." и понимаю, что мне предлагают из браузера выбрать файл на моей рабочей станции, а не из упомянутого каталога. Пришлось скопировать zip-ы к себе и ставить уже отсюда. Вроде поставились, я даже увидел знакомые буквы... Зимлет "просмотр почты" во времена 8.0.0/8.0.1 вызвал неслабое бурление говн на форумах, но в конце концов его официально включили в FOSS-версию, что не может не радовать.

Учетные записи этот мастер переноса создал, молодец. Но почту не перенес. Зато вроде без ошибок указал почтовый сервер каждого пользователя, не пришлось править поломатые.

Сейчас стоят две задачи: перенос сообщений и индивидуальных настроек, а также дополнительных объектов LDAP - списков рассылки и т.п.

Под катом размышления по этому поводу.

Сообщения я попробовал переносить с помощью zmztozmig, но она не перенесла почту во вложенных папках, хотя и перенесла метки и поисковые папки. Буду разбираться, как же скопом перенести вложенное.

По переносу списков рассылки нашел здесь скрипт. Скрипт хороший, но не без недостатков. На выходе получаем несколько неисполняемых скриптов с именами, совпадающими с FQDN имеющихся списков.

myPath=$(pwd)
/opt/zimbra/bin/zmprov gadl | while read listname;
do
   echo "/opt/zimbra/bin/zmprov cdl $listname" > $myPath/$listname
   /opt/zimbra/bin/zmprov gdl $listname | grep zimbraMailForwardingAddress >  $myPath/$listname.tmp
   cat $myPath/$listname.tmp | sed 's/zimbraMailForwardingAddress: //g' |
   while read member; do
     echo "/opt/zimbra/bin/zmprov adlm $listname $member" >> $myPath/$listname
   done
   /bin/rm $myPath/$listname.tmp
done

Как видно, переносятся только емайлы участников, но не более. Описание, displayname и т.п. пропадают. Пришлось его дорабатывать, чтобы он добавлял в выходные скрипты нужные мне данные. Да, мне проще повозюкаться со скриптом, который всё сделает за несколько секунд, чем потом вручную дописывать все эти данные через админку или выходные скрипты.

Вот как выглядит моя версия. Комментарии ставил для себя. Версия тоже не очень оптимальная, но нужна на 1 раз, поэтому вылизывать сильно не стал.

#!/bin/bash
myPath=$(pwd)
/opt/zimbra/bin/zmprov gadl | while read listname;
do
# создаем новый список рассылки
    echo "/opt/zimbra/bin/zmprov cdl $listname" > $myPath/$listname

# оставляем только данные во временном файле, чтобы не вызывать много раз довольно медленную zmprov
    /opt/zimbra/bin/zmprov gdl $listname >  $myPath/$listname.tmp.preproc

# формируем для него поля cn, displayName, описание
# состояние - разрешен ли прием почты (zimbraMailStatus:) и виден ли список в GAL (zimbraHideInGal:).
# Не очень эффективно из-за странной работы read при передаче данных из echo (abs-book.html#BADREAD0  пример 31-1 в конце)
# но работает и ладно

# поскольку zmprov позволяет менять несколько атрибутов за раз, то дописывать в выходной файл будем не полные команды, а только
# дополнительные атрибуты

# вот здесь создаем строку в выходном файле
   grep cn: $myPath/$listname.tmp.preproc| sed 's/cn: //g'>$myPath/myvar.tmp
   read <$myPath/myvar.tmp
   echo -n /opt/zimbra/bin/zmprov mdl $listname cn '"'$REPLY'"'>> $myPath/$listname

# а вот здесь её уже используем - дописываем
   grep displayName: $myPath/$listname.tmp.preproc| sed 's/displayName: //g'>$myPath/myvar.tmp
   read <$myPath/myvar.tmp
   echo -n " displayName" '"'$REPLY'"'>> $myPath/$listname

   grep description: $myPath/$listname.tmp.preproc| sed 's/description: //g'>$myPath/myvar.tmp
   read <$myPath/myvar.tmp
   echo -n " description" '"'$REPLY'"'>> $myPath/$listname

   grep zimbraMailStatus: $myPath/$listname.tmp.preproc| sed 's/zimbraMailStatus: //g'>$myPath/myvar.tmp
   read <$myPath/myvar.tmp
   echo -n " zimbraMailStatus" '"'$REPLY'"'>> $myPath/$listname

   grep zimbraHideInGal: $myPath/$listname.tmp.preproc| sed 's/zimbraHideInGal: //g'>$myPath/myvar.tmp
   read <$myPath/myvar.tmp
   echo -n " zimbraHideInGal" '"'$REPLY'"'>> $myPath/$listname

# чтобы по запарке следующая команда не записалась в ту же строку, делаем принудительный перевод строки

    echo >>$myPath/$listname

# Эта часть осталась почти неизменной из оригинального скрипта
    grep zimbraMailForwardingAddress $myPath/$listname.tmp.preproc| sed 's/zimbraMailForwardingAddress: //g' |
        while read member; do
            echo "/opt/zimbra/bin/zmprov adlm $listname $member" >> $myPath/$listname
        done
   /bin/rm $myPath/$listname.tmp.preproc $myPath/myvar.tmp
done

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

Я слил, chmod +x, дописал в начало sha-bang и запустил, наблюдая его результаты в админке: создался список, к нему добавилось описание и т.д.

Комментариев нет:

Отправить комментарий

Пожалуйста, воздержитесь от грубостей и персональных нападок.
Я не против матерщины, но она должна быть уместной и использоваться для выражения эмоций, а не в качестве основного средства выражения мыслей.