Debian Binary Package (DEB)

升級 (Upgrade) 流程

套件升級涉及到新舊版的四個維護者腳本的運作,並可能進入到各種不同狀態,是最為複雜的流程。

在一切順利的狀況下,升級流程如下,並在最後進入 Installed (new version) 的狀態。

  1. 呼叫 old-prerm upgrade new-version
  2. 呼叫 new-preinst upgrade old-version
  3. 新版檔案被解封裝
  4. 呼叫 old-postrm upgrade new-version
  5. 舊版檔案被移除
  6. 呼叫 new-postinst configure old-version
  7. 進入 Install (new-version) 狀態

old-prerm 跟 old-postrm 兩個步驟有修復機制。若上述步驟一 old-prerm 失敗,則會執行 new-prerm failed-upgrade old-version 來嘗試修復,若成功則繼續步驟二。若上述步驟四 old-postrm 失敗,則會執行 new-postrm failed-upgrade new-postrm failed-upgrade new-version 來嘗試修復,若成功則繼續步驟五。

若步驟一 old-prerm 失敗,new-prerm 修復也失敗,則嘗試 old-postinst abort-upgrade new-version 回復到舊版安裝。若成功則套件狀態為 Installed (old-version),失敗則進入 Half-Configured (old-version) Reinst required

若步驟二 new-preinst 失敗會呼叫 new-postrm abort-upgrade old-version,並於成功後呼叫 old-postinst abort-upgrade new-version 嘗試回復成舊版本,套件最後進入 Installed (old-version) 狀態。若 new-postrm 失敗,則進入 Half-Installed (old-version) Reinst required 狀態 (舊版已經被 prerm)。若 old-postinst g 失敗,則套件進入 Unpacked (old-version) 狀態 (此狀態只有在升級會出現)。

若步驟四的 old-postrm 失敗,new-postrm 修復也失敗,則依序執行 old-preinst abort-upgrade new-version、new-postrm abort-upgrade old-version、old-postinst abort-upgrade new-version,嘗試回復為舊版 (實際上新版檔案已經解封裝,無法完全變回舊版),最後狀態進入 Installed (old-version)。若 old-preinst 或 new-postrm 失敗,則套件狀態進入 Half-Installed (old-version) Reinst required;若 old-postinst 失敗,則套見狀態進入 Unpacked (old-version)

若步驟六發生錯誤,則套件狀態進入 Half-Configured (new-version) 狀態。

Upgrade flow