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正しくインストールしましたか?正しい依存関係がありますか?

おすすめ記事