dependencies - ¿Hay alguna manera de recuperar un árbol de dependencia de yum?
dependency-management package-managers (4)
Para reducir la posibilidad del problema XY, estoy tratando de instalar PostGIS en una instalación virtual y limpia de RHEL5 con grandes restricciones. No sé si nosotros (como compañía) tenemos una suscripción de RH.
# yum install postgis
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Setting up Install Process
No package postgis available.
Nothing to do.
Emite el mismo error cuando intento instalar emacs
, así que estoy relativamente seguro de que no importa qué paquete esté intentando instalar.
La máquina virtual tiene acceso a internet.
Todo lo que quiero hacer es recuperar un gráfico de dependencia completo para una pieza de software que especifique (obviamente, es decir, postgis
). yum
ya debe calcular este gráfico de dependencia (o tener uno disponible para su recuperación) para hacer su trabajo, entonces, ¿cómo puedo aprovechar este recurso?
Todo lo que quiero hacer es recuperar un gráfico de dependencia completo para una pieza de software que especifique (obviamente, es decir, postgis).
Para esto, puede probar la herramienta rpmreaper recomendada en este artículo: Cómo verificar las dependencias del paquete RPM en Fedora, CentOS o RHEL
Proporciona una interfaz basada en curses que le permite profundizar selectivamente en los requisitos de un paquete o "profundizar" y ver qué depende de un paquete determinado.
La salida típica de la repoquery --tree-requires
basada en ASCII repoquery --tree-requires
es muy difícil de seguir cuando tiene varios niveles de profundidad y miles de líneas. La pantalla rpmreaper es mucho más fácil de leer y recorrer.
Aquí hay un breve ejemplo del uso de "profundizar" (también conocido como "Requerido por") para encontrar un ciclo en los RPM de Samba como referencia:
Esto ayudará a limpiar el --tree-requires
para (x86_64):
for i in `repoquery --tree-requires --recursive --resolve postgis /
| perl -nle ''/([a-z]+-/d+/./d+((/.|/-)?/d+)?.*x86_64)/;print "$1"''`; /
do yumdownloader $i; /
done
Según las páginas de manual de RHEL5 : " repoquery es un programa para consultar información de los repositorios de YUM de manera similar a las consultas de rpm".
Para su caso específico de postgis:
# repoquery --requires --recursive --resolve postgis
postgresql-libs-0:8.1.23-6.el5_8.i386
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-107.el5_9.5.i686
proj-0:4.5.0-3.el5.i386
Puede eliminar ".i386" y ".i686" de los nombres de paquetes si su sistema es de 64 bits.
La salida de la repoquería no es perfecta, ya que, por ejemplo, no puede enumerar glibc-common en la lista anterior. Pero su sistema no se ejecutaría si no hubiera instalado glibc y glibc-common.
EDITAR : Aunque no causa un error, la --recursive
parece no hacer nada en RHEL5.11 y puede omitirse. Además, use el --pkgnarrow=all
para asegurarse de que todos los paquetes (instalados, disponibles, etc.) se consideran para la consulta. Por último, para que un paso de recursión obtenga más del árbol de dependencias, en un shell bash, pase la salida del comando repoquery a un segundo comando repoquery usando tee
y xargs
como xargs
:
# repoquery --requires --resolve --pkgnarrow=all postgis.i386 | tee >(xargs -r -n 1 -- repoquery --requires --resolve --pkgnarrow=all) | sort | uniq
basesystem-0:8.0-5.1.1.noarch
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-123.el5_11.3.i686
glibc-common-0:2.5-123.el5_11.3.i386
krb5-libs-0:1.6.1-80.el5_11.i386
libgcc-0:4.1.2-55.el5.i386
libstdc++-0:4.1.2-55.el5.i386
openssl-0:0.9.8e-40.el5_11.i686
postgresql-libs-0:8.1.23-10.el5_10.i386
proj-0:4.5.0-3.el5.i386
Solo agregué una mejora a esta respuesta que desearía haber estado aquí cuando estaba lidiando con esto.
AGREGAR --recursivo no hace NADA cuando se usa --tree-require
La mejor opción que existe es la opción --tree-requires
. Esa es la ÚNICA manera que he encontrado para obtener la reparación para proporcionar un árbol de dependencia completo al 100%, incluidas las dependencias de las dependencias .
DESDE EL HOMBRE: --recursivo, cuando se usa con --lorequisitos , consultar los paquetes de forma recursiva.
Por lo que puedo decir, para una --requires
devolverá el mismo resultado, con y sin la opción --recursive
.
Si desea obtener una lista de TODAS las dependencias, DEBE hacer una repoquery --tree-requires <My-Package>
. De lo contrario no tendrás todas las dependencias requeridas.
Si desea tenerlos en una lista fácil de leer, puede ejecutar este comando:
sort <(sed -e ''s/ [| ///_]/+/|-[[:digit:]]/+..*/|[[:digit:]]/://g'' <(repoquery --tree-requires **YOUR-PACKAGE-HERE**)) | uniq
Producirá una lista legible, ordenada, solo de nombre de paquete. Vea este ejemplo con el paquete libxcb. Esta lista es TODAS las dependencias e incluye dependencias de dependencias.
No he encontrado ninguna diferencia en los resultados con --recursive
o --resolve
cuando no estoy usando el comando --whatrequires
. --whatrequires
tiene un propósito diferente al de un árbol de dependencia estándar o una lista de dependencias. No he encontrado ninguna respuesta en el desbordamiento de pila que explique esto correctamente (hay algunos comentarios).
Actualmente hay una solicitud de características para agregar un comando de "formato de árbol" a la devolución, pero en este momento no parece ser una opción. Esperemos que esto ayude a llenar el vacío.