Ich habe diverse Rechner, deren /etc ich auf diese Weise sichern und will und einen Rootserver welchen ich als zentrales Repository zur Speicherung benutzen möchte.
Als erstes wird das dazu das SVN Repository angelegt:
uwe@maninthemiddle ~ $ svnadmin create /home/uwe/repos
Mehr muss auf dem Server auch nicht mehr gemacht werden. Der Rest wird vom Clientrechner (in meinem Fall mit dem Namen "Krusty" über SSH erledigt. Dazu bietet es sich an Key-basierende Authentifizierung für SSH zu benutzen. Auch hier sei auf die vielen guten Tutorials im Web verwiesen. Da ich SSH normalerweise als unprivilegierter Anwender benutze /etc aber nur als root vollständig gelesen werden kann, sollte das SSH profil von root dementsprechend angepasst werden. Dies beinhaltet den richtigen Benutzernamen, sowie eine identity Datei welche den private key enthält. Die entsprechende Konfigurationsdatei /root/.ssh/config sieht bei mir dementsprechend so aus:
Host maninthemiddle.de
User uwe
IdentityFile /home/uwe/.ssh/id_rsa
Nun muss im Repository ein Verzeichnis angelegt werden in dem die Dateien später landen sollen:
krusty etc # svn mkdir svn+ssh://maninthemiddle.de/home/uwe/repos/etc-krusty
Dieses wird im Verzeichnis /etc auf dem lokalen Rechner ausgecheckt und ist damit mit diesem verbunden:
krusty etc # svn co svn+ssh://maninthemiddle.de/home/uwe/repos/etc-krusty /etc
Mit svn add können nun Dateien hinzugefügt und mit svn commit ins Repository hochgeladen werden. Unschön ist dabei allerdings, dass nicht hinzugefügte Dateien bei svn status mit einem Fragezeichen auftauchen und die Übersichtlichkeit stark leidet:
krusty etc # svn status
M .
? xinetd.conf
? opera6rc.fixed
? nanorc
? racoon
? java-config-2
...
Bei der Softwareentwicklung sorgt dieser Mechanismus dafür, dass keine Datei vergessen wird. Hier tauchen in diesem Fall jedoch in der Mehrzahl Dateien auf die gar nicht ins Repository kommen sollen. Um den Überblick zu behalten habe ich deshalb SVN angewiesen alle Dateien zu ignorieren, die nicht eingecheckt sind.
krusty etc # svn propset svn:ignore '*' /etc
Für alle anderen Rechner einfach die gleichen Schritte durchführen, womit Probleme mit gelöschten/verschlimmbesserten Konfigurationsdateien der Vergangenheit angehören sollten.
Nachtrag:
Gerade unter gentoo sollte auch die aktuelle Kernelkonfiguration gesichert werden. Ich setze dazu einfach einen Symlink nach /etc und füge diese Datei zum Repository hinzu.
barney etc # ln -s /usr/src/linux/.config kernelconfig
barney etc # svn add kernelconfig
A kernelconfig
Nachtrag 2:
Die alten Versionen einzelner Dateien kann man mittels svn export -r REVISION holen:
uwe@barney ~/tmp $ svn log svn+ssh://maninthemiddle.de/home/uwe/repos/etc-barney/lilo.conf
------------------------------------------------------------------------
r18 | uwe | 2009-11-26 21:49:23 +0100 (Do, 26. Nov 2009) | 1 Zeile
------------------------------------------------------------------------
r17 | uwe | 2009-11-26 21:43:01 +0100 (Do, 26. Nov 2009) | 1 Zeile
------------------------------------------------------------------------
uwe@barney ~/tmp $ svn export -r 17 svn+ssh://maninthemiddle.de/home/uwe/repos/etc-barney/lilo.conf
A lilo.conf
Export abgeschlossen.
Nachtrag 3:
Um z.B. die /etc/X11/xorg.conf ins Repository hinzufügen zu können muss auch das Verzeichnis /etc/X11/ im Repository vorhanden sein. Subversion fügt mit svn add /etx/X11 allerdings auch alle Dateien unterhalb dieses Verzeichnisses ein. Stattdessen möchste man die Option --non-recursive benutzen:
barney etc # svn add --non-recursive X11/
A X11
Versehentlich ins Repository aufgenomme Dateien kann man mit svn delete wieder aus diesem entfernen, allerdings löscht svn dann auch die lokale Kopie. Hier sollte man --keep-local als Option mitgeben:
barney portage # svn delete --keep-local savedconfig/
D savedconfig/sys-apps/busybox-1.13.2
D savedconfig/sys-apps
D savedconfig


Kommentare