etckeeper und git push – mit branches

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.