本文目錄
本文的對象是 Zimbra OSE(Open Source Edition,開源版)主機。Ubuntu 20.04 的標準支援已在 2025 年 5 月底結束,跑在上面的 Zimbra OSE 主機遲早要升到 22.04。
Zimbra 的套件是綁 Ubuntu 版本的,20.04 用的是 UBUNTU20_64,22.04 要換成 UBUNTU22_64。所以這不只是作業系統升級,升完之後還要用 22.04 版的安裝檔,把同版本的 Zimbra 重新裝一次。
這條路聽起來簡單,實際做下去有好幾個很容易踩到的地方。照一般的方式直接執行 install.sh,Zimbra 會被當成全新安裝,原本的設定會被覆蓋掉。
本文是我在測試機演練、再實際升級正式主機之後,把遇到的問題都併進流程的版本。從上到下照順序做,每一步都有確認方式,看到結果不對就先停下來。
適用範圍
| 項目 | 內容 |
|---|---|
| Zimbra | OSE 開源版 10.1.20(UBUNTU20_64) |
| 作業系統 | Ubuntu 20.04 → 22.04 |
| 架構 | 單台主機(所有元件裝在同一台) |
| 安裝檔 | jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz |
安裝檔是我自行打包的 Zimbra 開源版(見文末參考資料),其他來源的 OSE 安裝檔流程相同,檔名換成自己的即可。多台主機的架構要逐台處理,順序也要另外規劃,不在本文範圍內。
升級過程中會發生什麼事
先了解這件事,後面的步驟才知道為什麼要這樣做。
do-release-upgrade 在計算升級內容時,會發現 Zimbra 的套件依賴 20.04 專屬的函式庫,於是把它們列入移除清單:
- Zimbra 核心套件約 26 個
zimbra-core、zimbra-ldap、zimbra-mta、zimbra-store、zimbra-proxy 等 - zimbra-perl 系列約 60 個
Zimbra 自帶的 Perl 模組
這些套件被移除時,連同設定檔一起清掉,所以升級完會發現:
/opt/zimbra/conf少了一大半檔案,localconfig.xml也不見了/opt/zimbra/bin、libexec、zimlets被刪除
不過資料都還在:
/opt/zimbra/db/data(MariaDB 資料)/opt/zimbra/data/ldap(LDAP 資料)/opt/zimbra/store(郵件本體)/opt/zimbra/.saveconfig、/opt/zimbra/.install_history
另外,openssl、openjdk、postfix 這些 Zimbra 第三方元件不會被移除,會以 20.04 版的狀態留下來,這點後面會處理。
這時候如果直接執行 22.04 版的 install.sh,它看到 zimbra-core 沒有安裝,就會走全新安裝流程(會先問 Would you like to delete /opt/zimbra before installing?),把 localconfig.xml 重新產生一份,裡面的 LDAP 密碼、資料庫密碼都會和既有資料對不起來。
整個做法可以濃縮成六個重點,後面的步驟都會依序做到:
- 升級前備份
/opt/zimbra/conf,升級後還原 install.sh前暫時移走/etc/apt/preferences.d/zimbrainstall.sh加上--force-upgradeInstall zimbra-xxx的預設值是 N,原本有的元件都要答 y- 有用商用憑證的,安裝後重新部署憑證
- 把剩下的 Zimbra 第三方套件全部升級成 22.04 版
升級前準備
安排維護時段
照本文流程,測試機從停止 Zimbra 到收尾完成約 45 分鐘;正式主機資料量較大,作業系統升級也比較久(我的正式主機光這一步就 41 分鐘),建議預留 2~2.5 小時。
升級期間 Webmail、收發信,以及郵件軟體的 IMAP/POP3 連線都會中斷,請事先通知使用者。
確認可以建立快照
這次升級牽涉作業系統跨版本,務必在停止 Zimbra 後建立 VM 快照,萬一中途出問題,這是唯一乾淨的回復方式。
注意:作業系統升級做到一半失敗時,不要嘗試在半升級的狀態下修 Zimbra,直接回復快照再重來。
檢查主機狀態
lsb_release -ds # Ubuntu 20.04.x LTS
df -h / /boot /opt # / 建議 10 GB 以上可用,/boot 300 MB 以上
locale -a | grep -i en_us # 要有 en_US.utf8
su - zimbra -c "zmcontrol -v" # 10.1.20.GA.10120.UBUNTU20.64
如果沒有 en_US.utf8,先補上,否則後面安裝時會一直出現 Perl 的 locale 警告:
locale-gen en_US.UTF-8
下載 22.04 版安裝檔
先在 20.04 上把安裝檔準備好,升級後就不用再處理網路或下載的問題:
cd /root
wget https://github.com/jasoncheng7115/zimbra-ose-build/releases/download/10.1.20/jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz
wget https://github.com/jasoncheng7115/zimbra-ose-build/releases/download/10.1.20/jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz.sha256
sha256sum jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz
cat jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz.sha256
tar xzf jasontools-zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937.tgz
sha256sum 算出來的值要和 Release 頁面附的 .sha256 檔相同,不同就重新下載。
使用 tmux
do-release-upgrade 和 install.sh 都要跑很久,中間又有很多題目要回答,請在 tmux 裡執行,避免 SSH 斷線造成升級中斷:
apt install -y tmux
tmux new -s upgrade
步驟一:記錄現況與備份
Zimbra 還在執行時,先把現況記錄下來,升級完要拿來比對。
後面的步驟都會用到 BK 這個變數,如果中間重新登入或重新開機,記得再設定一次。這個目錄會存放含密碼的設定,權限設成只有 root 能讀:
BK=/root/pre-u22-backup
mkdir -p $BK && chmod 700 $BK
su - zimbra -c "zmcontrol -v; zmcontrol status" > $BK/pre-status.txt
su - zimbra -c "zmprov -l gaa" > $BK/pre-accounts.txt
su - zimbra -c "zmprov gad" > $BK/pre-domains.txt
su - zimbra -c "zmprov gs \$(zmhostname) zimbraServiceEnabled zimbraReverseProxySSLProtocols" > $BK/pre-keysettings.txt
su - zimbra -c "zmlocalconfig -s" > $BK/localconfig.txt
dpkg -l > $BK/dpkg-l.txt
wc -l $BK/pre-accounts.txt $BK/pre-domains.txt
記下目前安裝了哪些 Zimbra 元件,步驟五回答問題時要對照:
for p in zimbra-ldap zimbra-logger zimbra-mta zimbra-dnscache zimbra-snmp zimbra-store zimbra-apache zimbra-spell zimbra-memcached zimbra-proxy; do
printf "%-18s %s\n" $p "$(dpkg-query -W -f='${Status}' $p 2>/dev/null || echo not-installed)"
done | tee $BK/zimbra-components.txt
匯出 LDAP(-c 是 cn=config 設定資料庫):
L=/var/backups/zimbra-pre-u22
mkdir -p $L && chown zimbra:zimbra $L && chmod 700 $L
su - zimbra -c "/opt/zimbra/libexec/zmslapcat $L; /opt/zimbra/libexec/zmslapcat -c $L"
ls -la $L
要看到 ldap.bak 和 ldap-config.bak 兩個檔案。
注意:LDAP 匯出不要放在 /root 底下。/root 的權限是 700,zimbra 帳號寫不進去,指令會直接失敗。
用 Zimbra 目錄分析器檢視匯出內容
ldap.bak 是純文字的 LDIF,一萬多行很難直接看。我在 IT @ Jason Tools 做了一支「Zimbra 目錄分析器」,把這份匯出讀成網域、帳號、群組、別名的清單,順便做一次離線健檢,升級前先看一眼目錄有沒有本來就壞掉的地方。
把 ldap.bak 複製到自己的電腦(scp 即可),打開 Zimbra 目錄分析器,選擇檔案或直接拖進去。
檔案只在瀏覽器分頁裡處理,不會上傳;我用真實主機的匯出實測時也確認過,載入檔案後沒有任何對外連線。密碼雜湊與 token 這些欄位畫面上不顯示,也不會出現在匯出的報告裡。

