Debian

如何在安裝 deb 包期間處理失敗的依賴項(使用 dpkg)

  • April 27, 2020

TL;博士;

如果有人使用 安裝我的debsudo 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),退出碼是1echo $?),但是postinst腳本沒有執行。該軟體可以在沒有 UI 的情況下執行,所以這沒什麼大不了的(直到我創建了兩個單獨的安裝程序 - 一個有 UI,一個沒有 UI)。

問題是我在postinst腳本中有一些重要的步驟,但它根本沒有執行。

也許我需要某種回滾過程或處理此類錯誤的方法,但我無法找到任何方法來做到這一點,儘管這聽起來微不足道。

另一種方法是在解包之後和依賴關係解析**之前執行所需的步驟,但我也沒有找到類似的東西。

顯然,我在這裡遺漏了一些基本的東西。有任何想法嗎?


編輯:更重要的是,如果失去的包後來出現,安裝也是不完整/損壞的,因為postinst從未實際執行過。由於這聽起來很簡單,我想對此有一個簡單的解決方案,但我找不到。

如果包的依賴項不存在和配置,您postinst將永遠不會執行。你可以通過設置來作弊preinst(儘管這發生在你的包被解包之前),但我認為更好的方法是將你的 GUI 依賴項移動到“推薦”。因為你的包可以在沒有 UI 依賴的情況下工作,它不應該依賴它們,它應該推薦它們;這將允許在它們不存在時配置包。

引用自:https://unix.stackexchange.com/questions/582848