如何建構跨發行版二進制 RPM 包?
我正在嘗試建構一個在 Fedora 和 openSUSE 下工作的跨發行版二進制 RPM 包。我正在使用
Require:
標籤來設置依賴包名稱。問題是每個 GNU/Linux 發行版儲存庫中的包名稱都不同。閱讀:http://goo.gl/3MXSq,並使用 ‘%if 0%{?suse_version} ’ 語句給出一個跨發行版 .spec 文件。也就是說,deps 列表將在建構時而不是安裝時確定。
有沒有辦法在二進制 RPM 包中設置條件列表?
是的,這當然是可能的,因為您連結到的 openSUSE wiki 頁面的連結詳細說明了這一點。也有一些供應商這樣做,例如用於 Fedora/openSUSE 的 google-chrome RPM 包(也適用於其他 rpm 發行版)就是一個例子,他們只有一個 rpm 包,涵蓋了主要的 rpm 發行版。
但是你應該注意你需要什麼。您必須區分
Requires:
普通軟體包,例如您可能需要的二進製文件。這些必須手動添加。此外 Requires on 文件名(例如Requires: /usr/bin/sendmail
)被忽略並且它們也不可移植,因為一些發行版會將它們的文件放在稍微不同的位置。對於
Requires:
通用庫包上的未版本控制,這些通常總是錯誤的。它們會在 rpm 建構期間自動添加。在極少數情況下需要強制執行某個版本,並且必須添加顯式版本化的 Requires,主要是在庫包上。例如http://fedoraproject.org/wiki/Packaging:Guidelines#Explicit_Requires對此進行了解釋
沒門。對不起。你不能在 RPM 中做有條件的 deps 列表。這樣做的唯一方法是從您的規範文件中刪除所有發行版特定的 deps。