Listado de paquetes en Yum que dependen de otro paquete instalado

48

Estoy tratando de instalar un paquete RPM de terceros en RHEL5 que depende de la versión 3.4 de sqlite. Según Yum ya tengo 3.3.6 instalado.

¿Hay alguna manera de enumerar los paquetes instalados que dependen de sqlite 3.3.6?

Rico
fuente

Respuestas:

47

La opción de rpm que desea es:

rpm -q --whatrequires sqlite

Editado: agregado - instalado por discusión en otras respuestas / comentarios

Editado: eliminado - instalado ya que es una opción no válida para rpm

Wes Hardaker
fuente
3
Además, repoqueryse puede utilizar para generar una estructura de árbol agradable de todos los paquetes que requieren un paquete en particular, por ejemplo:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp
3
No estoy de acuerdo en que esta respuesta sea confiable, ciertamente no en CentOS 7.x. Para probar, instale ImageMagick. OpenEXR-libs también se instalará ya que ImageMagick depende de ello. Ahora ejecute rpm -q --whatrequires OpenEXR-libs y la respuesta es "ningún paquete requiere OpenEXR-libs" que es INCORRECTO. Ahora ejecute "repoquery -q --installed --whatrequires OpenEXR-libs" y devuelve correctamente "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64". @la respuesta de un tipo aleatorio a continuación debería ser la respuesta correcta aquí.
Pancho
66
--installedes una opción para repoquerypero no es válida para rpm.
Dan Rice
36

Responder

repoquery -q --installed --whatrequires sqlite

Explicaciones

rpm -q --whatrequires sqlite solo informa dependencias de los nombres de paquetes.

Por el contrario, repoqueryactúa de la siguiente manera (de las páginas de manual):

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

Ejemplo

Tomemos el paquete libdb.

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

Ningún paquete depende libdb, por lo que deberíamos poder eliminarlo sin problemas. Sin embargo...

# 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

Como puede ver, algunos otros paquetes no dependían directamente del paquete, sino del archivo libdb-5.3.so()(64bit)proporcionado por él.

Finalmente, aquí está la lista real de paquetes dependiendo de 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
Elouan Keryell-Even
fuente
1
Esta respuesta es mejor que la respuesta aceptada
Pancho
11

Para dnf (nueva versión de yum) puede intentar con el comando repoquery wrapper:

dnf repoquery --whatrequires sqlite

Si no está disponible, puede instalarlo con el comando:

dnf -y install dnf-plugins-core
teoincontatto
fuente
Necesita --installed --recursiveal final para que solo devuelva lo que está realmente instalado y no se extraiga de los repositorios
Hashbrown
7

También puedes probar este comando.

repoquery --whatrequires sqlite

Obtuve este comando de ServerFault y también de The Fedora Forums.

Pred
fuente
Esto devolvió paquetes que no tenía instalados.
2rs2ts
3

Creo que lo que realmente quiere saber es "cuáles son los paquetes que requieren sqlite-3.3.6, pero no estarán contentos con sqlite-3.4.z" ... y la única buena manera de descubrirlo es intentalo. Me gusta:

echo | yum upgrade sqlite
James Antill
fuente
1

Como dijo Wes Hardaker , un buen método incorporado es mediante el uso rpm -q --whatrequires <package>. La cuestión es que rpmfunciona con capacidades para la resolución de dependencias, no solo con paquetes, como por ejemplo dpkg, en la familia Debian / Ubuntu de distribuciones de Linux. Como otros han señalado, simplemente hacer rpm -q --whatrequires sqliteno cuenta toda la historia, de ahí que algunos sugieran usar repoquery. repoquery, sin embargo, no está instalado de forma predeterminada en RHEL / CentOS 7 minimal (¿quizás también en el escritorio?), por lo que puede no estar disponible para todos.

Un usuario puede hacer rpm -q --provides <pkgname>para ver todas las capacidades que proporciona un paquete, luego usar rpm -q --whatrequires <capability>para ver qué paquetes instalados requieren esa capacidad. Esta información se puede consultar de manera sucinta utilizando una línea BASH (separada aquí en dos líneas de longitud):

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

Esto solo utiliza opciones integradas en rpmsí mismo, por lo que no requiere instalar ningún paquete adicional (por ejemplo, yum-utilsen CentOS 7, que es el paquete que contiene repoquery).

villapx
fuente