Inhalt

1. Vorwort

Jeder kennt es: Man führt Veränderungen an wichtigen Konfigurationsdateien aus. Erst viel später, evtl. Wochen oder gar Monate, stellt man fest, dass man wohl irgendwas kaputt gemacht hat. Aber was hab ich da gleich verändert? Und überhaupt, in welcher Datei? Klar, man könnte jetzt Backups durchwühlen, aber wird man da fündig? Was geschickt wäre, wäre eine Versionverwaltung, wie man sie beim Programmieren benutzt!

Auch wenn von den Autoren vielleicht nicht vorgesehen, habe ich mir vorgenommen mein /etc mit Bazaar zu verwalten. Die Vorteile, die daraus entstehen, sind klar:

2. Was es nicht ist

Bazaar sollte nicht als einzige Instanz eines Backups dienen. Nichts geht über ein Backup auf einen vom System vollständig getrennten Datenträger wie z.B. CD/DVD-R(W) oder Band.

3. Funktionsweise

Das ganze funktioniert, sobald man es einmal eingerichtet hat, so gut wie vollautomatisch. Man fügt einfach das Script (weiter unten) als Cronjob ein. Z.B. indem man es einfach nach /etc/cron.hourly/bzr-etc kopiert und ausführbar macht. Danach schaut das Script einmal pro Stunde nach, was sich in /etc verändert hat. Wenn Veränderungen stattgefunden haben, werden diese als neue Version in die Versionsverwaltung eingepflegt. Ausserdem generiert das Script als Output die Diffs, damit man sehen kann, was sich verändert hat. Wenn der Mailer des Systems richtig eingerichtet ist, bekommt man diese Veränderungen automatisch zugemailt. Ein hübsches Addon, wenn z.B. auch andere Personen Root-Rechte auf dem System besitzen. So sieht man genau, wenn etwas verändert wurde. Will man nun zu einem alten Versionsstand zurück, so benutzt man einfach, ohne irgendwelche Extra-Skripte (wie einst bei der RCS/KonfigurationsVerwaltung nötig) das bzr-Kommando. Näheres hierzu unter Howto.

4. Howto

Es sind einige Schritte notwendig, um das etc-Verzeichniss unter Verwaltung von bzr zu stellen:

cd /etc
bzr init # bzr-repository anlegen
bzr add * # Alle Dateien in /etc aufnehmen (arbeitet rekursiv)
bzr commit -m "First commit" # Erstmaliges Commit, um die Dateien in's Archiv einzupflegen

Nun wurde ein Verzeichniss namens /etc/.bzr angelegt, in der das ganze Repository steckt. Andere Veränderungen gibt es nicht. Wenn man also irgendwann alles wieder loswerden will: Das script aus Crond entfernen und "rm -rf /etc/.bzr" und man ist die Versionsverwaltung wieder los.

Spätestens nach einiger Zeit wird man feststellen, dass sich einige Dateien im /etc-Verzeichniss regelmässig ändern. Möchte man diese von der Versionverwaltung ausschliessen, so muss man sie entfernen. Typische Beispiele sind z.B. /etc/mtab oder /etc/ld.so.cache. Hier am Beispiel der mtab, wie man es entfernt:

cd /etc && bzr ignore mtab && bzr remove mtab && commit -m "mtab removed"

Was nun aber, wenn man an alte Informationen rankommen will? Es liegt mir fern, hier die gesamte Manpage von Bazaar neu aufzuschreiben, aber zumindest ein paar beispiele für die wichtigsten Befehle die man alltäglich braucht möchte ich zusammenfassen:

#Alle Beispiele sind für die Datei /etc/fstab
cd /etc
bzr log fstab # Zeigt ein log der fstab
bzr diff -r1..3 fstab # Zeigt alle Veränderungen als diff, die zwischen Version 1 und 3 durchgeführt wurden
bzr revert fstab -r1 # Holt Revision "1" der fstab zurück.

5. Das Skript

source /etc/profile

BZRDIR=$1
if [ "$1" == "" ]
then
        BZRDIR="/etc"
fi
cd $BZRDIR

if [ `bzr status | wc -l` == 0 ]
then
        #echo No changes
        exit 0
fi

echo "Changes in $1 were made:"
echo ""
echo '##################################################'
echo ""
bzr add . -v
bzr status
echo ""
echo '##################################################'
echo ""
bzr diff


DATUM="`date +%Y-%m-%d/%H:%M:%S`"
echo "Commiting to BZR with $DATUM"
bzr commit -m "$DATUM"

6. Kommentare

bazaar-ng/KonfigurationsVerwaltung (zuletzt geändert am 2008-07-14 11:38:41 durch RomanKreisel)