Risposte:
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
--installed
è un'opzione per repoquery
ma non è valida per rpm
.
repoquery -q --installed --whatrequires sqlite
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.
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
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
--installed --recursive
, alla fine in modo che restituisce solo ciò che è effettivamente installato e non estrae dai repository
Puoi anche provare questo comando.
repoquery --whatrequires sqlite
Ho ricevuto questo comando da ServerFault e anche dai forum Fedora.
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
Come ha detto Wes Hardaker , un buon metodo integrato è l'utilizzo rpm -q --whatrequires <package>
. Il fatto è che rpm
opera su funzionalità per la risoluzione delle dipendenze, non semplicemente sui pacchetti, come ad esempio dpkg
nella 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 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 rpm
se stesso e quindi non richiede l'installazione di pacchetti aggiuntivi (ad esempio yum-utils
in CentOS 7, che è il pacchetto che contiene repoquery
).
repoquery
può 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