¿Cómo enumerar las dependencias de RPM?

36

Nuestro servidor de producción ejecuta CentOS versión 5.2 (Final).

¿Cómo veo / obtengo / enumero todas las dependencias de un paquete RPM ya instalado ?

Por ejemplo: SQLite v3.3.6 ya está instalado en el servidor. Quiero ver todas las dependencias de este paquete en particular.

Aquí está la salida del comando: rpm -qa |grep sqlite

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

Además, ¿por qué está enumerando 2 entradas de sqlite-3.3.6-2aquí?

Gnanam
fuente

Respuestas:

28
  1. rpm -q --requires somepackagehere

  2. Uno es el i?86paquete, el otro es el x86_64paquete.

Ignacio Vazquez-Abrams
fuente
Mi sistema operativo es de 64 bits. ¿Pueden coexistir 2 paquetes de arquitectura en el mismo servidor? ¿Cuál es el propósito / necesidad de tener 2 paquetes de arquitectura al mismo tiempo?
Gnanam
2
Las distribuciones derivadas de RH / Fedora admiten multiarch , por lo que pueden coexistir múltiples paquetes que pertenecen a archs "diferentes pero similares" para permitir la ejecución de ejecutables creados para cualquiera de los arch.
Ignacio Vazquez-Abrams
Desafortunadamente, esto requiere que el paquete ya esté instalado localmente: \
rogerdpack
@rogerdpack: Bueno, sí. Eso es exactamente lo que pidió la pregunta.
Ignacio Vazquez-Abrams
Sí, desafortunadamente, Google envía "todo el mundo directamente aquí" si usted "enumera las dependencias de RPM". De todos modos, vea la respuesta de davey para cualquier seguidor que desee esa funcionalidad.
rogerdpack
34

El yum deplistcomando le mostrará qué rpm son dependencias, aquí hay un ejemplo para el expectpaquete (esto funcionará incluso si aún no tiene el paquete instalado 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
davey
fuente
Este comando no funciona. ¿Me estoy perdiendo algo o hay algo que falta en su comando?
Gnanam
Lo sentimos, faltaba un espacio, el comando es yum deplist package.
davey
1
+1 el uso de YUM aquí es bueno, es recursivo y resuelve cosas como 'perl (COnfig :: Tiny)' o 'libc.so (64bit)'.
djhaskin987
6

Siguiendo la respuesta de Ignacio, puede ver la arquitectura específica de los paquetes haciendo lo siguiente:

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

En mi caso, solo tengo el paquete i686 ... pero puedes obtener la arquitectura asociada con los paquetes de esa manera. Si está interesado en saber qué más puede obtener de --queryformat, emita un rpm --querytagspara ver la lista de variables disponibles.

Alex
fuente
1
+1 Su comando de listado por arquitectura inteligente también es útil.
Gnanam
3

Tengo un fragmento de shell rápido que imprime todos los paquetes instalados junto con sus dependencias:

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

La gente ya ha respondido con:

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

Sí, ya sea rpmo yumfunciona y responde correctamente la pregunta. La principal diferencia entre rpmy yumes que yum también muestra qué paquetes puede instalar para cumplir con los requisitos de la biblioteca o el archivo. Desafortunadamente, si el paquete no está instalado, ninguno de estos métodos es útil. Dado que el póster original ya especificó que el paquete que está comprobando está instalado, este es un punto de silencio.

¿Qué pasa si no tienes el paquete instalado? yumtodavía se puede usar, pero indirectamente. Puede realizar una instalación simulada cancelando la operación de instalación.

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

Aquí hay un ejemplo:

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
fuente
Solución brillante a las limitaciones de informes.
MarkHu