Debian

是否可以讓 Debian 軟體包預安裝腳本執行 apt-get 命令?

  • October 30, 2015

我正在創建一個 Debian 包,它有一些在官方儲存庫中找不到的依賴項。簡單地將這些其他軟體包指定為依賴項並不能解決問題,因為它們的安裝單獨涉及執行 apt-get update 並將源儲存庫(不是我的)添加到 /etc/apt/sources.list.d。

更多:其中一個軟體包是 Dart 語言 SDK - 您只能通過獲取他們的 deb 並使用 dpkg 或添加 Google 的儲存庫之一來安裝它。我的目標實際上只是在最小化包安裝和乾淨包部署所涉及的步驟數量之間找到平衡。

所以我希望我的包的預安裝腳本添加這些源,然後執行 apt-get update,但主要問題是,當包打開並安裝時,它會鎖定 dpkg。那麼是否有可能直接實現我所追求的,或者還有哪些其他選項/解決方法?

我不認為它可能直接。

但不知何故,使用者安裝了你的包——顯然不是來自你的儲存庫,因為它還沒有被添加。所以我建議的第一個解決方法是以正常方式做事:讓使用者添加儲存庫(或給使用者一個簡單的 shell 腳本),然後正常安裝你的包。這將是我的首選解決方案,並且執行 shell 腳本並不比安裝包更難。

第二種解決方法:讓你的包只是一個安裝包。讓它設置您的儲存庫,然後告訴使用者(例如,通過 debconf 註釋或螢幕上的其他提示)安裝真正的包(它將來自您的儲存庫)。

第三種解決方法:相同的安裝包,但在您的儲存庫中使用相同的包名稱,只是更高版本(可能使用一個紀元)。所以初始安裝將設置儲存庫,然後apt upgrade或類似的方法將拉入真正的包。

第四:我不確定這是一個好主意,但是——在你的 postinst 中,啟動一個等待 dpkg 鎖定的後台程序,然後完成你的安裝。我認為atorbatch會為此工作,或者只是一個普通的/path/to/script &後跟disown. 您可能想讓使用者知道軟體包安裝將在後台完成。

PS:您可能還需要添加 GPG 密鑰。

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