我正在创建一个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