Lista diferente de paquetes instalados informados por rpm en comparación con yum

8

Quiero que el Servidor B tenga exactamente la misma configuración que el Servidor A. El Servidor A y B tienen el mismo Arch y el mismo hardware.

Mi plan es tener una lista de todas las cosas instaladas en el Servidor A e instalarla usando la lista en el Servidor B algo así como:

yum -y install $(cat installed.txt)

En el Servidor A, debería usar:

rpm -qa > installed.txt

o:

yum list installed > installed.txt  

Las listas parecen ser diferentes y no tengo idea de por qué.

yum list installedtiene 930 líneas mientras que rpm -qatiene 895 líneas, ¿cuál podría ser la diferencia?

John Smith
fuente
¿Has diffeditado las salidas (posible después de ordenar)?
Anthon
No tengo idea de por qué hay una diferencia entre la salida de yum y rpm. Tal vez deberías probar la sugerencia de Anthon y hacernos saber cuál es el resultado. Además, para mí, ambos comandos enumeran el mismo número de líneas y según su plan, iría con rpmlist ya que tiene la lista que se puede usar en el yumcomando de su servidor b .
Ramesh
mi apuesta: también por los paquetes instalados por "rpm --install package.rpm"
Massimo

Respuestas:

4

¿Cuál podría ser la diferencia?

La razón principal de la diferente cantidad de líneas es que la salida producida por yumestá formateada para que cada campo se alinee verticalmente (independientemente de la longitud del nombre del paquete y / o número de versión). Para ello, utiliza dos líneas para enumerar dichos paquetes y rellena la segunda línea con caracteres de espacio para alinear los campos correctamente. El siguiente resultado (de un cuadro de CentOS 6) muestra que se usan dos líneas para enumerar el device-mapper-persistent-data.x86_64paquete:

device-mapper-libs.x86_64         1.02.95-3.el6_7.4    @clearos-verified-updates
device-mapper-persistent-data.x86_64
                                  0.3.2-1.el6          @clearos
dhclient.x86_64                   12:4.1.1-49.P1.v6    @clearos-verified-updates

Sin embargo, esta no es la única razón y se puede ver al masajear la salida de los dos comandos antes de compararlos:

Para la salida del rpmcomando:

  1. Ordénelo de modo que los paquetes que comiencen con una letra mayúscula aparezcan antes que aquellos con minúscula:

    rpm -qa | LC_ALL=C sort
    
  2. Use un sedcomando para eliminar los números de versión del paquete:

    rpm -qa | LC_ALL=C sort r | sed 's/-[^-]*-[^-]*$//' >| installed.rpm
    

Para la salida del yumcomando:

  1. Elimine las dos primeras líneas de encabezado ( Loaded pluginsy Installed Packages):

    Loaded plugins: etckeeper, fastestmirror
    Installed Packages
    

    Podemos usar sedpara esto:

     yum list installed | sed '1,2d;'
    
  2. También podemos usar sedpara eliminar todas las líneas que son continuación de una lista de paquetes (estas líneas comienzan con varios espacios para que todas las versiones del paquete se alineen).

    yum list installed | sed '1,2d;/^ /d;s/\..*//' >| installed.yum
    

Ahora, podemos usar el diffcomando para comparar la salida de los dos archivos. Aquí están los resultados del cuadro CentOS 6:

# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey

Conclusión

Esto muestra que rpm -qatambién incluye listados de paquetes para las claves públicas de confianza para firmar paquetes, mientras que el yumcomando omite estos paquetes.

Anthony Geoghegan
fuente
Hace un tiempo, pero nunca es tarde para muchas gracias por su útil análisis y conclusión.
John Smith
@johnSmith ¡Más vale tarde que nunca! :) Recuerdo que pasé un poco de tiempo con esto, pero pensé que era una pregunta interesante. Responder tales preguntas puede ser una buena forma de aprender en sí mismo.
Anthony Geoghegan
6

La lista yum instalada tiene 930 líneas, mientras que rpm -qa tiene 895 líneas, ¿cuál podría ser la diferencia?

