herramienta o técnica para obtener una diferencia de dos instalaciones de Linux diferentes

10

Cita de Albert Einstein

Locura: hacer lo mismo una y otra vez y esperar resultados diferentes

Muchas veces, Linux me vuelve loco porque estoy haciendo lo mismo una y otra vez y obtengo resultados diferentes de un cuadro a otro. (Ver mi pregunta anterior ).

Para mí, la mayor área de confusión es hacerse cargo de una máquina que alguien más ha instalado (como es el caso al registrarse con una empresa de alojamiento web). Simplemente no sabes con qué estás lidiando.

¿Hay algún tipo de herramienta de diferencia inteligente que pueda ejecutar en una instalación de Linux (Ubuntu) para darme una idea de cómo esa máquina se ha desviado de la instalación predeterminada?

es decir, algo que me puede mostrar una lista de los comandos que se comportarán de manera sorprendente, evitando así un enfoque de prueba y error.

JW01
fuente
44
No obtendrá una "lista de los comandos que se comportarán sorprendentemente". El software no puede predecir lo que encontrará sorprendente.
Gilles 'SO- deja de ser malvado'
Gracias. Estas respuestas me están dando una mejor comprensión de cómo modelar las áreas de diferencia pertinentes que deben considerarse al hacerse cargo de una máquina que alguien más ha instalado. Hasta ahora tenemos diferencias en: paquetes instalados , servicios en ejecución , configuraciones y tipo de sistema de archivos . ¿Me interesa saber si eso es todo o la lista es infinita? @Gilles: sí, con un conocimiento limitado de Linux, ¡también me resulta difícil predecir lo que 'encontraría sorprendente'!
JW01
1
La lista es infinita. No es un ejemplo de Linux, pero hace un tiempo, Visual Studio no mostraba algunos cuadros de diálogo en una máquina en particular (sin error, solo espacio vacío donde deberían haber estado los controles). Resultó ser debido a tener demasiadas fuentes instaladas. La moraleja de esta historia es que siempre habrá sorpresas acechando en los rincones.
Gilles 'SO- deja de ser malvado'

Respuestas:

10

Siempre que tengo un buen sistema de referencia y un mal comportamiento, trato de compararlos con vimdiff. Lo que comparo varía con el problema, p. Ej.

1) Al comparar servidores a nivel de paquete, creo listas ordenadas de paquetes en cada servidor, envío los resultados a los archivos y los difundo, por ejemplo

En servidor1:

dpkg --get-selections|sort > server1_packages

En el servidor2:

dpkg --get-selections|sort > server2_packages

Copie ambos archivos en la misma máquina y difúndalos (o vimdiff).

2) Haga una lista de servicios en ejecución como en el ejemplo 1

sysv-rc-conf --list|sort > server1_services

sysv-rc-conf --list|sort > server2_services

... etc., y vimdiff esos.

3) Si está solucionando problemas de configuraciones inconsistentes con Apache, por ejemplo, haga copias de los archivos de configuración y vimdiff esos, etc.

Karl
fuente
2
Buen resumen de opciones. También es una buena idea poner los archivos bajo /etccontrol de versiones para ayudarlo a realizar un seguimiento de lo que está sucediendo. etckeeperHará esto por ti.
Faheem Mitha
Recibo "dpkg: no se pudo abrir el archivo de información del paquete` / var / lib / dpkg / status 'para leer: No existe tal archivo o directorio ". ¿Cómo se vería esto en Centos con mmm? PS Nevermind, lo encontró "lista lista instalada"
giorgio79
5

La mayoría de las diferencias entre dos instalaciones de la misma distribución estarán en /etc. Copie el contenido de /etcuna máquina a un directorio temporal en la otra y ejecute

diff -ru /etc /copy/of/other/etc

Si desea comparar una máquina con una instalación predeterminada, obtenga una copia de una nueva instalación predeterminada (quizás en una máquina virtual).

Si puede controlar una máquina desde el principio, asegúrese de instalar etckeeper para mantener /etcbajo control de versión. Entonces podrás ver exactamente qué ha cambiado.

Por supuesto, habrá muchas diferencias. Si aún no tiene una idea de dónde buscar, este es el enfoque incorrecto para investigar una diferencia particular en el comportamiento. Por ejemplo, supongamos que el comando se addusercomporta de manera diferente en dos máquinas. Entonces, el mejor enfoque es mirar lo que adduserestá haciendo; ejecutarlo en ambas máquinas y comparar. Si tiene una opción para decirle que sea más detallado ( adduserno), úselo. Más radicalmente, ejecute el programa bajo strace , p. Ej.

strace -s9999 -efile adduser …

para ver a qué archivos adduseraccede.

Gilles 'SO- deja de ser malvado'
fuente
2

Para volver a una pregunta anterior, su ingeniosa herramienta, que me parece una buena idea, pero nunca he oído hablar de que exista una bestia así, debe verificar cosas como el tipo y el tamaño del sistema de archivos.

Un ejemplo de la vida real que me sucedió en 2002: dos personas instalaron sistemas SuSE 7.3 en dos servidores adyacentes montados en bastidor. Pusieron mucho esfuerzo para obtener los paquetes exactamente iguales en ambos servidores. Poco tiempo después, tuvimos problemas con algún software en desarrollo. Se redujo al sistema de archivos ext3 en un servidor, Reiserfs en el otro. Un simple "ls" en Reiserfs da los nombres de los archivos en orden léxico, pero no en ext3. Un programa falló en nombres de archivo fuera de servicio.

Bruce Ediger
fuente
1

Para archivos, usuarios, grupos, paquetes, servicios, etc. He utilizado http://www.scriptrock.com ; es gratis para algunos servidores y le ofrece una buena comparación visual de las diferencias entre los servidores ... muy útil para la deriva

Miguel
fuente