Linux rpm条件依赖要求

Linux rpm条件依赖要求,linux,rpm,rpmbuild,Linux,Rpm,Rpmbuild,我正在开发一个软件,需要在更新版本的Redhat上运行。它目前在6和7上运行良好,但现在需要在Redhat 8上安装和运行 软件中没有任何特定的东西会阻止它在较新的操作系统版本上运行,但我在依赖项要求方面遇到了问题。运行软件的脚本需要访问semanage(/usr/sbin/semanage)。在Redhat 6和7上,这是由policycoreutils python包提供的,并在构建rpm时作为需求参数提供。从Redhat 8开始,该包已重命名为policycoreutils python

我正在开发一个软件,需要在更新版本的Redhat上运行。它目前在6和7上运行良好,但现在需要在Redhat 8上安装和运行

软件中没有任何特定的东西会阻止它在较新的操作系统版本上运行,但我在依赖项要求方面遇到了问题。运行软件的脚本需要访问semanage(/usr/sbin/semanage)。在Redhat 6和7上,这是由policycoreutils python包提供的,并在构建rpm时作为需求参数提供。从Redhat 8开始,该包已重命名为policycoreutils python utils(见第8.6.2节)

从rpm 4.13开始,就支持布尔依赖项(请参阅),这将使修复变得很容易,因为我可以做一些类似于
-R(policycoreutils-python或policycoreutils-python-utils)
的事情,但是从当前的4.8版本更改rpm构建包是一个很大的难题,因为另一个团队将其用于另一个软件。我还需要保持它独立于发行版的rpm,这样新版本的操作系统就不能有不同版本的rpm

所以,我的问题是:

1) 对于较旧的rpm 4.8版本,是否有其他方式在规范文件中具有条件要求

2) 如果我要获得批准将rpm升级到最新的4.15版本,那么在安装了较旧rpm的目标系统上是否可能存在任何问题,例如,不理解条件

更新:rpm将在RH 6机箱上构建一次,并应在RH 7和RH 8上运行。

如果为所有平台构建一个rpm 您可以依赖于
semanage
本身:

Requires: /usr/sbin/semanage
yum
dnf
rpm
应该足够聪明来解决这个问题

如果在相应的目标上构建每个rpm: 您可以使用
%rhel\u版本
宏,请参阅:

%如果0%{?rhel_版本}<800
需要:policycoreutils python
%否则
需要:policycoreutils python utils
%恩迪夫
如果为所有平台构建一个rpm 您可以依赖于
semanage
本身:

Requires: /usr/sbin/semanage
yum
dnf
rpm
应该足够聪明来解决这个问题

如果在相应的目标上构建每个rpm: 您可以使用
%rhel\u版本
宏,请参阅:

%如果0%{?rhel_版本}<800
需要:policycoreutils python
%否则
需要:policycoreutils python utils
%恩迪夫

这对我不起作用,尽管阅读文档时我看不出为什么不起作用。我不得不使用“%if 0%{?rhel}>=8”,因为我的系统上没有定义“rhel_version”宏。在我本地的centos 6虚拟机上构建rpm,在Redhat的三个版本上的rpm-qpR的输出总是产生“policycoreutils python”作为依赖项。我认为只有在不同的操作系统上构建rpm时,这种方法才有效。我已经更新了这个问题,以明确我想要一个内置RPM来支持3个OS版本。非常感谢。您知道这是否也适用于库,例如,在RH 8中,openssl更改为compat-openssl10。对于/usr/lib64/libssl和/usr/lib64/libcrypto.So,需要一个“Requires”,所以我似乎可以在libssl.So.10上使用一个需求。唯一的问题是它试图采用错误的架构。e、 g.Requires:libssl.so.10尝试拉取i686版本的compat-openssl10,但Requires:compat-openssl10拉取x86\u 64如果您的系统安装了正确的软件包,您可以运行
rpm-q--provides
,查看此软件包提供了什么,你可以根据自己的需要选择其中一种。虽然阅读了文档,但我不明白为什么它不起作用。我不得不使用“%if 0%{?rhel}>=8”,因为我的系统上没有定义“rhel_version”宏。在我本地的centos 6虚拟机上构建rpm,在Redhat的三个版本上的rpm-qpR的输出总是产生“policycoreutils python”作为依赖项。我认为只有在不同的操作系统上构建rpm时,这种方法才有效。我已经更新了这个问题,以明确我想要一个内置RPM来支持3个OS版本。非常感谢。您知道这是否也适用于库,例如,在RH 8中,openssl更改为compat-openssl10。对于/usr/lib64/libssl和/usr/lib64/libcrypto.So,需要一个“Requires”,所以我似乎可以在libssl.So.10上使用一个需求。唯一的问题是它试图采用错误的架构。e、 g.Requires:libssl.so.10尝试拉取i686版本的compat-openssl10,但Requires:compat-openssl10拉取x86\u 64如果您的系统安装了正确的软件包,您可以运行
rpm-q--provides
查看此软件包提供的内容,您可能可以根据需要选择其中一个。