Debian

打包 deb:如何處理可能失去的依賴項

  • August 7, 2016

問題:

我正在嘗試從我自己的來源創建一個 DEB 包。

除了處理依賴關係外,一切都很好。

據我了解,標記依賴項的最真實方法是將它們列出在文件的Depends部分中control。我的應用程序需要兩個包 (aaptzipalign),它們僅存在於最近的 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等)。

任何想法和建議將不勝感激。

提供(除了你的主包)單獨的包aaptzipalign. 確保他們有~他們的版本(像這樣:)zipalign-21-4~kefir1.deb。然後將它們與您的主包一起放入您的儲存庫中Depends: aapt, zipalign(我很容易reprepro託管我的儲存庫,這並不難)。

這是Debian 的方式(與backports.debian.org的工作方式相同) - 如果系統是 Jessie 並提供aapt,則將使用該方式(因為您的軟體包版本中有波浪號,它僅用作最後的手段)。如果系統是較舊的 Debian,則只會提取您的額外軟體包。使用者可以從易於獲取的軟體包升級/安全修復中受益。

額外的好處是,在 Jessie 上升級時,官方軟體包將被拉取並覆蓋您舊的額外軟體包(當然,除非您特別依賴特定版本或額外軟體包)。因此,您沒有舊版本/重複版本,並且使用者可以獲得 debian 安全團隊更新檔等的額外好處。

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