Yum은 최고 버전에 대한 "필요"를 존중하지 않습니다. yum이 생각하는 종속성 버전을 디버깅하고 확인하는 방법은 무엇입니까?

Yum은 최고 버전에 대한 "필요"를 존중하지 않습니다. 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이것을 시도했지만 성공하지 못했습니다.

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에서 테스트되었습니다. 필수 rpmdevtoolscreaterepo설치되어 있습니다.

#/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이 예상대로 버전 제어 요구 사항을 준수하도록 제공되는 콘텐츠 목록에서 패키지 이름을 제거합니다.

내 생각엔 이것이 의 버그일지도 모른다 yum. dnf동일한 기능을 수행 하는지 테스트하지 않았습니다 .

관련 정보