Auf den ersten Blick mag es vielleicht schräg erscheinen, /etc zu versionieren und die Konfigurationen in git abzulegen. Aber beim zweiten Blick macht es total Sinn, da man so die Änderungen am Besten verfolgen kann – und im schlimmsten Fall sogar schnell auf eine alte Version eines Files zugreifen kann. Das Einzige das ich nicht machen würde, wäre dieses Repository dann auf Github zu stellen – aber wenn man einen eigenen Git-Server im Haus hat, kann man durchaus dort einen zentralen Speicher haben.
Um etckeeper zu initialisieren, gehen wir als root oder via sudo wie folgt vor:
etckeeper init
Etckeeper ist nun eigentlich bereit für unsere Schandtaten. Nur stört mich persönlich das Vorhandensein von shadow und shadow-. Also entfernen wir diese Dateien mit
git rm -r --cached shadow*
und gönnen ihnen einen Eintrag in der .gitignore. Der erste Commit wäre somit bereit:
git commit -a -m 'initial /etc commit'
In Zukunft werden wir jedoch
etckeeper commit
verwenden, damit die Sache auch rund läuft.
Wie der Titel verspricht, geht es nun um das branchen. Wir machen einen Branch mit dem Namen des Hosts und hängen diesen an unser bestehendes oder gerade angelegtes Repository am zentralen Git:
git branch -m master $HOSTNAME git remote add origin git@git.myserver.com:path/to/repo.git git push --set-upstream origin $HOSTNAME
Das war’s dann auch schon. Praktisch nun, wenn man zwei Konfigurationsdateien vergleichen will, nutzt man:
git diff origin/server1 origin/server2 -- file
Sauber, oder? Jeder der mich kennt wird wissen, dass ich solche Dinge dann auch noch gerne automatisiere um dem Vergessen vorzubeugen. Dies geht am Besten in einem Hook für etckeeper in /etc/etckeeper/commit.d/60-push mit folgendem Inhalt:
#!/bin/sh git push --set-upstream origin $HOSTNAME
Ausführbar machen und ab die Post.
deno says:
Why etckeeper and not just regular Git?
ToeiRei says:
mostly because I forget to commit
dreamworks says:
Danke Dir; kam von SVN und probier gerade etwas mit git rum… Denke ich hab’s langsam geschnallt auch wenn ich noch nicht ganz mit der Idee klarkomme, aus EINEM Repo viele viele kleine zu machen…
branches mit etckeeper war auch mein Gedanke, fühlte mich aber etwas alleine – bis ich deinen Artikel gefunden habe… Hier sind ca. 10 Hosts am Start.. Mal gucken, wie sich das bewährt..
Meine Tech-Geek-Jungs meinen ja, ich soll ansible benutzen, aber nunja :)
vbauer says:
Keine Ursache. Ich hatte ähnliche Probleme. Durch Git kann ich die Branches auch noch besser vergleichen und so Config-Unterschiede besser sehen, wenn es mal drauf ankommt.
Jim says:
@deno Use etckeeper instead of regular git because etckeeper tracks file permissions more accurately and supports empty directories, which plain git does not.