如何为RPM依赖定义OR逻辑



我正在创建一个RPM,我需要检查机器上是否安装了Java 8版本。

问题是Oracle提供的版本绑定rpm的名称像jdk1.8.0_45,而Redhat提供的rpm的名称像java-oracle-8。我真的不关心安装哪一个,只要其中一个被安装,那么我如何在Java 8上定义OR条件逻辑?(注意,这是针对RHEL5或RHEL6目标的,因此不能使用新特性)

据我所知,RPM没有这样的功能。你不能像这样声明一个需求。

话虽这么说,RPM所拥有的,也就是与此大致等价的,是"提供"的概念。

任何一个包可以Provide: some_capability,然后其他包可以Require: some_capability,同样的方式可以Require: <some_package>

如果绝对有必要,您也可以Require: /some/file/path(尽管尽可能避免这样做)。

因此,您需要比较您所关心的rpm所提供的功能,并寻找您可以依赖的任何公共功能。希望你们能从中找到共同点。如果没有,那么你别无选择,只能在你的RPM中删除这个需求,并希望他们有它,并在运行时检测它(也许是一个启动脚本)。

(从技术上讲,如果在某个地方找不到java,您也可以在%pre期间进行检查并退出失败,但我强烈建议不要这样做。)

仅供参考——依赖中的布尔逻辑被称为"富依赖",目前正在被引入到RPM中,可能会在Fedora 24中出现。见http://lists.rpm.org/pipermail/rpm-maint/2014-February/003666.html

最新更新