strumento o tecnica per ottenere una diff di due diverse installazioni di Linux


10

Citazione di Albert Einstein

Follia: fare sempre la stessa cosa e aspettarsi risultati diversi

Spesso Linux mi fa impazzire perché sto facendo sempre la stessa cosa e sto ottenendo risultati diversi da una scatola all'altra. (Vedi la mia domanda precedente ).

Per me, la più grande area di confusione sta prendendo in consegna una macchina che qualcun altro ha installato (come nel caso della registrazione con una società di web hosting). Semplicemente non sai con cosa hai a che fare.

Esiste una sorta di strumento diff intelligente che posso eseguire su un'installazione di Linux (Ubuntu) per darmi un'idea di come quella macchina si è spostata dall'installazione predefinita?

vale a dire qualcosa che può mostrarmi un elenco dei comandi che si comporteranno in modo sorprendente evitando un approccio di prova ed errore.


4
Non otterrai un "elenco dei comandi che si comporteranno in modo sorprendente". Il software non può prevedere ciò che troverai sorprendente.
Gilles 'SO- smetti di essere malvagio'

Grazie. Queste risposte mi stanno dando una migliore comprensione di come modellare le aree di differenza pertinenti che devono essere prese in considerazione quando si rileva una macchina installata da qualcun altro. Finora abbiamo differenze in: pacchetti installati , servizi in esecuzione , configurazioni e tipo di file system . Sono interessato a sapere se è così o l'elenco è infinito? @Gilles - sì, con una conoscenza limitata di Linux, trovo difficile predire ciò che "troverei sorprendente" anche io!
JW01

1
L'elenco è infinito. Non un esempio di Linux, ma qualche tempo fa Visual Studio non mostrava alcune finestre di dialogo su un determinato computer (nessun errore, solo uno spazio vuoto in cui avrebbero dovuto essere i controlli). Si è scoperto essere dovuto alla presenza di troppi caratteri installati. La morale di questa storia è che ci saranno sempre sorprese in agguato negli angoli.
Gilles 'SO- smetti di essere malvagio'

Risposte:


10

Ogni volta che ho un buon sistema di riferimento e un comportamento scorretto, provo a confrontarli con vimdiff. Ciò che confronto varia a seconda del problema, ad es

1) Quando si confrontano i server a livello di pacchetto, creo elenchi ordinati di pacchetti su ciascun server, invio dei risultati ai file e diff.

Sul server1:

dpkg --get-selections|sort > server1_packages

Sul server2:

dpkg --get-selections|sort > server2_packages

Copia entrambi i file sullo stesso computer e diff (o vimdiff).

2) Crea un elenco di servizi in esecuzione come nell'esempio 1

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

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

... ecc. e vimdiff quelli.

3) Se ad esempio stai risolvendo problemi con configurazioni incoerenti con Apache, copia i file di configurazione e vimdiff quelli, ecc.


2
Buon riassunto delle opzioni. È anche una buona idea mettere i file sotto il /etccontrollo della versione per aiutarti a tenere traccia di ciò che sta succedendo. etckeeperlo farà per te.
Faheem Mitha,

Ricevo "dpkg: impossibile aprire il file di informazioni sul pacchetto` / var / lib / dpkg / status 'per la lettura: nessun file o directory simile ". Come sarebbe questo su Centos con yum? PS Nevermind, l'ho trovato "lista yum installata"
giorgio79,

5

La maggior parte delle differenze tra due installazioni della stessa distribuzione saranno presenti /etc. Copia il contenuto di /etcuna macchina in una directory temporanea sull'altra ed esegui

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

Se si desidera confrontare una macchina con un'installazione predefinita, ottenere una copia da una nuova installazione predefinita (forse in una macchina virtuale).

Se riesci a controllare una macchina dall'inizio, assicurati di installare etckeeper per mantenere il /etccontrollo della versione. Quindi sarai in grado di vedere esattamente cosa è cambiato.

Certo, ci saranno molte differenze. Se non hai ancora idea di dove cercare, questo è l'approccio sbagliato per indagare su una particolare differenza nel comportamento. Ad esempio, supponiamo che il comando addusersi comporti diversamente su due macchine. Quindi l'approccio migliore è guardare cosa addusersta facendo; eseguilo su entrambe le macchine e confronta. Se ha un'opzione per dirgli di essere più prolisso ( adduserno), usalo. Più radicalmente, eseguire il programma sotto strace , ad esempio,

strace -s9999 -efile adduser …

per vedere a quali file adduseraccede.


2

Per tornare a una domanda precedente, il tuo strumento elegante, che mi sembra una buona idea, ma non ho mai sentito parlare di una tale bestia esistente, deve controllare cose come il tipo e le dimensioni del filesystem.

Un esempio di vita reale che mi è successo nel 2002: due persone hanno installato i sistemi SuSE 7.3 su due server montati su rack adiacenti. Hanno fatto molti sforzi per ottenere i pacchetti esattamente gli stessi su entrambi i server. Poco dopo, abbiamo avuto problemi con alcuni software in fase di sviluppo. È arrivato al filesystem ext3 su un server, Reiserfs sull'altro. Un semplice "ls" su Reiserfs fornisce i nomi dei file in ordine lessicale, ma non su ext3. Un programma non è riuscito su nomi di file non ordinati.


1

Per file, utenti, gruppi, pacchetti, servizi ecc. Ho usato http://www.scriptrock.com ; è gratuito per alcuni server e ti offre un piacevole confronto visivo delle differenze tra i server..molto utile per la deriva

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.