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