Hootan Alghaspour
Hootan Alghaspour
خواندن ۵ دقیقه·۳ سال پیش

جابجایی سرور زیمبرا

Migrating from Zimbra to Zimbra (ZCS to ZCS)

نیاز داشتیم زیمبرا موجود را عینا با همه چیز از روی سرور قدیمی به زیرساخت جدید منتقل کنیم.

براساس این راهنما عمل کردم و همه چیز (بجز بخش chat که برای ما حیاتی نبود) حتی پسورد کاربران عینا منتقل شد. فقط چند نکته :

۱- اکسپورت از روی سرور قدیمی ، zip و انتقال به سرور جدید و unzip و ایمپورت روی سرور جدید زمان زیادی بسته به میزان دیتاها نیاز دارد ، از زمانی که mailbox data کاربران را اکسپورت کرده اید ، درصورت آنلاین بودن سرور قدیمی ، ایمیل ها و اطلاعات جدید منتقل نخواهند شد، بنابراین حتما باید با کاربران برای قطعی چند ساعته زیمبرا هماهنگ کنید.

۲- حتما از tmux یا ترمینال مشابهی استفاده کنید که درصورت قطع شدن ارتباط اینترنت کنسول آن برقرار بماند.

۳- برای انتقال باید هر دو نسخه زیمبرا مشابه باشند، با این روش ما از روی Zimbra 8.8.15 نصب شده روی Centos8 به همین نسخه روی Ubuntu Server 20.04 انتقال دادیم و فقط اطلاعات chat نیامد که برای ما حیاتی نبودند.

۴- واقعیتش کاری که سالی ۲ سالی یکبار باید انجام بشه را نمی صرفه اسکریپت و ansible و ... کنم! همین جا لیست دستورات و منبع را یادداشت می کنم بعدا برای این نسخه این کار دوباره پیش آمد استفاده می کنم.

مراحل Export :

Step 0.
# mkdir -p /migration/zimbra
# chmod -R 777 /migration/zimbra
# chown -R zimbra:zimbra /migration/zimbra

Step 1. Export all domains

# su - zimbra
$ mkdir -p /migration/zimbra/domains
$ cd /migration/zimbra/domains
$ zmprov gad | tee -a domains.txt

Step 2. Export all accounts

$ mkdir -p /migration/zimbra/accounts
$ cd /migration/zimbra/accounts
$ zmprov gaaa | tee -a admins.txt
$ zmprov -l gaa | tee -a users.txt

Step 3. Export all account details

$ mkdir -p /migration/zimbra/account_details
$ cd /migration/zimbra/account_details
$ for user in `cat ../accounts/users.txt`; do zmprov ga $user | grep -i Name: | tee -a $user.txt ; done

Step 4. Export all account passwords

$ mkdir -p /migration/zimbra/passwords
$ cd /migration/zimbra/passwords
$ for user in `cat ../accounts/users.txt`; do zmprov -l ga $user userPassword | grep userPassword: | awk '{ print $2}' | tee -a $user.shadow; done

Step 5. Export all distribution lists

$ mkdir -p /migration/zimbra/distribution_lists
$ cd /migration/zimbra/distribution_lists
$ zmprov gadl | tee -a distribution_lists.txt
$ for list in `cat distribution_list.txt`; do zmprov gdlm $list > $list.txt ;echo "$list"; done

Step 6. Export all aliases

$ mkdir -p /migration/zimbra/aliases
$ cd /migration/zimbra/aliases
$ for user in `cat ../accounts/users.txt`; do zmprov ga $user | grep zimbraMailAlias | awk '{print $2}' | tee -a $user.txt ;echo $i ;done
$ find /migration/zimbra/aliases -type f -empty | xargs -n1 rm -v

Step 7. Exporting mailbox data

$ cd /migration/zimbra
$ mkdir mailbox_data
$ cd mailbox_data
$ for user in `cat ../accounts/users.txt`; do echo "Exporting mailbox $user" ; zmmailbox -z -m $user getRestURL '/?fmt=tgz' > ./$user.tgz ; done

خط بالا یک خط است، $ اول مربوط به کنسول و بقیه مربوط به متغییرها هستند

$ for user in `cat ../accounts/problematic_accounts.txt`; do echo "Exporting mailbox $user" ; zmmailbox -z -m $user getRestURL '/?fmt=tgz' > ./$user.tgz ; done

Step 8. Exporting email filters for all the accounts

