rpm 条件依赖要求

rpm conditional dependency requirements

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

在较新的 OS 版本上 运行 软件中没有任何具体的内容可以阻止它,但我在依赖性要求方面遇到了问题。 运行 软件的脚本需要访问 semanage (/usr/sbin/semanage)。在 Redhat 6 和 7 上,它由 policycoreutils-python 包提供,并在构建 rpm 时作为要求参数给出。从 Redhat 8 开始,该软件包已重命名为 policycoreutils-python-utils(请参阅此 link,第 8.6.2 节)。

从 rpm 4.13 开始,支持布尔依赖项(请参阅 here),这将使这个修复变得容易,因为我可以做类似 -R (policycoreutils-python or policycoreutils-python-utils) 的事情,但将 rpm-build 包从它当前的 4.8 版本是一个主要的痛苦,因为它被另一个团队用于另一个软件。我还需要保持它是一个独立于发行版的 rpm,因此不能为更新版本的 OS.

使用不同版本的 rpm

所以,我的问题:

1) 是否有其他方法可以在 spec 文件中使用旧的 rpm 4.8 版本进行条件要求?

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

更新:rpm 将在 RH 6 机器上构建一次,应该可以在 RH 7 和 8 上运行。

如果您为所有平台构建一个 rpm

你可以依赖semanage本身:

Requires: /usr/sbin/semanage

yumdnfrpm 应该足够聪明来解决这个问题。

如果您在相应的目标上构建每个 rpm:

您可以使用 %rhel_version 宏,参见 https://en.opensuse.org/openSUSE:Build_Service_cross_distribution_howto :

%if 0%{?rhel_version} < 800
Requires: policycoreutils-python
%else
Requires: policycoreutils-python-utils
%endif