
Tengo un conjunto de paquetes rpm. Voy a instalarlos todos a la vez, pero antes de hacerlo quiero obtener el orden en el que se van a instalar. Sé que si se los proporciono todos al administrador de paquetes en orden aleatorio, el administrador determinará las dependencias entre ellos y los instalará en el orden correcto. ¿Cómo obtengo este pedido?
Respuesta1
Puede utilizar la salida de depuración de rpm con la opción --test. Significa que no se instalarán paquetes, pero la salida stderr contendrá el orden interno, como este:
D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D: 0 0 2 1 +cla-v1-r45.0.0.x86_64
D: 1 0 11 2 +ace-6.5.15-1.x86_64
D: 2 0 1 3 +ace-kokyu-6.5.15-1.x86_64
D: 3 0 1 3 +ace-xml-6.5.15-1.x86_64
D: 4 0 7 4 +tao-2.5.15-1.x86_64
D: 5 0 0 5 +tao-cosconcurrency-2.5.15-1.x86_64
D: 6 0 0 5 +tao-cosevent-2.5.15-1.x86_64
D: 7 0 0 5 +tao-cosnaming-2.5.15-1.x86_64
D: 8 0 0 5 +tao-cosnotification-2.5.15-1.x86_64
D: 9 0 0 5 +tao-costrading-2.5.15-1.x86_64
D: 10 0 0 5 +tao-rtevent-2.5.15-1.x86_64
D: 11 0 0 5 +tao-utils-2.5.15-1.x86_64
D: 12 0 0 3 +ace-gperf-6.5.15-1.x86_64
D: 13 0 0 1 +mpc-6.5.15-1.x86_64
D: 14 0 0 1 +PCMX-6.0A90-02.x86_64
D: installing binary packages
Luego use algún filtro para analizarlo, por ejemplo, awk
rpm -Uvv --test *.rpm 2>&1 | awk 'BEGIN { FS = "+" }; /D: ========== tsorting packages/,/D: installing binary packages/ { printf "%s ",$2 }'
Respuesta2
yum
no tiene una opción para imprimir este pedido (vermanual), ni existe una interfaz conocida para su base de datos y bibliotecas que pueda hacer esto. Entonces una solución tendría que serafuera yum
. Siempre puedes solicitar yum
imprimir una lista completa de las dependencias adicionales de un paquete, pero esa información no es muy útil para obtener elordenen el que se deben instalar los paquetes. Es más sencillo preguntar rpm
.
En principio, se puede escribir un script que utilice la salida de
rpm -qpR package-file
para cadaarchivo de paquete, para obtener las dependencias y ordenarlas en pasos, por ejemplo,
- paquetes que no dependen de ninguno de los demás, entonces
- paquetes que dependen de uno o más de los anteriores (y posiblemente de otros enestegrupo), y
- así sucesivamente, hasta que no queden paquetes restantes
(He hecho lo contrario: buscar paquetes paraeliminar, y es complicado, pero factible).