Konfigurationsmanagement mit Mercurial

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Vorbemerkung

Da hat man "mal schnell" eine Einstellung in der Konfiguration eines Programms geändert, da stellt sich heraus, dass plötzlich Probleme auftreten. Und schon stellt man sich die Frage: Wie war es denn vorher?

Da bleibt natürlich der Rückgriff auf die Datensicherung, wenn man denn eine hat.

Eine Form der Datensicherung mit erweiterten Funktionen ist ein Versionskontrollsystem. Wie man das einsetzt, soll dieser Artikel am Beispiel von Mercurial zeigen.

Zielsetzung

  • Sicherung von /etc
  • Feststellen, ob Dateien in /etc (samt Unterverzeichnissen) geändert wurden
  • Vergleich von Dateien aus /etc mit vorherigen Versionen.
  • Sicherung auf anderem Rechner

Warum Mercurial

  • Lokales Repository
  • Synchronisation mit entferntem Repository
  • Einfach zu bedienen
  • Platzsparend

Installation

 su
 apt-get update && apt-get install mercurial

Repository aufbauen

Das Script für Konfigurationsmanagement mit Mercurial erledigt folgendes:

  • Erstellen eines Repositories (im Verzeichnis .hg).
  • Eintrag aller regulären Dateien von /etc ins Repository.
  • Erstellen der Datei etc_links.txt mit allen symbolischen Links in /etc
  • Eintrag aller Links aus /etc in die Ignorierliste (.hgignore) von Mercurial.
  • Commit der Dateien.
  • Erstellen eines Tags (mit dem Datum im Namen), damit dieser Stand wiederhergestellt werden kann.
  • Setzen der Zugriffsrechte, dass nur root auf das Repository zugreifen kann.

Sicherung des Repositories auf einer anderen Paritition

Jetzt kommt die eigentliche Datensicherung auf eine andere Partition, z.B. auf einem USB-Stick:

 su
 cd /etc
 hg clone . /media/USB/repositories/etc

Feststellen von Änderungen

Ein NFS-Laufwerk wird eingebunden und der FTP-Server vsftpd installiert:

 echo "/data/  192.168.7.16/24(rw,no_subtree_check,crossmnt,no_root_squash,async)" >>/etc/exports
 apt-get install vsftpd

Wir wollen feststellen, welche Dateien sich in /etc geändert haben:

 su
 cd /etc
 hg status

Es werden alle Dateien angezeigt, die sich seit der letzten Sicherung geändert haben, hier also:

M exports
? vsftpd.conf

Das 'M' steht für Modified, also geändert, das '?' für "unbekannte Datei". Diese "unbekannte" Datei fügen wir dem Repository hinzu...

  hg add vsftpd.conf

und veranlassen, dass der Inhalt ins Repository aufgenommen wird (Commit):

  # -m <text> ist ein Text, der den Commit-Vorgang dokumentieren soll
  hg commit -m "Neu" vsftpd.conf

Jetzt interessiert uns der Unterschied von exports zur Vorgängerversion:

  hg diff exports

Die Ausgabe ist:

diff -r 082049650d92 exports
--- a/exports   Sat Dec 18 23:30:47 2010 +0100
+++ b/exports   Sun Dec 19 01:24:39 2010 +0100
@@ -11,3 +11,4 @@
 #/media/       192.168.7.0/24(rw,no_subtree_check,crossmnt,no_root_squash,async)
 /media/heap/   192.168.7.16/24(rw,no_subtree_check,crossmnt,no_root_squash,async)
+/data/  192.168.7.16/24(rw,no_subtree_check,crossmnt,no_root_squash,async)

Wir akzeptieren die Änderung mit

  hg commit -m "/data ergänzt" exports