Redhat 如何为RPM依赖项定义或定义逻辑

Redhat 如何为RPM依赖项定义或定义逻辑,redhat,rpm,Redhat,Rpm,我正在创建一个RPM,我需要检查机器上是否安装了Java8版本 问题是Oracle提供了版本绑定的RPM,其名称类似于jdk1.8.0_45,而Redhat提供的RPM的名称类似于java-Oracle-8。我真的不在乎安装了哪一个,只要安装了其中一个,那么如何在Java8上定义或条件逻辑呢?(注意这是针对RHEL5或RHEL6目标的,因此不能使用新型功能)据我所知,RPM没有此类功能。您不能声明这样的需求 也就是说,RPM确实具有“提供”的概念,它被用作粗略的等价物 任何包都可以提供:一些功能

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


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

据我所知,RPM没有此类功能。您不能声明这样的需求

也就是说,RPM确实具有“提供”的概念,它被用作粗略的等价物

任何包都可以
提供:一些功能
,然后其他包可以
要求:一些功能
要求的方式相同:

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

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


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

FYI-Dependence中的布尔逻辑称为“富依赖性”,目前正在RPM中引入,可能会在Fedora 24中实现。见

谢谢,这有助于我证实我的怀疑。问题是我不需要
/usr/bin/java
,我需要在系统的某个地方安装一个特定版本的java,而软件包甚至不同意安装在哪里。CentOS openjdk 1.7.0软件包提供
java7
jre7
,等等(必要时提供版本号)。我假设1.8.0包也这样做。希望各种oracle软件包都能提供类似的东西,您可以信赖。不,oracle不会这样做。实际上RHEL也不提供
javaX
二进制文件:-(你能给我看一下
rpm-qp-为你感兴趣的Oracle和RHEL java rpm提供
输出吗?太好了!它们都提供
java-1.8.0
,我可以使用:-)