「設定健檢」把發現分成錯誤、要注意、盤點、無法判定四種,每一筆都能跳回原文的行號。像群組成員指到已經不存在的帳號,就會列成錯誤。

注意,分析器只讀目錄內容,也就是 ldap.bak;zmslapcat -c 匯出的 ldap-config.bak 是 cn=config,不是它的讀取來源,不用拿去載入。
最重要的一步,備份 /opt/zimbra/conf:
tar czpf $BK/zimbra-conf.tgz -C /opt/zimbra conf
ls -la $BK/zimbra-conf.tgz
這份備份在步驟四會用到,沒有它就沒辦法還原 localconfig.xml。
再確認 .saveconfig 裡的 localconfig.xml 和目前使用中的一致。--force-upgrade 安裝完成時,會用這一份覆蓋回去:
cmp /opt/zimbra/.saveconfig/localconfig.xml /opt/zimbra/conf/localconfig.xml \
&& echo 一致 || { cp -p /opt/zimbra/conf/localconfig.xml /opt/zimbra/.saveconfig/; echo 已更新; }
最後看一下有沒有其他第三方套件來源,升級時它們會被停用,上面的套件也可能被移除:
grep -rhE '^deb ' /etc/apt/sources.list.d/ | grep -v zimbra
有的話先記下來,升級後再確認那些套件的狀態。
步驟二:停止 Zimbra、建立快照、整理 apt 來源
su - zimbra -c "zmcontrol stop"
ps -u zimbra -o pid,args --no-headers
確認沒有 Zimbra 的服務程序還在執行,如果還有,等一下再執行一次 zmcontrol stop。只剩 zimbra 帳號的登入 shell 不影響。
確認停止後,這時候建立 VM 快照。
接著停用 Zimbra 開機自動啟動,避免升級後重新開機時,用已經被刪掉一半的 20.04 程式啟動:
systemctl disable zimbra
把 Zimbra 的 apt 來源註解掉,deb-src 也要一起註解:
sed -i -E 's/^(deb|deb-src) /#\1 /' /etc/apt/sources.list.d/zimbra.list
grep -vE '^\s*#|^\s*$' /etc/apt/sources.list.d/zimbra.list || echo 已全部註解
先把 20.04 的更新補齊,do-release-upgrade 要求系統是最新狀態:
apt update
apt upgrade -y
如果更新到核心(有 /var/run/reboot-required),請先重新開機一次再繼續。
步驟三:升級作業系統
do-release-upgrade
過程中會出現以下題目:
| 題目 | 回答 |
|---|---|
Continue running under SSH? | y |
Starting additional sshd on port 1022(To continue please press [ENTER]) | Enter |
Third party sources disabled(To continue please press [ENTER]) | Enter |
Do you want to start the upgrade?(Continue [yN] Details [d]) | y |
Restart services during package upgrades without asking? | Yes |
Services to restart for GNU libc library upgrade | Ok |
設定檔衝突(*** xxx (Y/I/N/O/D/Z) [default=N] ?) | N(保留現有版本) |
| 設定檔衝突的對話框(例如 sshd_config) | keep the local version currently installed |
Remove obsolete packages? | N |
System upgrade is complete. Restart required | y |
幾個說明:
- 如果 tmux 是在 SSH 連線之外啟動的,可能不會出現 SSH 和 1022 埠那兩題,屬正常
- 步驟二已經把所有第三方來源註解掉的話,
Third party sources disabled這題也不會出現 Do you want to start the upgrade?可以先按d看明細,Remove 底下會列一長串 zimbra 套件,這是正常的,看完按q再答 y- 設定檔衝突一律保留現有版本,常見的有 crontab、sudoers、resolved.conf、sysctl.conf、sshd_config,都是 Zimbra 或系統管理時改過的
Remove obsolete packages?一定要答 N,答 Y 的話會再多移除一百多到三百個套件
重新開機後確認:
lsb_release -ds # Ubuntu 22.04.x LTS
systemctl is-enabled zimbra # disabled
ls /opt/zimbra/conf/localconfig.xml # 預期:No such file or directory
dpkg -l | awk '/^rc/{print $2}' # 被移除的套件(rc 狀態)
最後一個指令會列出升級時被移除的套件。除了 zimbra 開頭的之外,如果有其他自己裝的第三方套件(例如記錄轉送、監控 agent),記下來,收尾時再處理。
步驟四:還原設定檔、準備 apt 來源
重新登入的話,先把變數設回來:
BK=/root/pre-u22-backup
從步驟一的備份還原 /opt/zimbra/conf:
tar xzpf $BK/zimbra-conf.tgz -C /opt/zimbra
ls -la /opt/zimbra/conf/localconfig.xml # 擁有者要是 zimbra zimbra
把 Zimbra 的 apt 來源改成 22.04(jammy):
cat > /etc/apt/sources.list.d/zimbra.list <<'EOF'
deb [arch=amd64] https://repo.zimbra.com/apt/87 jammy zimbra
deb [arch=amd64] https://repo.zimbra.com/apt/1000 jammy zimbra
deb [arch=amd64] https://repo.zimbra.com/apt/1010 jammy zimbra
EOF
OSE 開源版的核心套件來自安裝檔本身,但第三方元件還是要從 Zimbra 的 repo 取得,所以這裡一定要打開。87、1000、1010 這三個來源與 Zimbra 安裝程式自己寫入的相同。
暫時移走 Zimbra 的 apt 優先權設定
很多 Zimbra 主機都有 /etc/apt/preferences.d/zimbra,把 repo 的優先權設成 50。
這個檔案在這裡會擋住升級:留下來的 20.04 第三方元件優先權是 100,repo 裡的 22.04 版只有 50,apt 會選擇保留舊版,install.sh 就會出現 Unable to download packages from repository. System is not modified.
先移開,收尾時再放回來:
[ -f /etc/apt/preferences.d/zimbra ] && mv /etc/apt/preferences.d/zimbra $BK/apt-preferences-zimbra
apt update
apt-cache policy zimbra-openssl | sed -n 2,3p
Candidate 要是 22.04 結尾的版本,這樣才能繼續。
步驟五:執行 install.sh --force-upgrade
cd /root/zcs-10.1.20_GA_10120.UBUNTU22_64.20260826052937
./install.sh --force-upgrade
注意,--force-upgrade 不能漏掉。
套件已經被移除了,install.sh 自己判斷不出這是升級。從 Zimbra 安裝程式的原始碼(utilfunc.sh)可以看到,加上這個參數才會:
- 走升級流程,問
Do you wish to upgrade?,不會問要不要刪除/opt/zimbra - 在安裝記錄中寫入
UPGRADED,zmsetup 才會讀取既有的設定與 LDAP - 安裝完成時,用
.saveconfig裡的localconfig.xml還原,連同憑證一起
題目與回答:
| 題目 | 回答 |
|---|---|
Do you agree with the terms of the software license agreement? | y |
Use Zimbra's package repository | N |
Do you wish to upgrade? | Y |
Install zimbra-xxx [N](逐一詢問) | 對照 zimbra-components.txt,有安裝的全部答 y |
確認 Installing: 清單 | 和 zimbra-components.txt 比對,不能少 |
The system will be modified. Continue? | y |
Port conflicts detected! - Press Enter/Return key to continue | Enter(port 53 被 systemd-resolved 佔用,升級前就是這樣;沒有衝突就不會出現) |
Notify Zimbra of your installation? | No |
Configuration complete - press return to exit | Enter |
幾個要特別說明的地方:
Use Zimbra's package repository 一定要答 N
OSE 開源版的套件都在安裝檔的 packages/ 裡,Zimbra 官方的 repo 已經不再提供 OSE 開源版的核心套件,答 Y 會去抓不存在或不相符的套件。答 N 之後會看到 Found zimbra-core (local) 這類訊息。
Install zimbra-xxx 預設值是 N
這是最容易出錯的地方。套件都被移除了,install.sh 會逐一詢問要安裝哪些元件,而在升級模式下每一題的預設值都是 N,習慣性一路按 Enter 就會漏裝元件。
以單台主機的完整安裝為例,會依序問:
Install zimbra-ldap [N] y
Install zimbra-logger [N] y
Install zimbra-mta [N] y
Install zimbra-dnscache [N] y
Install zimbra-snmp [N] y
Install zimbra-store [N] y
Install zimbra-apache [N] y
Install zimbra-spell [N] y
Install zimbra-proxy [N] y
zimbra-memcached 會隨著 zimbra-proxy 自動加入,不會另外詢問。即使之前停用了 snmp 或 spell 服務,套件本身還是要裝回去,服務是否啟用是另一個設定。
出現 Would you like to delete /opt/zimbra before installing?
代表 --force-upgrade 沒有生效。這題答 N,然後按 Ctrl+C 中止,回頭確認指令。
確認是升級模式
安裝套件結束、開始執行 zmsetup 之後,可以另開一個視窗確認:
tail -3 /opt/zimbra/.install_history
grep -c Newinstall /tmp/zmsetup.*.log
grep "Setting defaults from" /tmp/zmsetup.*.log
.install_history最後幾行要是UPGRADED,不是INSTALLEDNewinstall出現次數要是0- 要看到
Setting defaults from existing config
快結束時也會看到 Skipping creation of default domain GAL sync account - existing install detected.
步驟六:安裝後修正
install.sh 跑完之後,還有憑證與第三方元件兩件事要處理,做完才算升級完成。兩件一起做,只需要重新啟動一次 Zimbra。
有使用商用憑證的主機:重新部署憑證
--force-upgrade 安裝完成時,也會從 .saveconfig 還原 LDAP、nginx、postfix 用的憑證與 mailboxd 的 keystore。
.saveconfig 是上一次執行 install.sh 時留下的,如果之後換過憑證,這裡還原回來的就是舊憑證。我在正式主機上就遇到還原回來的是已經過期的憑證,zmcontrol status 直接出現 certificate verify failed when connecting to ldap master。
比對現行的商用憑證和實際使用中的憑證:
C=/opt/zimbra/ssl/zimbra/commercial
[ -f $C/commercial.crt ] && /opt/zimbra/common/bin/openssl x509 -in $C/commercial.crt -noout -enddate
/opt/zimbra/common/bin/openssl x509 -in /opt/zimbra/conf/slapd.crt -noout -enddate
- 沒有
commercial.crt(使用 Zimbra 自簽憑證)
跳過這一項 - 兩個日期相同
跳過這一項 - 兩個日期不同
重新部署現行的商用憑證
su - zimbra -c "/opt/zimbra/bin/zmcertmgr deploycrt comm $C/commercial.crt $C/commercial_ca.crt"
/opt/zimbra/common/bin/openssl x509 -in /opt/zimbra/conf/slapd.crt -noout -enddate # 要和 commercial.crt 相同
把剩下的第三方元件升級成 22.04 版
install.sh 只會升級它直接需要的元件,還會有一批 Zimbra 第三方套件停在 20.04 的建置版本,我的正式主機剩了 73 個:
dpkg-query -W -f='${Package} ${Version}\n' 'zimbra*' | grep -c '20\.04'
這些套件版本號一樣,只是為 22.04 重新編譯,但舊版裡面的 Perl 模組是給 20.04 的 Perl 用的。例如 logger 會因此起不來(RRDs.c: loadable library and perl binaries are mismatched)。
先用 -s 模擬,確認只有升級、沒有移除任何套件:
apt list --upgradable 2>/dev/null | grep '^zimbra' | cut -d/ -f1 > $BK/zimbra-u20-leftover.txt
wc -l < $BK/zimbra-u20-leftover.txt
apt-get install -s --only-upgrade $(cat $BK/zimbra-u20-leftover.txt) | grep 'upgraded,'
要看到 N upgraded, 0 newly installed, 0 to remove。接著照 Zimbra 的程序升級,同時讓上一項的憑證生效:
su - zimbra -c "zmcontrol stop"
apt-get install -y --only-upgrade $(cat $BK/zimbra-u20-leftover.txt)
/opt/zimbra/libexec/zmfixperms
su - zimbra -c "zmcontrol start"
dpkg-query -W -f='${Version}\n' 'zimbra*' | grep -c '20\.04' # 要是 0
步驟七:驗證
版本與服務
su - zimbra -c "zmcontrol -v"
su - zimbra -c "zmcontrol status"
版本要是 Release 10.1.20.GA.10120.UBUNTU22.64 UBUNTU22_64 FOSS edition.,服務清單和 $BK/pre-status.txt 相同、全部 Running。
步驟六的第三方元件升級完之後,logger 應該會正常啟動。如果還是顯示 Stopped,先確認 20.04 套件為 0,再手動啟動:
su - zimbra -c "zmlogswatchctl start"
帳號、網域、設定
和步驟一的記錄比對。網域清單的順序可能不同,所以排序後再比:
su - zimbra -c "zmprov -l gaa" | diff - $BK/pre-accounts.txt && echo 帳號一致
su - zimbra -c "zmprov gad" | sort | diff - <(sort $BK/pre-domains.txt) && echo 網域一致
su - zimbra -c "zmlocalconfig -s" | diff - $BK/localconfig.txt && echo 設定一致
su - zimbra -c "zmprov gs \$(zmhostname) zimbraServiceEnabled zimbraReverseProxySSLProtocols" | sort | diff - <(sort $BK/pre-keysettings.txt) && echo 服務設定一致
zmlocalconfig -s 會顯示密碼,這一項一致,代表 LDAP 與資料庫的密碼都正確延續下來。
最後一項如果有差異,通常是之前停用的服務(例如 snmp、spell)被安裝程式加回去了,用 zmprov ms $(zmhostname) -zimbraServiceEnabled 服務名稱 再停用即可。
比較升級前後的 LDAP
前面的 diff 只比到帳號、網域清單與幾項設定。要確認整份目錄都沒變,可以升級後再匯出一份,用 Zimbra 目錄分析器的「快照比較」逐筆比對:
L2=/var/backups/zimbra-post-u22
mkdir -p $L2 && chown zimbra:zimbra $L2 && chmod 700 $L2
su - zimbra -c "/opt/zimbra/libexec/zmslapcat $L2"
把這份 ldap.bak 也複製回電腦。分析器先載入升級前的 ldap.bak(A),再到「快照比較」選升級後的那份當 B,「匯出範圍」兩個都勾成完整匯出。
「改過」「更名」「只在 A」「只在 B」都是 0,就代表升級前後的目錄內容一致。

