나는 다음 버전 번호로 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에서 테스트되었습니다. 필수 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
중복되고 혼란스럽습니다 . 이로 인해 버전과 시대 번호가 무시되는 이유가 확실하지 않지만 거기에 있습니다.yum
my-package
my-package
yum이 예상대로 버전 제어 요구 사항을 준수하도록 제공되는 콘텐츠 목록에서 패키지 이름을 제거합니다.
내 생각엔 이것이 의 버그일지도 모른다 yum
. dnf
동일한 기능을 수행 하는지 테스트하지 않았습니다 .