打包 deb:如何處理可能失去的依賴項
問題:
我正在嘗試從我自己的來源創建一個 DEB 包。
除了處理依賴關係外,一切都很好。
據我了解,標記依賴項的最真實方法是將它們列出在文件的
Depends
部分中control
。我的應用程序需要兩個包 (aapt
和zipalign
),它們僅存在於最近的 Debian (≥ jessie ) 和 Ubuntu (≥ willy ) 儲存庫中,因此在較舊的儲存庫上安裝我的 .deb 肯定會出現問題。想法:
關於這個問題的幾個想法:
將所需的獨立二進製文件(作為我的 .deb 的一部分)安裝到
/usr/bin
.
- PRO:所需的依賴項作為獨立二進製文件存在於我的包中,因此
Depends
不會使用該部分,並且缺少的儲存庫包不會成為問題。- CON:如果目標機器上已經存在作為另一個包的一部分的目標二進製文件,
dpkg
則會遇到錯誤,並且強制使用者傳遞--force-overwrite
選項不是一個好主意。將所需的獨立二進製文件(作為我的 .deb 的一部分)安裝到
/usr/share/myapp
.
- PRO:應用程序使用自己的獨立目錄儲存第三方二進製文件,因此它不會更改可能存在的包(同樣,
Depends
不再需要該部分)。- CON:該
share
目錄旨在用於獨立於體系結構的數據,而二進製文件則不是。將整個應用程序安裝到
/opt/myapp
目錄中。
- PRO:此方法不違反 FHS 結構,並將文件保存在完全隔離的目錄中。
- CON:但是,這不是真正的 UNIX 方式,尤其是對於開源軟體。
使用該
Recommends
部分而不是Depends
較弱的關係,並向使用者提供一些關於如何獲取缺少的包的說明。
- CON:.deb 包本身失去了意義。
這些方法對我來說似乎都不合適。有沒有標準的方法來處理這個問題,我錯過了一些明顯的解決方案嗎?例如,某種有條件的安裝會非常有幫助(僅當命令沒有輸出時才安裝第三方二進製文件
which
等)。任何想法和建議將不勝感激。
提供(除了你的主包)單獨的包
aapt
和zipalign
. 確保他們有~
他們的版本(像這樣:)zipalign-21-4~kefir1.deb
。然後將它們與您的主包一起放入您的儲存庫中Depends: aapt, zipalign
(我很容易reprepro
託管我的儲存庫,這並不難)。這是Debian 的方式(與backports.debian.org的工作方式相同) - 如果系統是 Jessie 並提供
aapt
,則將使用該方式(因為您的軟體包版本中有波浪號,它僅用作最後的手段)。如果系統是較舊的 Debian,則只會提取您的額外軟體包。使用者可以從易於獲取的軟體包升級/安全修復中受益。額外的好處是,在 Jessie 上升級時,官方軟體包將被拉取並覆蓋您舊的額外軟體包(當然,除非您特別依賴特定版本或額外軟體包)。因此,您沒有舊版本/重複版本,並且使用者可以獲得 debian 安全團隊更新檔等的額外好處。