情况
我有一个在安装后和卸载前阶段使用semanage
(SELinux 策略管理工具)和restorecon
(SELinux 上下文配置工具)的 RPM。
不幸的是,在 RHEL 6/7 和 8 之间,包含这些工具的软件包从 重命名policycoreutils-python
为policycoreutils-python-utils
.
RHEL8 RPM 的工作规范文件包含:
Requires(post): policycoreutils-python-utils
Requires(preun): policycoreutils-python-utils
RHEL6/7 RPM 的工作规范文件包含:
Requires(post): policycoreutils-python
Requires(preun): policycoreutils-python
我试图达到的目标
我可以使用两个规范文件/两个 RPM,每个操作系统类型一个,但我很懒,我想要一个可以服务所有的规范。
我试过的
我阅读了有关 OS 条件%{rhel}
的信息,其中包含 OS 版本。根据 RPM 手册,以下应该可以工作:
%if %{rhel} < 8
Requires(post): policycoreutils-python
Requires(preun): policycoreutils-python
%endif
%if %{rhel} == 8
Requires(post): policycoreutils-python-utils
Requires(preun): policycoreutils-python-utils
%endif
如果我%{rhel}
在目标系统上检查变量的值,我会得到我所期望的:
centos7-system» rpm --eval '%{rhel}'
7
centos8-system» rpm --eval '%{rhel}'
8
在 CentOS 6/7 实例上安装此 RPM 可以正常工作。但是,在 CentOS 8 实例上安装独立于操作系统的 RPM 后,我得到:
centos8-system» dnf install my-1.26-0.x86_64.rpm
<...>
Error:
Problem: conflicting requests
- nothing provides policycoreutils-python needed by my-1.26-0.x86_64
调试输出:
centos8-system» rpm -ivvvh my-1.26-0.x86_64.rpm 2>&1 | grep Requires
D: Requires: /bin/bash YES (db files)
D: Requires: /bin/sh YES (db files)
D: Requires: /bin/sh YES (cached)
D: Requires: /bin/sh YES (cached)
D: Requires: /usr/bin/env YES (db files)
D: Requires: /usr/bin/perl YES (db files)
D: Requires: /usr/bin/php YES (db files)
D: Requires: nagios-plugins NO
D: Requires: perl(Getopt::Long) YES (db provides)
D: Requires: perl(strict) YES (db provides)
D: Requires: policycoreutils-python NO
D: Requires: policycoreutils-python NO (cached)
D: Requires: policycoreutils-python NO
D: Requires: rpmlib(CompressedFileNames) <= 3.0.4-1 YES (rpmlib provides)
D: Requires: rpmlib(FileDigests) <= 4.6.0-1 YES (rpmlib provides)
D: Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 YES (rpmlib provides)
D: Requires: rpmlib(PayloadIsXz) <= 5.2-1 YES (rpmlib provides)
似乎使用Requires
了 CentOS 6/7 方案,而不是 CentOS 8 方案。
我在这里没有看到什么?我能做些什么来调试这个吗?