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
und