Come elencare le dipendenze RPM?


36

Il nostro server di produzione esegue CentOS versione 5.2 (Final).

Come posso vedere / ottenere / elencare tutte le dipendenze di un pacchetto RPM già installato ?

Ad esempio: SQLite v3.3.6 è già installato nel server. Voglio vedere tutte le dipendenze di questo particolare pacchetto.

Ecco l'output del comando: rpm -qa |grep sqlite

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

Inoltre, perché elenca 2 voci sqlite-3.3.6-2qui?

Risposte:


28
  1. rpm -q --requires somepackagehere

  2. Uno è il i?86pacchetto, l'altro è il x86_64pacchetto.


Il mio sistema operativo è a 64 bit. 2 pacchetti di architettura possono coesistere nello stesso server? Qual è lo scopo / la necessità di avere 2 pacchetti di architettura contemporaneamente?
Gnanam,

2
Le distro derivate da RH / Fedora supportano il multiarch , per cui possono coesistere più pacchetti appartenenti ad archi "abbastanza diversi ma abbastanza simili" al fine di consentire l'esecuzione di eseguibili creati per entrambi gli arch.
Ignacio Vazquez-Abrams,

Sfortunatamente ciò richiede che il pacchetto sia già installato localmente: \
rogerdpack il

@rogerdpack: bene sì. Questo è esattamente ciò che la domanda ha posto.
Ignacio Vazquez-Abrams,

Sì, sfortunatamente google invia "tutti direttamente qui" se google "elenca le dipendenze RPM" - google ha limitato la domanda! Indipendentemente da ciò, vedi la risposta di davey per tutti i follower che desiderano tale funzionalità.
rogerdpack,

34

Il yum deplistcomando ti mostrerà quali rpm sono dipendenze, ecco un esempio per il expectpacchetto (funzionerà anche se il pacchetto non è ancora installato localmente):

# 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

Questo comando non funziona. Mi manca qualcosa o manca qualcosa nel tuo comando?
Gnanam,

Spiacenti, mancava uno spazio, il comando è yum deplist package.
davey

1
+1 l'uso di YUM qui è bello, è ricorsivo e risolve cose come 'perl (COnfig :: Tiny)' o 'libc.so (64bit)'.
djhaskin987,

6

Seguendo la risposta di Ignacio, puoi vedere l'architettura specifica dei pacchetti procedendo come segue:

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

Nel mio caso, ho solo il pacchetto i686 ... ma puoi ottenere l'architettura associata ai pacchetti in quel modo. Se sei interessato a cos'altro puoi ottenere da --queryformat, emetti a rpm --querytagsper vedere l'elenco delle variabili disponibili.


1
+1 Anche il tuo comando sulla quotazione secondo l'architettura è utile.
Gnanam,

3

Ho un frammento di shell rapido che stampa tutti i pacchetti installati insieme alle loro dipendenze:

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

3

Le persone hanno già risposto con:

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

Sì, rpmo yumfunziona e risponde correttamente alla domanda. La differenza principale tra rpme yumè che yum mostra anche quali pacchetti è possibile installare per soddisfare i requisiti della libreria e / o dei file. Sfortunatamente, se il pacchetto non è installato, nessuno di questi metodi è utile. Poiché il poster originale ha già specificato che il pacchetto che si sta controllando è installato, questo è un punto di disattivazione.

E se non avessi installato il pacchetto? yumpuò ancora essere usato, ma indirettamente. È possibile eseguire un'installazione fittizia annullando l'operazione di installazione.

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

Ecco un esempio:

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

Soluzione alternativa alle limitazioni dei rapporti.
MarkHu
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.