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 yum
die 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.2
ohne Erfolg versucht .
Die Drehzahlangabe für my-package
1.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-package
und das test
Paket so eingestellt habe, dass my-package < 10:1.2
es die 200: 1.2.0-Version installiert.
Ich denke, das Problem ist, dass yum
die my-package.rpm
Version 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 rpmdevtools
und createrepo
installiert 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 --assumeno
undFür alle anderen, die mit dem Problem konfrontiert sind, dass sie keine Abhängigkeitsversionen erkennen, habe ich die Abhängigkeitsauflösung auf diese Weise korrigiert.
In meinem Abhängigkeitspaket begann der Header der rpm-Spezifikation mit:
Die Leitung
Provides: my-package
war redundant und verwirrend,yum
da alle Versionen des Pakets bereitgestellt wurdenmy-package
. Ich weiß nicht genau, warum dies dazu führte, dass Versions- und Epochennummern ignoriert wurden, aber los geht's.Durch das Entfernen des
my-package
Paketnamens aus der Liste der bereitgestellten Inhalte haben Sie die Versionsanforderungen wie erwartet eingehalten.Ich denke, das ist wahrscheinlich ein Bug in
yum
. Ich habe nicht getestet, obdnf
es dasselbe tut.quelle
yum
manchmal seltsam verhältProvides
undObsoletes
... pass auf mit denen auf :)