Bạn có thể tham khảo các hướng dẫn gốc tại đây và tại đây.
Hướng dẫn này dành cho hệ thống có 1 server cũ và 1 server mới. Trong trường hợp bạn dùng mô hình nhiều server, bạn cần chú ý phần imapsync để migrate các mailbox phù hợp đến từng mailbox server mới là được.
A. Trích xuất thông tin cấu hình trên hệ thống Zimbra cũ.
1. Chuẩn bị thư mục để lưu các thông tin trên hệ thống cũ và hệ thống mới. Trên server cũ, tạo thư mục, với quyền root
mkdir /migration
chown zimbra:zimbra /migration
su - zimbra
cd /migration
2. Trích xuất thông tin các domain trên hệ thống cũ, xóa bỏ các domain bạn không muốn migrate.
zmprov gad > domains.txt
- Mở file domains.txt và xóa các domain bạn không muốn migrate.
3. Trích xuất các account trên hệ thống cũ.
zmprov -l gaa > accounts.txt
- Mở file accounts.txt và xóa các account thuộc spam, ham, virus,galsync.
4. Trích xuất thông tin các distribution list trên hệ thống cũ.
zmprov gadl > dlist.txt
5. Trích xuất thông tin thành viên (member) của mỗi distribution list và lưu vào các file với tên distribution list.
mkdir dl
for i in `cat dlist.txt`; do zmprov gdl $i | grep zimbraMailForward | awk '{print $2}' > dl/$i.txt; echo "$i"; done
6. Trích xuất mật khẩu (hash) của các user trong file accounts.txt
mkdir userpass
for i in `cat accounts.txt`; do zmprov -l ga $i userPassword | grep userPassword: | awk '{print $2}' > userpass/$i.shadow; done
7. Trích xuất tất cả user names , Display names and Given Names.
Lưu ý: nếu display name hay given name được viết bằng tiếng Việt, bạn cần đảm bảo thiết lập locale dùng UTF-8 cho đúng. Bạn dùng quyền root để thiết lập, đồng thời đưa 2 lệnh này vào trong script dưới quyền zimbra.
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
mkdir userdata
for i in `cat accounts.txt`; do zmprov ga $i | grep -i Name: > userdata/$i.txt ; done
8. Trích xuất thông tin alias
mkdir alias
for i in `cat accounts.txt`; do zmprov ga $i | grep zimbraMailAlias | awk '{print $2}' > alias/$i.txt; echo $i; done
- Loại bỏ các file rỗng ứng với các account không có alias.
find alias/ -type f -empty | xargs -n1 rm -v
9. Tùy chọn: trích xuất chữ ký của user trên webmail. Phần này bạn cần làm thử cho 1 account trước khi tiến hành hàng loạt. Vì kiến trúc của các phiên bản zimbra là khác nhau nên chúng tôi khuyên bạn nên hướng dẫn người dùng tự tạo chữ ký trên webmail mới.
10. Trích xuất trạng thái của account. Một số account có thể có trạng thái locked, locked out, active, v.v…
zmaccts | egrep '@' | egrep 'closed|locked' | awk '{print $1 " " $2}' > accountstatus.txt
B. Copy toàn bộ thư mục /migration đến server mới.
rsync -e ssh -axvzKHS /migration/ root@<ip_address_of_new_server>:/migration/
C. Import dữ liệu vào hệ thống mới.
1. Chuẩn bị thư mục để lưu các thông tin trên hệ thống cũ và hệ thống mới. Trên server cũ, tạo thư mục, với quyền root
mkdir /migration
chown zimbra:zimbra /migration
su - zimbra
cd /migration
2. Import domains.
for i in `cat domains.txt`; do zmprov cd $i zimbraAuthMech zimbra; echo $i; done
3. Import accounts.
Lưu ý: nếu display name hay given name được viết bằng tiếng Việt, bạn cần đảm bảo thiết lập locale dùng UTF-8 cho đúng. Bạn dùng quyền root để thiết lập, đồng thời đưa 2 lệnh này vào trong script dưới quyền zimbra.
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Tạo file chứa các dòng lệnh để import. Sử dụng cách này sẽ giúp tăng tốc câu lệnh zmprov.
touch importaccount.zmp
vi importaccount.sh
chmod +x importaccount.sh
Nhập vào nội dung sau trong file importaccount.sh
#!/bin/bash
# Creates the users and sets the old passwords.
# Use dummy password "zimbra" during the user creation
if [ $(whoami) != 'zimbra' ]; then
echo "Must be zimbra to run $0"
exit 1;
fi
USERPASS="/migration/userpass"
USERDDATA="/migration/userdata"
USERS="/migration/accounts.txt"
for i in `cat $USERS`; do
givenName=$(grep givenName: $USERDDATA/$i.txt | cut -d ":" -f2)
displayName=$(grep displayName: $USERDDATA/$i.txt | cut -d ":" -f2)
shadowpass=$(cat $USERPASS/$i.shadow)
echo "ca '$i' zimbra displayName '$displayName' zimbraMailHost '$(zmhostname)'" >> importaccount.zmp
echo "ma '$i' userPassword '$shadowpass'" >> importaccount.zmp
done
Lưu ý quan trọng: bạn cần đổi thông số của tham số zimbraMailHost về đúng tên của Mailbox server mà bạn muốn đặt mailbox. Ví dụ bạn có 2 mailbox server thì bạn nên tách mail accounts.txt thành 2 file và đổi ‘$(zmhostname)’ về đúng tên của mailbox server mong muốn.
Chạy file importaccount.sh để tạo ra các dòng mã tạo account trong file importaccount.zmp
./importaccount.sh
Chạy lệnh zmprov với đầu vào là file importaccount.zmp
zmprov < importaccount.zmp
4. Import các thành viên (member) vào distribution list.
Import các distribution list.
for i in `cat dlist.txt`; do zmprov cdl $i; echo "$i done"; done
Import member vào distribution list.
Tạo file chứa các câu lệnh zmprov.
touch importdlmember.zmp
vi importdlmember.sh
chmod +x importdlmember.sh
Nhập nội dung sau vào script importdlmember.sh
#!/bin/bash
# add all memebers to each of these distribution lists
if [ $(whoami) != 'zimbra' ]; then
echo "Must be zimbra to run $0"
exit 1;
fi
for i in `cat /migration/dlist.txt`; do
for j in `grep -v '#' dl/$i.txt |grep '@'`; do
echo "adlm '$i' '$j'" >> importdlmember.zmp
echo " '$j' has been added to list '$i'" >> importdlmember.zmp
done
done
Chạy script importdlmember.sh để sinh ra các dòng lệnh trong file importdlmember.zmp
./importdlmember.sh
Chạy lệnh zmprov với tham số đầu vào là importdlmember.zmp
zmprov < importdlmember.zmp
5. Import alias của account
Tạo các file script cần thiết.
touch importalias.zmp
vi importalias.sh
chmod +x importalias.sh
Copy đoạn code sau vào file importalias.sh
#!/bin/bash
for i in `cat /migration/accounts.txt`; do
if [ -f "alias/$i.txt" ]; then
for j in `grep '@' /migration/alias/$i.txt`; do
echo "aaa $i $j" >> importalias.zmp
done
fi
done
Chạy file importalias.sh
./importalias.sh
Chạy lệnh zmprov
zmprov < importalias.zmp
6. Import chữ ký (nếu bạn đã thực hiện bước export chữ ký). Chúng tôi khuyên bạn nên hướng dẫn user tự tạo lại chữ ký. Hoặc trợ giúp thêm bằng cách dùng zimlet tạo các signature template sẵn.
7. Thiết lập trạng thái các account cho giống trên hệ thống cũ.
Tạo các file script cần thiết.
touch setaccountstatus.zmp
vi setaccountstatus.sh
chmod +x setaccountstatus.sh
Copy đoạn code sau vào file setaccountstatus.sh
#!/bin/bash
if [ $(whoami) != 'zimbra' ]; then
echo "Must be zimbra to run $0"
exit 1;
fi
while IFS=" " read -r account status remainder
do
echo "ma $account zimbraAccountStatus $status" >> setaccountstatus.zmp
done < "accountstatus.txt"
Chạy lệnh:
./setaccountstatus.sh
zmprov < setaccountstatus.zmp
8. Thiết lập thời điểm cho phép user dùng POP3 để download message.
Khi bạn import account trên hệ thống mới, mặc định khi người dùng login vào dùng POP3 client thì phần mềm sẽ download lại toàn bộ email trong mailbox trên server zimbra mới về. Bạn cần hạn chế thời điểm mà người dùng bắt đầu download message về. Ví dụ khi bạn quyết định tắt server cũ và tái định tuyến người dùng đến server mới vào ngày chủ nhật. Do có thể có nhân viên nghỉ vào ngày thứ 7 hoặc thứ 6 và họ chưa download message về máy PC, bạn cần cho phép download POP3 kể từ ngày thứ 6. Nếu bạn cho phép download POP3 sớm hơn, ví dụ từ ngày thứ 2, thì các người dùng đã download mail sẽ tiếp tục download lại một lần nữa dẫn đến từ thứ 2 đến chủ nhật sẽ có 2 email giống nhau trên phần mềm Outlook của họ.
Tạo các file script cần thiết.
touch set_pop3_download_date.zmp
vi set_pop3_download_date.sh
chmod +x set_pop3_download_date.sh
Copy đoạn code sau vào file set_pop3_download_date.sh. Thay đổi thời điểm phù hợp, format là YYYYMMDDHHmmssZ (năm,tháng,ngày,giờ,phút,giây,Z).
#!/bin/bash
zmprov -l gaa | while read ACCOUNT
do
echo "ma '${ACCOUNT}' zimbraPrefPop3DownloadSince 20181210000000Z" >> set_pop3_download_date.zmp
done
Chạy script
./set_pop3_download_date.sh
zmprov < set_pop3_download_date.zmp
Trong trường hợp bạn muốn thay đổi thời gian cho phép POP3 download cho account cụ thể, bạn sử dụng lệnh zmprov sau:
zmprov ma <ten_account> zimbraPrefPop3DownloadSince <date_to_begin_download>
Ví dụ:
$zmprov ma testmail@zimilab.com zimbraPrefPop3DownloadSince 20181216000000Z
Đến thời điểm này, bạn đã hoàn thành việc export và import các dữ liệu cơ bản từ hệ thống cũ vào hệ thống mới.
D. Migrate mailbox data sử dụng imapsync.
Bạn nên mua dịch vụ hỗ trợ kỹ thuật (khá rẻ) của tác giả imapsync tại đây.
1. Để sử dụng imapsync, bạn cần bật IMAP cho các account.
– Bật imap clear text login trên cả 2 hệ thống.
– Cho phép port 7143 trên firewall, hoặc tạm thời disable firewall.
2. Cài đặt imapsync trên một server thứ 3, ví dụ chúng ta dùng Rocky Linux 9.
dnf install tmux
tmux # thay the cho screen
dnf install epel-release
dnf config-manager --set-enabled crb
dnf install imapsync
Test thử imapsync
imapsync
imapsync --testslive --tls1 --ssl2
imapsync --tests
Test imapsync thử cho 1 account test.
imapsync --host1 <ip_address_of_old_server> --user1 testaccount@zimilab.com --authuser1 admin@zimilab.com --password1 <password_of_old_admin> --host2 <ip_address_of_new_server> --user2 testaccount@zimilab.com --authuser2 <email_of_new_admin_user> --password2 <password_of_new_admin>
3. Cài đặt Parallel
dnf install parallel
parallel --version
4. Tạo file script migration
mkdir /migration
cd /migration
touch migratemaildata.sh
chmod +x migratemaildata.sh
- Bạn copy file accounts.txt ở trên vào thư mục /migration trên server imapsync này.
Copy đoạn code sau vào file migratemaildata.sh
#!/bin/sh
parallel --max-procs 7 --delay 2 --arg-file /migration/accounts.txt --line-buffer --tagstring "user {1} : " imapsync --host1 <ip_address_of_old_server> --user1 {1} --authuser1 <email_of_old_admin_user> --password1 <password_of_old_admin> --host2 <ip_address_of_new_server> --user2 {1} --authuser2 <email_of_new_admin_user> --password2 <password_of_new_admin>
Thực hiện chạy script.
tmux
./migratemaildata.sh
Bạn nên test trước với các account test. Sau đó chạy 1 lần script migrate hàng loạt trước 7 ngày, 3 ngày, 1 ngày. Vào thời điểm chuyển đổi hệ thống, bạn chạy script lần cuối và tắt hệ thống cũ.