如何为 RPM 依赖定义 OR 逻辑

how to define OR logic for an RPM dependency

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

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

据我所知,RPM 没有这样的功能。您不能像这样声明要求。

话虽这么说,RPM 确实具有,并且用作与此大致等效的是 "Provides" 的概念。

任何包都可以 Provide: some_capability 然后其他包可以 Require: some_capability 以相同的方式 Require: <some_package>.

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

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

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

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