Situação
Eu tenho um RPM que usa semanage
(ferramenta de gerenciamento de política SELinux) e restorecon
(ferramenta de configuração de contexto SELinux) nas etapas de pós-instalação e pré-instalação.
Infelizmente, entre RHEL 6/7 e 8, o pacote contendo essas ferramentas foi renomeado de policycoreutils-python
para policycoreutils-python-utils
.
Um arquivo de especificação de trabalho para o RHEL8 RPM contém:
Requires(post): policycoreutils-python-utils
Requires(preun): policycoreutils-python-utils
E um arquivo de especificação de trabalho para o RHEL6/7 RPM contém:
Requires(post): policycoreutils-python
Requires(preun): policycoreutils-python
O que eu tento alcançar
Eu poderia viver com os dois arquivos de especificação/dois RPMs, um para cada tipo de sistema operacional, mas sou preguiçoso e quero uma especificação que atenda a todos.
O que eu tentei
Li sobre a condicional do SO %{rhel}
, contendo a versão do SO. O seguinte deve funcionar, de acordo com o manual 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
Se eu verificar o valor da %{rhel}
variável em meus sistemas de destino, recebo o que espero:
centos7-system» rpm --eval '%{rhel}'
7
centos8-system» rpm --eval '%{rhel}'
8
A instalação deste RPM em uma instância do CentOS 6/7 funciona bem. No entanto, após a instalação do RPM independente do sistema operacional em uma instância do CentOS 8, recebo:
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
Saída de depuração:
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)
Parece que os Requires
para o cenário CentOS 6/7 são usados, e não os do cenário CentOS 8.
O que eu não estou vendo aqui? Existe algo que eu possa fazer para depurar isso?