Debian
如何在安裝 deb 包期間處理失敗的依賴項(使用 dpkg)
TL;博士;
如果有人使用 安裝我的
deb
包sudo dpkg -i example.deb
,有沒有辦法添加一些自定義操作(shell 命令,類似於postinst
)以防安裝失敗的依賴項(因為包實際上已解包並存在於目標機器上)?假設一個
deb
包有一些 UI 依賴,但目標機器是 Ubuntu 伺服器。跑步
sudo dpkg -i example.deb
導致(Reading database ... 59708 files and directories currently installed.) Preparing to unpack ./example.deb ... Unpacking example (13) over (11) ... dpkg: dependency problems prevent configuration of example: example depends on libappindicator1; however: Package libappindicator1 is not installed. dpkg: error processing package example (--install): dependency problems - leaving unconfigured Processing triggers for mime-support (3.64ubuntu1) ... Errors were encountered while processing: example
結果是 - 解壓包(我可以找到裡面的內容
/opt
),退出碼是1
(echo $?
),但是postinst
腳本沒有執行。該軟體可以在沒有 UI 的情況下執行,所以這沒什麼大不了的(直到我創建了兩個單獨的安裝程序 - 一個有 UI,一個沒有 UI)。問題是我在
postinst
腳本中有一些重要的步驟,但它根本沒有執行。也許我需要某種回滾過程或處理此類錯誤的方法,但我無法找到任何方法來做到這一點,儘管這聽起來微不足道。
另一種方法是在解包之後和依賴關係解析**之前執行所需的步驟,但我也沒有找到類似的東西。
顯然,我在這裡遺漏了一些基本的東西。有任何想法嗎?
編輯:更重要的是,如果失去的包後來出現,安裝也是不完整/損壞的,因為
postinst
從未實際執行過。由於這聽起來很簡單,我想對此有一個簡單的解決方案,但我找不到。
如果包的依賴項不存在和配置,您
postinst
將永遠不會執行。你可以通過設置來作弊preinst
(儘管這發生在你的包被解包之前),但我認為更好的方法是將你的 GUI 依賴項移動到“推薦”。因為你的包可以在沒有 UI 依賴的情況下工作,它不應該依賴它們,它應該推薦它們;這將允許在它們不存在時配置包。