我正在尝试构建一个在 Fedora 和 openSUSE 下运行的跨发行版二进制 RPM 包。我正在使用Require:
标签来设置依赖项包名称。问题是每个 GNU/Linux 发行版存储库中的包名称都不同。
阅读:http://goo.gl/3MXSq,并使用 '%if 0%{?suse_version} ' 语句给出跨发行版的 .spec 文件。也就是说,依赖列表将在构建时而不是安装时确定。
有没有办法在二进制 RPM 包内设置 deps 的条件列表?
答案1
是的,这当然是可能的,因为您链接到的 openSUSE wiki 页面的链接详细解释了这一点。也有一些供应商这样做,例如Fedora/openSUSE 的 google-chrome RPM 包(在其他 rpm 发行版上也能很好地运行)就是一个例子,其中它们只有一个 rpm 包涵盖了主要的 rpm 发行版。
但你应该注意你的需求。您必须区分Requires:
普通包,例如您可能需要的二进制文件。这些必须手动添加。文件名上的要求(例如Requires: /usr/bin/sendmail
)也被忽略,并且它们也不可移植,因为某些发行版会将其文件放在略有不同的位置。
对于未版本控制Requires:
的常见库包,这些通常总是错误的。他们是在 rpm 构建期间自动添加。在极少数情况下,需要强制执行某个版本,并且必须添加显式版本化要求,主要是在库包上。例如,对此进行了解释http://fedoraproject.org/wiki/Packaging:Guidelines#Explicit_Requires
答案2
决不。对不起。您无法在 RPM 内执行有条件的 deps 列表。执行此操作的唯一方法是从规范文件中删除所有发行版特定的 dep。
答案3
不,这不是你处理问题的方式。您确实需要为每个发行版构建单独的包。这将需要每个发行版的外观略有不同的规范文件,有时对于发行版的不同版本,您的目标是比当前版本更多。
您的“条件”应该更上一层楼……选择要使用的 RPM,而不是在 RPM 本身内部。如果您愿意,您可以从带有条件的脚本生成这些规范文件,以便为您自动执行此过程,但是当您从规范构建包时,您将需要特定于发行版的规范。