Ich verwalte ein RPM-Paket und es gibt Versionen, die wie folgt nummeriert sind:
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.
Ich versuche jetzt, ein anderes Paket zu bekommen, von dem es abhängt my-package < 1.2, dass nur eine 1.1-Version installiert ist. Wenn ich jedoch mit installiere yum, wird immer die neueste Version ( my-package-1.2.0-0.alpha01) installiert, anstatt eine, die die Anforderungen erfüllt.
Wie kann ich yumdie Version meines Pakets überprüfen ?
Hier ist die Spezifikation für das Paket mit der Anforderung:
Name: test
Version: 1
Release: 1
Requires: my-package < 1.2
%description
%prep
%build
%install
%files
Ich habe es auch Requires: my-package < 0:1.2ohne Erfolg versucht .
Die Drehzahlangabe für my-package1.2 beginnt mit:
Name: my-package
Provides: my-package
Version: 1.2.0
Release: 0.alpha01.1%{?dist}
und für die 1.1 Versionen:
Name: my-package
Provides: my-package
Version: 1.1.3
Release: 1%{?dist}
Nur die Version:Zeile wird geändert, um verschiedene Versionsnummern festzulegen. Es ist keine Epoche festgelegt, daher gehe ich davon aus, dass dies standardmäßig der Fall ist 0:.
rpmdev-vercmp "1.2.0-0.alpha01.1" "1.2"richtig kehrt zurück 1.2.0-0.alpha01.1 > 1.2. Ich glaube nicht, dass die Nummerierung falsch ist.
Komisch: Auch wenn ich Epoch: 200 auf meine 1.2-Version gesetzt my-packageund das testPaket so eingestellt habe, dass my-package < 10:1.2es die 200: 1.2.0-Version installiert.
Ich denke, das Problem ist, dass yumdie my-package.rpmVersion des Builds nicht richtig analysiert wird . Wie kann ich überprüfen?
EDIT 1
Hier sind einige Diagnosen rpm -q, bei denen es so aussieht, als ob die Versionsabhängigkeiten korrekt sind:
$ 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
EDIT Reproduktionsschritte!
Ich habe Reproduktionscode gemacht! Getestet auf Centos7 von zu Hause aus. Benötigt rpmdevtoolsund createrepoinstalliert werden.
#/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
rpm --provides, aber leider gibt es mir keine Hinweise mehr. Ich überprüfe die Installation mityum localinstall --assumenound