Esto es probable que solo formatee las diferencias. yum list hará un montón de ajustes inteligentes al tamaño de su terminal.

Lo que probablemente quieras hacer es usar:

# Run this on the master server
yum-debug-dump

# Run this on the new server, with the input from the above.
yum-debug-restore
James Antill
fuente
gracias por responder, después de instalar yum-utils en el nuevo servidor y ejecutar "yum-debug-restore master_out.gz" dice que para cada paquete no está disponible, ¿me estoy perdiendo algo?
john Smith
Si no son servidores idénticos (por ejemplo, un arco diferente o el nuevo tiene paquetes más antiguos), puede usar las opciones --ignore-arch y / o --install-latest en la restauración.
James Antill
Sugeriré copiar el contenido del maestro /etc/yum.repos.d/* al nuevo servidor antes de ejecutar yum-debug-restore
Sergey Vlasov
1

No estoy completamente seguro de por qué las listas son diferentes, pero sé que esa rpm -qa > installed.txtes la forma correcta de encontrar todos los paquetes instalados. Lo buscará yum installedtan bien como rpm installed.

Además, el formato de rpm -qasalida funcionará mejor con el yum installcomando que desea ejecutar.

Jeight
fuente
0

yum list installed me da la salida de la siguiente manera.

pam_krb5.i386                        2.2.14-22.el5                     installed

Ahora, rpm -qatiene lo siguiente para decir.

pam_krb5-2.2.14-22.el5

Ambos comandos me dan la misma cantidad de líneas que la salida. Yo iría con la rpm -qalista.

Además, de esta respuesta, veo la siguiente información.

existe el programa "rpm", que manipula específicamente los paquetes que se le pide que manipule, y está "yum", que es un sistema de administración más inteligente que puede encontrar dependencias y descargar archivos .rpm incluso si no están en el sistema.

Entonces, la diferencia podría ser yumresolver las dependencias, pero rpmha instalado todas las dependencias y, por lo tanto, proporciona una lista más completa.

Veo la diferencia real entre yumy rpmcomo a continuación.

El problema más destacado rpmes un estado comúnmente conocido por la mayoría de las personas como infierno de dependencia . Este problema ocurre con paquetes que dependen de muchos otros paquetes, algunos de esos paquetes también dependen de muchos otros paquetes. Es de conocimiento común que debe instalar todas las dependencias para que el programa funcione correctamente. rpmno puede hacer esto automáticamente por usted. Solo puede verificar si todos los paquetes necesarios están instalados antes de instalar el paquete necesario. El seguimiento e instalación manual de cada dependencia es una tarea importante para la mayoría de las personas que solo desean instalar un solo paquete inicialmente.

yumes capaz de rastrear las dependencias de un paquete e instalarlas antes de instalar el paquete que el usuario quería instalar. Esto simplifica todo el proceso, ya que solo necesita saber el nombre del paquete que desea instalar y no preocuparse si los paquetes necesarios se han instalado o no. Los paquetes que no se pueden encontrar en el sistema se buscan en los repositorios disponibles para el sistema.

Referencias

http://www.differencebetween.net/technology/difference-between-yum-and-rpm/

Ramesh
fuente
gracias por responder, para mí la lista de yum instalada tiene 940 líneas mientras que rpm -qa tiene 895 líneas, ¿alguna idea de cuál podría ser la diferencia?
john Smith
@johnSmith, Yummaneja dependencias y busca paquetes para llenarlos. Yumejecuta efectivamente el mismo comando rpmpero también incluye todos los paquetes necesarios para hacer coincidir las dependencias.
Ramesh
yumes un regalo del cielo para administrar dependencias de paquetes, pero eso es irrelevante cuando simplemente enumera los paquetes instalados en un sistema. Ver James y mi respuesta por la razón de la diferencia.
Anthony Geoghegan
0

yum list installed puede crear una salida de dos líneas, si el nombre del paquete y la versión del paquete son largos.

Jan Gerrit Kootstra
fuente
Esta respuesta puede ser breve pero es correcta (por lo que es una votación positiva).
Anthony Geoghegan