Yum 不尊重 Requires
最高版本。如何調試和檢查 yum 認為的 依賴版本是什麼?
我管理一個 RPM 包,並且有如下編號的版本:
my-package-1.1.1-1
,my-package-1.1.2-1
,my-package-1.1.3-1
,my-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
沒有成功。
my-package
1.2的 rpm 規範以: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
並將test
包設置為要求my-package < 10:1.2
它安裝 200:1.2.0 版本。我認為問題在於
yum
沒有正確解析 buildmy-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
為了其他人面臨 yum 無法辨識依賴版本的問題,這就是我修復依賴解析的方法。
在我的依賴包中,rpm 規範標頭以:
Name: my-package Provides: my-package Version: 1.2.0 Release: 0
該行
Provides: my-package
是多餘的並且令人困惑yum
,因為它意味著包的所有版本都提供my-package
. 我不完全知道為什麼這會導致版本號和紀元號被忽略,但是你去吧。從它提供的東西列表中刪除
my-package
包名稱,使 yum 符合預期的版本控制要求。我認為這可能是
yum
. 我沒有測試是否dnf
做同樣的事情。
您可以要求
rpm
告訴您測試包的要求:如果已安裝:
rpm -q test --requires
如果未安裝:
rpm -qp /path/to/test.rpm --requires
這可以幫助你。
你的錯誤確實很奇怪;你確定
test.rpm
正在安裝正確的嗎?有正確的依賴?