Auflisten von Paketen in Yum, die von einem anderen installierten Paket abhängen

48

Ich versuche, ein RPM-Paket eines Drittanbieters auf RHEL5 zu installieren, das von der Version 3.4 von sqlite abhängt. Laut Yum habe ich bereits 3.3.6 installiert.

Gibt es eine Möglichkeit, die installierten Pakete aufzulisten, die von SQLite 3.3.6 abhängen?

Reich
quelle

Antworten:

47

Die gewünschte rpm-Option ist:

rpm -q --whatrequires sqlite

Bearbeitet: hinzugefügt - installiert pro Diskussion in anderen Antworten / Kommentaren

Bearbeitet: entfernt - installiert, da dies eine ungültige Option für rpm ist

Wes Hardaker
quelle
3
Weiterhin repoquerykann verwendet werden, um eine schöne baumartige Struktur aller Pakete zu generieren, die ein bestimmtes Paket erfordern, zum Beispiel:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp
3
Ich bin nicht der Meinung, dass diese Antwort zuverlässig ist - schon gar nicht unter CentOS 7.x. Installieren Sie zum Testen ImageMagick. OpenEXR-libs werden ebenfalls installiert, da ImageMagick davon abhängt. Führen Sie nun rpm -q - aus, was OpenEXR-libs erfordert, und die Rückgabe lautet "kein Paket erfordert OpenEXR-libs", was INCORRECT ist. Führen Sie nun "repoquery -q --installed --whatrequery OpenEXR-libs" aus und es wird korrekt "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64" zurückgegeben. @ Nur die Antwort eines zufälligen Typen unten sollte hier die richtige Antwort sein.
Pancho
6
--installedist eine Option für repoquery, ist aber ungültig für rpm.
Dan Rice
36

Antworten

repoquery -q --installed --whatrequires sqlite

Erklärungen

rpm -q --whatrequires sqlite meldet nur Abhängigkeiten von Paketnamen.

Im Gegenteil, repoqueryhandelt wie folgt (von Manpages):

   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.

Beispiel

Lass uns ein Paket nehmen libdb.

# rpm -q --whatrequires libdb
no package requires libdb

Kein Paket hängt davon ab libdb, daher sollten wir es problemlos entfernen können. Jedoch...

# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Wie Sie sehen, waren einige andere Pakete nicht direkt vom Paket abhängig, sondern von libdb-5.3.so()(64bit)der von ihm bereitgestellten Datei .

Schließlich ist hier die reale Liste der Pakete abhängig von libdb:

# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
Elouan Keryell-Even
quelle
1
Diese Antwort ist besser als die akzeptierte Antwort
Pancho
11

Für dnf (neue Version von yum) können Sie den Befehl repoquery wrapper verwenden:

dnf repoquery --whatrequires sqlite

Wenn es nicht verfügbar ist, können Sie es mit folgendem Befehl installieren:

dnf -y install dnf-plugins-core
teoincontatto
quelle
Sie müssen --installed --recursiveam Ende nur das zurückgeben, was tatsächlich installiert ist und nicht aus den Repositorys ziehen
Hashbrown
7

Sie können diesen Befehl auch ausprobieren.

repoquery --whatrequires sqlite

Ich habe diesen Befehl von ServerFault und auch von den Fedora-Foren erhalten.

Pred
quelle
Dies gab Pakete zurück, die ich nicht installiert hatte.
2.
3

Ich denke, was Sie wirklich wissen wollen, ist "Was sind die Pakete, die sqlite-3.3.6 erfordern, aber mit sqlite-3.4.z nicht zufrieden sein werden" ... und der einzige gute Weg, dies herauszufinden, ist zu Versuch es. Mögen:

echo | yum upgrade sqlite
James Antill
quelle
1

Wie Wes Hardaker sagte , ist die Verwendung einer guten eingebauten Methode rpm -q --whatrequires <package>. Die Sache ist, rpmarbeitet mit Funktionen zur Auflösung von Abhängigkeiten, nicht nur mit Paketen, wie dies z. B. dpkgin der Debian / Ubuntu-Familie von Linux-Distributionen der Fall ist. Wie andere angemerkt haben, rpm -q --whatrequires sqliteerzählt das einfache Tun nicht die ganze Geschichte, weshalb einige vorgeschlagen haben, es zu verwenden repoquery. repoqueryIn RHEL / CentOS 7 minimal ist es jedoch nicht standardmäßig installiert (möglicherweise auch auf dem Desktop?), sodass es möglicherweise nicht für alle verfügbar ist.

Ein Benutzer kann rpm -q --provides <pkgname>alle Funktionen eines Pakets anzeigen und dann anhand der rpm -q --whatrequires <capability>installierten Pakete ermitteln, welche Funktionen für dieses Paket erforderlich sind. Diese Informationen können mit einem BASH-Einzeiler (hier zweizeilig) kurz abgefragt werden:

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

Dies verwendet nur Optionen, die in sich rpmselbst integriert sind, und erfordert daher keine Installation zusätzlicher Pakete (z. B. yum-utilsin CentOS 7, dem Paket, das diese enthält repoquery).

villapx
quelle