Wie liste ich RPM-Abhängigkeiten auf?

36

Auf unserem Produktionsserver wird CentOS Release 5.2 (Final) ausgeführt.

Wie kann ich alle Abhängigkeiten eines bereits installierten RPM-Pakets anzeigen / abrufen / auflisten?

Zum Beispiel: SQLite v3.3.6 ist bereits auf dem Server installiert. Ich möchte alle Abhängigkeiten dieses speziellen Pakets sehen.

Hier ist die Ausgabe des Befehls: rpm -qa |grep sqlite

python-sqlite-1.1.7-1.2.1
sqlite-3.3.6-2
sqlite-3.3.6-2

Auch, warum es 2 Einträge von sqlite-3.3.6-2hier auflistet ?

Gnanam
quelle

Antworten:

28
  1. rpm -q --requires somepackagehere

  2. Eines ist das i?86Paket, das andere ist das x86_64Paket.

Ignacio Vazquez-Abrams
quelle
Mein Betriebssystem ist 64-Bit. Können zwei Architekturpakete gleichzeitig auf demselben Server vorhanden sein? Was ist der Zweck / die Notwendigkeit, zwei Architekturpakete gleichzeitig zu haben?
Gnanam
2
RH- / Fedora-abgeleitete Distributionen unterstützen Multiarch , wobei mehrere Pakete, die zu Archs mit "unterschiedlicher Ähnlichkeit" gehören, koexistieren können, um die Ausführung von ausführbaren Dateien zu ermöglichen, die für beide Archs erstellt wurden.
Ignacio Vazquez-Abrams
Leider muss das Paket dafür bereits lokal installiert sein: \
rogerdpack
@ Rogerdpack: Nun ja. Genau darum ging es in der Frage.
Ignacio Vazquez-Abrams
Ja, leider schickt Google "alle direkt hierher", wenn Sie Google "RPM-Abhängigkeiten auflisten" - Google hat die Frage auf den Prüfstand gestellt! Unabhängig davon finden Sie in der Antwort von Davey alle Follower, die diese Funktionalität wünschen.
Rogerdpack
34

Der yum deplistBefehl zeigt Ihnen, welche RPMs Abhängigkeiten sind. Hier ist ein Beispiel für das expectPaket (dies funktioniert auch, wenn Sie das Paket noch nicht lokal installiert haben):

# yum deplist expect
..
..
package: expect.i386 5.43.0-5.1
 dependency: libc.so.6
  provider: glibc.i686 2.5-49
  provider: glibc.i686 2.5-49
 dependency: libtcl8.4.so
  provider: tcl.i386 8.4.13-4.el5
Davey
quelle
Dieser Befehl funktioniert nicht. Vermisse ich etwas oder fehlt etwas in deinem Befehl?
Gnanam
Es tut uns leid, dass ein Leerzeichen fehlt. Der Befehl lautet yum deplist package.
Davey
1
+1 Die Verwendung von YUM hier ist nett, es ist rekursiv und löst Dinge wie 'Perl (COnfig :: Tiny)' oder 'libc.so (64bit)' auf.
Djhaskin987
6

Wenn Sie Ignacios Antwort folgen, können Sie die spezifische Architektur der Pakete folgendermaßen anzeigen:

$ rpm -qa --queryformat "%{NAME} %{ARCH}\n" sqlite
sqlite i686

In meinem Fall habe ich nur das eine i686-Paket ... aber Sie können die mit den Paketen verknüpfte Architektur auf diese Weise erhalten. Wenn Sie interessiert sind, was Sie sonst noch vom --query-Format erhalten können, geben Sie a aus rpm --querytags, um die Liste der verfügbaren Variablen anzuzeigen .

Alex
quelle
1
+1 Ihr Befehl zum Auflisten nach Architektur ist ebenfalls hilfreich.
Gnanam
3

Ich habe ein schnelles Shell-Snippet, das alle installierten Pakete mit ihren Abhängigkeiten ausgibt:

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done
Daeon
quelle
3

Die Leute haben bereits geantwortet mit:

  1. rpm -q --requires PKG
  2. yum -q deplist PKG

Ja, entweder rpmoder yumfunktioniert und beantwortet die Frage richtig. Der Hauptunterschied zwischen rpmund yumbesteht darin, dass yum auch anzeigt, welche Pakete Sie installieren können, um die Bibliotheks- und / oder Dateianforderungen zu erfüllen. Wenn das Paket nicht installiert ist, ist leider keine dieser Methoden hilfreich. Da auf dem Original-Poster bereits angegeben ist, dass das zu überprüfende Paket installiert ist, ist dies ein Stummschaltungspunkt.

Was wäre, wenn Sie das Paket nicht installiert hätten? yumkann immer noch verwendet werden, aber indirekt. Sie können eine Scheininstallation durchführen, indem Sie den Installationsvorgang abbrechen.

printf n  |  yum install PKG  |  grep -- "---> Package"

Hier ist ein Beispiel:

printf n  |  yum install php  |  grep -- "---> Package"
---> Package php.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-cli.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-common.x86_64 0:5.4.16-45.el7 will be installed
---> Package libzip.x86_64 0:0.10.1-8.el7 will be installed
Suave-V
quelle
Brillante Problemumgehung für die Einschränkungen bei der Berichterstellung.
MarkHu