dependencies dependency-management yum package-managers

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.