Generieren Sie einen Unterschied zwischen der aktuellen / etc / und der Standardkonfiguration

7

Nach der Installation und verschiedenen benutzerdefinierten Konfigurationen ist es möglich, z. apt und etwas Shell-Fu, um für jede Datei in / etc / einen Unterschied zu erzeugen, der von der Standardkonfiguration abweicht? Dies würde eine Möglichkeit bieten, eine kurze Zusammenfassung des Konfigurationsstatus nachträglich zu erstellen, anstatt sich auf die manuelle Protokollierung verlassen zu müssen, falls man sich daran erinnern möchte, was zu einem späteren Zeitpunkt geändert wurde.

Sarah
quelle

Antworten:

3

Sie sollten einen Blick auf etckeeper werfen :

etckeeper ist eine Sammlung von Tools, mit denen / etc in einem Git-, Mercurial-, Darcs- oder BZR-Repository gespeichert werden kann. Es wird in apt (und andere Paketmanager, einschließlich yum und pacman-g2) eingebunden, um automatisch Änderungen an / etc während der Paketaktualisierungen festzuschreiben. Es verfolgt Dateimetadaten, die von Revison-Kontrollsystemen normalerweise nicht unterstützt werden. Dies ist jedoch wichtig für / etc, z. B. die Berechtigungen von / etc / shadow. Es ist sehr modular und konfigurierbar und gleichzeitig einfach zu bedienen, wenn Sie die Grundlagen der Arbeit mit der Revisionskontrolle verstehen.

Cédric Julien
quelle
0

Ich bin gerade dabei, eine Lösung für das gleiche Problem zu entwickeln.

Grundsätzlich ist mein Ziel ein System, das das Rückgängigmachen und Wiederherstellen mit Granularität auf Dateiebene ermöglicht.

Beginnen Sie mit Ihrer Frage und arbeiten Sie rückwärts ...

  • Um mit der Standardkonfiguration zu vergleichen, müssen wir zuerst die Originale all dieser Dateien irgendwo speichern. Dann können wir mit so etwas wie ...
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
  • Um die Originale zu speichern, habe ich mich für die Konvention entschieden, ein einzelnes .archivesUnterverzeichnis in einem beliebigen Verzeichnis mit einer geänderten Datei zu haben. Es wird nach Bedarf von einem file-archiveSkript erstellt.
  • Wenn Sie nur eine Ebene rückgängig machen möchten, müssen Sie die unveränderte Datei nur in das .archivesVerzeichnis kopieren, bevor sie geändert wird.
  • Für unbegrenztes Rückgängigmachen benötigen wir ein Versionsschema. Eine naheliegende Wahl ist ein Datums- / Uhrzeitstempel, der an den Namen der archivierten Version angehängt wird. Etwas wie...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.20121219015459
                            /etc/.archives/resolv.conf.20121219015459
  • Stattdessen verwende ich nur eine automatisch berechnete inkrementelle Version #, wie in ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.00
                            /etc/.archives/resolv.00.conf
  • Die Versionsnummer steht vor der Erweiterung, da ich diese auch für bearbeitete Versionen von Bildern verwende, deren Erweiterungen (.jpg, .png usw.) intakt sein müssen, um von vielen Softwareprogrammen richtig erkannt zu werden. Wenn eine Datei keine Erweiterung hat, wird die Versionsnummer nur an das Ende angehängt. Der Code dafür ist komplexer, wird aber sofort ausgeführt, also kein Problem. Ein Fall kann für eine Reihe anderer Schemata gemacht werden, aber das funktioniert für mich.

Hoffe das hilft!

DocSalvager
quelle