密碼、token 這類欄位分析器不顯示也不比對,所以這裡沒有列出差異,不代表那些欄位沒變;密碼是否延續下來,要看前面 zmlocalconfig -s 的比對,以及實際登入測試。
開機自動啟動
systemctl is-enabled zimbra
install.sh 會自動改回 enabled,如果不是,手動執行 systemctl enable zimbra。
實際使用
- 登入 Webmail,確認信件、行事曆、聯絡人都在
- 內外部收發信各測試一封
- 有搭配 Z-Push 提供 ActiveSync 的話,測試手機同步(OSE 開源版本身沒有 Zimbra Mobile,ActiveSync 要靠 Z-Push)
- 檢查郵件佇列:
su - zimbra -c "postqueue -p"
步驟八:收尾
apt 來源註解回去、優先權設定放回來
sed -i -E 's/^(deb|deb-src) /#\1 /' /etc/apt/sources.list.d/zimbra.list
[ -f $BK/apt-preferences-zimbra ] && cp -p $BK/apt-preferences-zimbra /etc/apt/preferences.d/zimbra
apt update
平常建議保持註解,只在升級 Zimbra 或更新元件時打開。Zimbra 的元件不應該在服務執行中直接用 apt upgrade 更新。
處理被移除的第三方套件
步驟三最後列出的 rc 套件,需要的就安裝 22.04 的版本,或改用其他工具取代;不需要的就清掉殘留設定:
dpkg -l | awk '/^rc/{print $2}' | grep -v '^zimbra'
注意:清除前先看一下該套件的移除腳本(/var/lib/dpkg/info/套件名稱.postrm)會刪掉哪些檔案,有些舊套件和新的替代品共用同一個目錄。
清理過時套件(可選)
確認 Zimbra 一切正常、觀察幾天之後,再視需要處理:
apt autoremove --dry-run
先用 --dry-run 看清單,清單中如果有任何 zimbra 開頭的套件,就不要執行。
刪除快照與備份
確認沒問題後,再刪除步驟二建立的 VM 快照。
$BK(/root/pre-u22-backup)裡的 localconfig.txt 有明碼密碼,/var/backups/zimbra-pre-u22、/var/backups/zimbra-post-u22 是完整的 LDAP 資料(含密碼雜湊),觀察期過後一併刪除,或移到受控的備份位置。複製到自己電腦上分析的 ldap.bak 也要記得刪掉。
回復方式
升級失敗時,最快的方式是回復步驟二建立的 VM 快照。
回復之後請開機確認確實回到原本的狀態:
lsb_release -ds
su - zimbra -c "zmcontrol -v"
要看到 Ubuntu 20.04 與 UBUNTU20_64。不要只看回復指令有沒有回傳成功,我在測試時就遇過快照回復指令回報失敗、主機卻還停在升級後狀態的情況。
快照是在停用開機自動啟動之前建立的,回復後 Zimbra 會照常啟動。
結論
這次升級的關鍵,是要知道 do-release-upgrade 會把 Zimbra 的核心套件與設定檔一起清掉、第三方元件卻留在 20.04 版,而 install.sh 預設會把這種狀況當成全新安裝。
照本文的順序做,帳號、網域、設定都能完整延續下來。整個流程我先在測試機演練,再升級正式主機,正式主機上遇到的問題併進流程後,又用測試機從頭照本文跑過一次。
每台主機的狀況不同,正式升級前,還是建議先用快照或複製一台測試機跑過一次,維護時段也抓寬一點。
參考資料
- Jason Tools 打包的 Zimbra 開源版安裝檔
https://github.com/jasoncheng7115/zimbra-ose-build - Zimbra 安裝程式原始碼(install.sh、utilfunc.sh)
https://github.com/Zimbra/zm-build/tree/develop/rpmconf/Install - Ubuntu Server 文件:How to upgrade your release
https://ubuntu.com/server/docs/how-to-upgrade-your-release/ - IT @ Jason Tools:Zimbra 目錄分析器
https://it.jason.tools/tools/zimbra-directory.html - Ubuntu release cycle
https://ubuntu.com/about/release-cycle



