状態
インストール後およびアンインストール前の手順では、semanage
(SELinuxポリシー管理ツール)と(SELinuxコンテキスト設定ツール)を使用するRPMがあります。restorecon
残念ながら、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
私が達成したいこと
私できる2つの仕様ファイル/ 2つのRPM(各OSタイプごとに1つ)を使用していますが、怠惰で誰にでも役立つ1つの仕様が必要です。
私が試したこと
%{rhel}
OSバージョンを含む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インスタンスにOS独立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 8シナリオではなくCentOS 6/7シナリオを使用したようです。
ここで私が見ていないものは何ですか?これをデバッグするために私ができることはありますか?
関連コンテンツとソース
答え1
条件を省略し、policycoreutils-pythonパッケージの代わりにsemanage実行可能ファイルを使用できます。
Requires(post): %{_sbindir}/semanage
Requires(post): %{_sbindir}/restorecon
Fedoraをご覧くださいdokuwiki.spec例えば。パッケージによる例は次のとおりです。bdii仕様。
答え2
SPECファイルの条件を評価しています。立てる時間。したがって、SPECファイルに次のものが含まれている場合:
%if %{rhel} < 8
Requires(post): policycoreutils-python
%endif
%if %{rhel} == 8
Requires(post): policycoreutils-python-utils
%endif
その後、RHEL 7でパッケージをビルドすると、次のような結果が表示されます。
Requires(post): policycoreutils-python
この Requires は、RHEL 8 にパッケージをインストールする場合にも使用されます。パッケージはビルド後に再評価されません。
バイナリパッケージだけが必要な場合は、Andreasが指摘したようにリポジトリが必要です。企業向けソリューションは次のとおりです。
Release: 1%{?dist}
...
%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
以下を使用してさまざまなプラットフォーム用にビルドします。
mock -r epel-7-x86_64 my.src.rpm
mock -r epel-8-x86_64 my.src.rpm
最初の命令は生産しmy-1.0-1.el7
て要求しますpolicycoreutils-python
が、2番目の命令は生産しmy-1.0-1.el8
て要求しますpolicycoreutils-python-utils
。
ちなみに、条件は次のように作成する必要があります。
%if 0%{?rhel} < 8
マクロが定義されていない場合、構文エラーを防止します。