Genera un diff tra corrente / etc / e configurazione di default

7

Dopo l'installazione e varie configurazioni personalizzate, è possibile utilizzare ad es. apt e qualche shell-fu per produrre un diff per ogni file in / etc / che differisce dalla configurazione standard? Ciò fornirebbe un mezzo per generare un breve riepilogo dello stato di configurazione dopo il fatto, piuttosto che dover fare affidamento sulla registrazione manuale lungo il percorso, se si desidera ricordare cosa è stato cambiato in un secondo momento.

    
posta Sarah 16.12.2012 - 15:10

2 risposte

3

Dovresti dare un'occhiata a etckeeper :

  

etckeeper è una raccolta di strumenti che consentono di memorizzare / etc in un git,   repository mercurial, darcs o bzr. Si collega ad apt (e ad altri   gestori di pacchetti inclusi yum e pacman-g2) per il commit automatico   modifiche apportate a / etc durante gli aggiornamenti del pacchetto. Tiene traccia dei metadati del file   i sistemi di controllo delle revisioni normalmente non supportano, ma questo è vero   importante per / etc, come i permessi di / etc / shadow. È abbastanza   modulare e configurabile, pur essendo semplice da usare se si   capire le basi del lavoro con il controllo di revisione.

    
risposta data Cédric Julien 19.12.2012 - 09:30
0

Sono nel mezzo dello sviluppo di una soluzione per lo stesso tipo di problema.

Fondamentalmente, il mio obiettivo è un sistema che consente di annullare e ripristinare con granularità a livello di file.

Iniziando con la tua domanda e lavorando all'indietro ...

  • Per poter confrontare la configurazione predefinita, dobbiamo prima conservare gli originali di tutti quei file da qualche parte. Quindi possiamo produrre quello che vuoi con qualcosa come ...
DIFFDIR= ......
ARCDIR=./.archives                         # see below

function getlastarchive() {
  ... code to return last archived version ...
}

for FILE in /etc/*
do
  ARCFILE="$(getlastarchive $FILE)"
  diff $ARCDIR/$ARCFILE /etc/$FILE  >$DIFFDIR/$FILE.diff
done
  • Per memorizzare gli originali, ho scelto di adottare la convenzione di avere una singola sottodirectory .archives in qualsiasi directory con un file alterato. Viene creato come necessario da uno script file-archive .
  • Se vuoi solo un livello di annullamento, devi solo copiare il file inalterato nella directory .archives prima che venga modificato.
  • Per l'annullamento illimitato, abbiamo bisogno di uno schema di versioning. Una scelta ovvia è un timbro datetime aggiunto al nome della versione archiviata. Qualcosa come ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.20121219015459
                            /etc/.archives/resolv.conf.20121219015459
  • Invece, sto usando solo una versione incrementale calcolata automaticamente #, come in ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.00
                            /etc/.archives/resolv.00.conf
  • La versione # è prima l'estensione poiché anch'io uso questa versione per le versioni modificate delle immagini che hanno bisogno delle loro estensioni (.jpg, .png, ecc.) intatte per per essere rilevato correttamente da un sacco di software. Se un file non ha estensione, la versione # viene semplicemente aggiunta alla fine. Il codice per farlo è più complesso, ma funziona all'istante, quindi nessun problema. Un caso può essere fatto per un certo numero di altri schemi ma questo funziona per me.

Spero che questo aiuti!

    
risposta data DocSalvager 19.12.2012 - 08:38

Leggi altre domande sui tag