Respuestas:
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
--installed
es una opción para repoquery
pero no es válida para rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
solo informa dependencias de los nombres de paquetes.
Por el contrario, repoquery
actú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.
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
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
--installed --recursive
al final para que solo devuelva lo que está realmente instalado y no se extraiga de los repositorios
También puedes probar este comando.
repoquery --whatrequires sqlite
Obtuve este comando de ServerFault y también de The Fedora Forums.
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
Como dijo Wes Hardaker , un buen método incorporado es mediante el uso rpm -q --whatrequires <package>
. La cuestión es que rpm
funciona 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 sqlite
no 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 rpm
sí mismo, por lo que no requiere instalar ningún paquete adicional (por ejemplo, yum-utils
en CentOS 7, que es el paquete que contiene repoquery
).
repoquery
se 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