$ mkdir /migration/zimbra/filters
$ cd /migration/zimbra/filters
$ vim export_filters.sh

اسکریپت ذیل را درون این فایل پیست کنید

#!/bin/bash mkdir tmp set -x clear for user in `cat ../accounts/users.txt`; do filter=`zmprov ga $user zimbraMailSieveScript > ./tmp/$user` sed -i -e &quot1d&quot ./tmp/$user sed 's/zimbraMailSieveScript: //g' ./tmp/$user > ./$user; rm ./tmp/$user echo &quotExport filter for $user&quot done \rm -rf tmp

$ chmod 777 export_filters.sh
$ ./export_filters.sh

# zip -r migration.zip migration
# scp migration.zip user@newserver:/migration.zip

مراحل Import :

Step 9. Restore all domains to the new server

# su zimbra
$ cd /migration/zimbra/domains
$ for domain in `cat domains.txt `; do zmprov cd $domain zimbraAuthMech zimbra ;echo $domain ;done

Step 10. Restore all accounts and passwords

$ mkdir -p /migration/zimbra/scripts
$ cd /migration/zimbra/scripts
$ vim restore_accounts.sh

#!/bin/bash PASSWDS=&quot../passwords&quot ACCOUNT_DETAILS=&quot../account_details&quot USERS=&quot../accounts/users.txt&quot for i in `cat $USERS` do givenName=$(grep givenName: $ACCOUNT_DETAILS/$i.txt | cut -d &quot:&quot -f2) displayName=$(grep displayName: $ACCOUNT_DETAILS/$i.txt | cut -d &quot:&quot -f2) shadowpass=$(cat $PASSWDS/$i.shadow) zmprov ca $i &quotTeMpPa55^()&quot cn &quot$givenName&quot displayName &quot$displayName&quot givenName &quot$givenName&quot zmprov ma $i userPassword &quot$shadowpass&quot done

$ chmod 777 restore_accounts.sh
$ ./restore_accounts.sh

Step 11. Restore distribution lists

$ cd /migration/zimbra
$ for lists in `cat distribution_lists/distribution_lists.txt`; do zmprov cdl $lists ; echo "$lists -- done " ; done
$ cd migration/zimbra/distribution_lists
$ vim restore_dist_lists.sh.

#!/bin/bash for list in `cat distribution_lists.txt` do for mbmr in `grep -v '#' ./$list.txt | grep '@'` do zmprov adlm $list $mbmr echo &quot $mbmr has been added to $list&quot done done

$ chmod 777 restore_dist_lists.sh
$ ./restore_dist_lists.sh

Step 12. Restore all aliases

$ cd /migration/zimbra/aliases
$ vim restore_aliases.sh

#!/bin/bash echo &quotProcessing User accounts&quot for user in `cat ../accounts/users.txt` do echo $user if [ -f &quot./$user.txt&quot ]; then for alias in `grep '@' ./$user.txt` do zmprov aaa $user $alias echo &quot$user ALIAS $alias - Restored&quot done fi done echo &quotProcessing Admin accounts&quot for user in `cat ../accounts/admins.txt` do echo $user if [ -f &quot./$user.txt&quot ]; then for alias in `grep '@' ./$user.txt` do zmprov aaa $user $alias echo &quot$user ALIAS $alias - Restored&quot done fi done

$ chmod 777 restore_aliases.sh
$ ./restore_aliases.sh

Step 13. Importing mailboxes

$ cd /migration/zimbra/mailbox_data
$ for mailbox in `cat ../accounts/users.txt`; do zmmailbox -z -m $mailbox postRestURL "/?fmt=tgz&resolve=skip" ./$mailbox.tgz ; echo "$mailbox - done "; done

Step 14. Importing mail filters

$ cd /migration/zimbra/filters
$ vim import_filters.sh

for file in /migration/zimbra/filters/*

do StrFilter=`cat &quot$file&quot` Acc=`echo $file | cut -d &quot/&quot -f5` su - zimbra -c &quotzmprov ma $Acc zimbraMailSieveScript '$StrFilter'&quot echo &quotProcess filter $Acc&quot done echo &quotAll filters have been imported successfully&quot

$ chmod 777 import_filters.sh
$ ./import_filters.sh

Step 15.

$ zmcontrol restart
$zmcontrol status

زیمبراzimbralinuxلینوکس
هوتن القاس پور
شاید از این پست‌ها خوشتان بیاید