it-swarm.it

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

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?

53
Rich

L'opzione rpm che desideri è:

rpm -q --whatrequires sqlite

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

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

50
Wes Hardaker

Risposta

repoquery -q --installed --whatrequires sqlite

Spiegazioni

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

Al contrario, repoquery agisce 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 da 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 che dipendono da 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
43

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
12
teoincontatto

Puoi anche provare questo comando.

repoquery --whatrequires sqlite

Ho ricevuto questo comando da ServerFault e anche da The Fedora Forums.

7
FilBot3

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

echo | yum upgrade sqlite
3
James Antill

Come ha detto Wes Hardaker , un buon metodo integrato è usando rpm -q --whatrequires <package>. Il fatto è che rpm opera su capacità per la risoluzione delle dipendenze, non semplicemente sui pacchetti, come ad es. dpkg fa parte della famiglia di distribuzioni Linux Debian/Ubuntu. Come altri hanno notato, semplicemente facendo rpm -q --whatrequires sqlite non racconta l'intera storia, quindi perché alcuni hanno suggerito di usare repoquery. repoquery, tuttavia, non è installato per impostazione predefinita 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 usa 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 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 rpm stesso, quindi non richiede l'installazione di pacchetti aggiuntivi (ad esempio yum-utils in CentOS 7, che è il pacchetto che contiene repoquery).

1
villapx