Inhalt
Inhaltsverzeichnis
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:
- Keine alten Konfigurations-Dateien wie z.B. smb.conf.old-20041224
- Logs, um zu überprüfen, welche Veränderungen eine Datei durchlaufen hat
- "Zeitmaschine", um alte Versionen zurückzuholen
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
- Vorschläge zur Veränderung des Skriptes:
- In Zeile 17 das '$1' durch '$BZRDIR' zu ersetzen
- Das commit mit '-m "$(bzr status)"' durchführen, um im Log eine bessere/schönere Übersicht zu haben.
- Da es sich beim Verzeichnis /etc um sensible Daten handeln kann, empfiehlt es sich, die Rechte des Verzeichnisses /etc/.bzr so zu setzen, daß nur der Besitzer des .bzr-Verzeichnisses (meist root) darauf zugreifen kann, z.B. durch ein "chmod 700 /etc/.bzr".
Das Script läuft übrigens inzwischen seit Erstellung des Artikels bis heute auf allen 4 von mir betreuten Servern. Es hat mir in dieser Zeit schon oft gute Dienste erwiesen. Nicht zuletzt habe ich damit so manche Änderung von co-admins festgestellt die unsinnig waren und mir in einem schönen kurzen E-Mail mitgeteilt wurden. Ich kann nur jedem empfehlen, sich damit auseinanderzusetzen. Die Installation ist in 4-5 Minuten erledigt und der Nutzen ist IMHO enorm. -- RomanKreisel 2008-07-14 11:38:40