
根據 Debian 軟體包維護者腳本文檔install
,可以使用第一個參數或第一個參數來呼叫預先安裝腳本upgrade
:
該
preinst
腳本可以透過以下方式呼叫:
new-preinst
安裝new-preinst
安裝舊版 新版本new-preinst
升級舊版 新版本
install old-version new-version
和 和有什麼差別upgrade old-version new-version
?第一種形式(只是install
)似乎很清楚,但我不明白舊版本號和新版本號之間的區別install
以及指定的位置。upgrade
答案1
這在中進行了解釋“詳細資料”部分:
- 如果軟體包已經完全安裝,則使用舊版本和新版本
preinst
進行呼叫;upgrade
- 如果該軟體包之前已安裝,並且仍然具有其設定檔(處於「Config-Files」狀態,IE它顯示為
rc
的dpkg -l
輸出),preinst
用install
和 舊版本和新版本調用; - 如果軟體包是新安裝的,或之前被清除的,
preinst
則呼叫時install
不帶版本資訊。
由於preinst
在解包階段之前運行,upgrade
表示包內容的先前版本可用,而install
表示包內容不存在任何版本(配置文件除外)。另外,如果提供版本信息,則表明可能有配置文件需要處理。
upgrade
和之間的差異並不install
顯著,但我確實想到的一種情況是涉及導出資料的升級。例如,在upgrade
模式下,slapd
匯出preinst
其資料庫;它無法在install
模式下執行此操作,因為不存在適當的工具。
答案2
考慮:
- 您安裝軟體包 A,版本 x。
- 您刪除了軟體包 A,但沒有清除,因此設定檔、使用者、群組等仍然存在。
- 您安裝軟體包 A,版本 y。
現在維護者腳本需要處理這些設定檔、使用者、群組等,儘管嚴格來說,您不是在升級,而只是在安裝。您可以在第二個流程圖中看到這一點:“安裝之前已刪除但未清除的軟體包”