Yumはトップバージョンの「必要」を尊重しません。 yumが考える依存関係のバージョンをデバッグして確認する方法は?

Yumはトップバージョンの「必要」を尊重しません。 yumが考える依存関係のバージョンをデバッグして確認する方法は?

私は次のバージョン番号でRPMパッケージを管理しています。

my-package-1.1.1-1、、、、。my-package-1.1.2-1​​my-package-1.1.3-1my-package-1.2.0-0.alpha01.1

my-package < 1.2これで、バージョン1.1のみをインストールするために別の依存関係パッケージを入手したいと思います。yumただし、my-package-1.2.0-0.alpha01次のようにインストールするとき

yum私のパッケージのバージョンをどのように確認しますか?

要件を含むパッケージの仕様は次のとおりです。

Name:       test
Version:    1
Release:    1
Requires: my-package < 1.2

%description
%prep
%build
%install
%files

私もRequires: my-package < 0:1.2これを試しましたが、成功しませんでした。

1.2のrpm仕様はmy-package次のように始まります。

Name: my-package
Provides: my-package
Version: 1.2.0
Release: 0.alpha01.1%{?dist}

バージョン 1.1 の場合:

Name: my-package
Provides: my-package
Version: 1.1.3
Release: 1%{?dist}

Version:別のバージョン番号を設定するには、行を変更してください。設定されたエポックがないので、デフォルトは0:

rpmdev-vercmp "1.2.0-0.alpha01.1" "1.2"正しく返してください1.2.0-0.alpha01.1 > 1.2。だから番号付けが間違っているとは思わない。

奇妙なことは、Epoch: 200 バージョン1.2を設定my-packageし、バージョン200:1.2.0をインストールするようにtestパッケージを設定しても同じことです。my-package < 10:1.2

問題は、yumビルドされたバージョンが正しく解析されないことですmy-package.rpm。どうやって確認しますか?

編集1

以下は、使用されたいくつかの診断ですrpm -q。バージョン依存関係が正しいと思いますか? :

$ rpm -qp  --requires test-1-1.x86_64.rpm 
my-package < 1.2
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1


$ rpm -qp --provides my-package-1.1.3-1.noarch.rpm 
my-package
my-package = 1.1.3-1

$ rpm -qp --provides my-package-1.2.0-0.alpha01.1.noarch.rpm 
my-package
my-package = 1.2.0-0.alpha01.1

ステップをコピーするには編集してください!

コピーコードを作ってみました!ホームディレクトリで実行されているCentos7でテストされました。必須rpmdevtoolsとしてインストールさcreaterepoれています。

#/bin/bash
echo "Name:       my-package
Provides:   my-package
Version:    \${VERSION}
Release:    \${RELEASE}
Summary:    NA
License:    NA

%description
%prep
%build
%install
%files
" | tee template.spec

echo "Name:       has-requirement
Version:    1
Release:    1
Summary:    NA
License:    NA

Requires: my-package < 1.2

%description
%prep
%build
%install
%files
" | tee has-requirement.spec

vers=("1.1.1" "1.1.2" "1.1.3" "1.2.0")


rpmdev-setuptree
for v in ${vers[@]}; do
    VERSION=$v RELEASE="1" envsubst '$${VERSION} $${RELEASE}' < template.spec > my-package.spec
    rpmbuild -ba my-package.spec
done
rpmbuild -ba has-requirement.spec

repodir="$PWD/repo"
mkdir -p $repodir
mv ./rpmbuild/RPMS/x86_64/my-package* $repodir
createrepo $repodir

echo "[temp]
name=temp repo
baseurl=file://$repodir
enabled=1
gpgcheck=0" | sudo tee /etc/yum.repos.d/temp.repo

sudo yum clean all; sudo rm -rf /var/cache/yum
sudo yum search my-package --show-duplicates
sudo yum localinstall --assumeno $PWD/rpmbuild/RPMS/x86_64/has-requirement-1-1.x86_64.rpm

答え1

rpmテストパッケージの要件を教えてください。

インストールされている場合:

rpm -q test --requires

インストールされていない場合:

rpm -qp /path/to/test.rpm --requires

これが役に立ちます。

エラーは本当に奇妙です。test.rpm正しくインストールしましたか?正しい依存関係がありますか?

答え2

依存関係のバージョンを認識しないyumの問題に直面している他の人にとって、これは依存関係の解決策を修正した方法です。

私の依存関係パッケージでは、rpm仕様ヘッダは次から始まります。

Name:       my-package
Provides:   my-package
Version:    1.2.0
Release:    0

この行はパッケージのすべてのバージョンが利用可能であるため、重複してProvides: my-package混乱しています。このため、バージョンと時代番号が無視される理由はわかりませんが、そこにあります。yummy-package

my-packageyum が期待どおりにバージョン管理要件に準拠するために提供されるコンテンツのリストからパッケージ名を削除します。

私の考えにはこれがのバグかもしれませんyumdnf同じ機能を実行しているかどうかテストしていません。

関連情報