Elenco dei pacchetti in Yum che dipendono da un altro pacchetto installato


49

Sto cercando di installare un pacchetto RPM di terze parti su RHEL5 che dipende dalla versione 3.4 di sqlite. Secondo Yum ho già installato 3.3.6.

C'è un modo per elencare i pacchetti installati che dipendono da sqlite 3.3.6?

Risposte:


47

L'opzione rpm che desideri è:

rpm -q --whatrequires sqlite

Modificato: aggiunto - installato per discussione in altre risposte / commenti

Modificato: rimosso - installato in quanto è un'opzione non valida per rpm


3
Inoltre, repoquerypuò essere utilizzato per generare una struttura ad albero gradevole di tutti i pacchetti che richiedono un pacchetto particolare, ad esempio:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
Non sono d'accordo sul fatto che questa risposta sia affidabile, certamente non su CentOS 7.x. Per provare, installa ImageMagick. Le librerie OpenEXR verranno anche installate poiché ImageMagick dipende da esso. Ora esegui rpm -q --questo richiede OpenEXR-libs e il ritorno è "nessun pacchetto richiede OpenEXR-libs" che è INCORRETTO. Ora esegui "repoquery -q --installed --whatrequires OpenEXR-libs" e restituisce correttamente "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64". @Solo la risposta di un ragazzo a caso qui sotto dovrebbe essere la risposta corretta qui.
Pancho,

6
--installedè un'opzione per repoqueryma non è valida per rpm.
Dan Rice,

37

Risposta

repoquery -q --installed --whatrequires sqlite

spiegazioni

rpm -q --whatrequires sqlite riporta solo dipendenze dai nomi dei pacchetti.

Al contrario, repoqueryagisce come segue (dalle manpage):

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

Esempio

Prendiamo il pacchetto libdb.

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

Nessun pacchetto dipende libdb, quindi dovremmo essere in grado di rimuoverlo senza problemi. Però...

# 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

Come puoi vedere, alcuni altri pacchetti non dipendevano direttamente dal pacchetto, ma dal file libdb-5.3.so()(64bit)fornito da esso.

Infine, ecco il vero elenco di pacchetti a seconda di 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
Questa risposta è migliore della risposta accettata
Pancho,

11

Per dnf (nuova versione di yum) puoi provare con il comando wrapper repoquery:

dnf repoquery --whatrequires sqlite

Se non è disponibile è possibile installarlo con il comando:

dnf -y install dnf-plugins-core

È necessario --installed --recursive, alla fine in modo che restituisce solo ciò che è effettivamente installato e non estrae dai repository
Hashbrown

7

Puoi anche provare questo comando.

repoquery --whatrequires sqlite

Ho ricevuto questo comando da ServerFault e anche dai forum Fedora.


Questo ha restituito pacchetti che non avevo installato.
ore 2

3

Penso che ciò che vuoi veramente sapere sia "quali sono i pacchetti che richiedono sqlite-3.3.6, ma non saranno soddisfatti di sqlite-3.4.z" ... e l'unico buon modo per scoprirlo, è quello di Provalo. Piace:

echo | yum upgrade sqlite

1

Come ha detto Wes Hardaker , un buon metodo integrato è l'utilizzo rpm -q --whatrequires <package>. Il fatto è che rpmopera su funzionalità per la risoluzione delle dipendenze, non semplicemente sui pacchetti, come ad esempio dpkgnella famiglia di distribuzioni Linux Debian / Ubuntu. Come altri hanno notato, semplicemente facendo rpm -q --whatrequires sqlitenon racconta l'intera storia, quindi perché alcuni hanno suggerito di utilizzare repoquery. repoquery, tuttavia, non è installato di default in RHEL / CentOS 7 minimal (forse anche sul desktop?), quindi potrebbe non essere disponibile per tutti.

Un utente può fare rpm -q --provides <pkgname>per vedere tutte le funzionalità fornite da un pacchetto, quindi utilizzare rpm -q --whatrequires <capability>per vedere quali pacchetti installati richiedono tale funzionalità. Queste informazioni possono essere interrogate in modo succinto usando un one-liner BASH (separato qui in due righe per lunghezza):

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

Questo utilizza solo le opzioni integrate in rpmse stesso e quindi non richiede l'installazione di pacchetti aggiuntivi (ad esempio yum-utilsin CentOS 7, che è il pacchetto che contiene repoquery).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.