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?

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


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

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

Sie müssen --installed --recursiveam Ende nur das zurückgeben, was tatsächlich installiert ist und nicht aus den Repositorys ziehen
Hashbrown


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

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).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.