Yum respektiert die maximale Version von "Requires" nicht. Wie kann ich debuggen und überprüfen, was Ihrer Meinung nach die Abhängigkeitsversion ist?

1

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
Jenny
quelle

Antworten:

2

Sie können rpmnach der Anforderung für Ihr Testpaket fragen :

wenn es installiert ist:

rpm -q test --requires

wenn es nicht installiert ist:

rpm -qp /path/to/test.rpm --requires

das könnte dir helfen.

Dein Fehler ist in der Tat seltsam; Sind Sie sicher, dass das richtige test.rpminstalliert wird? mit der richtigen abhängigkeit?

Chris Maes
quelle
Du hast Recht, ich hatte vergessen, es zu benutzen rpm --provides, aber leider gibt es mir keine Hinweise mehr. Ich überprüfe die Installation mit yum localinstall --assumenound
sehe
1

Fü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:

Name:       my-package
Provides:   my-package
Version:    1.2.0
Release:    0

Die Leitung Provides: my-packagewar redundant und verwirrend, yumda alle Versionen des Pakets bereitgestellt wurden my-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-packagePaketnamens 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, ob dnfes dasselbe tut.

Jenny
quelle
Ich bin mir nicht sicher, ob dies ein Fehler ist, aber ich stimme zu, dass sich yummanchmal seltsam verhält Providesund Obsoletes... pass auf mit denen auf :)
Chris Maes