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