etckeeper: Konfiguration in git versionieren

Beim Entwickeln von Software ist es völlig selbstverständlich, die Dateien, an denen man arbeitet, zu versionieren mit git oder ähnlichem. Beim Administrieren kommt das nur langsam “in Mode” – v.a. im Zusammenhang mit automatischem Deployment – z.B. mit Ansible, Infrastructure as a service (Iaas) bzw. Infrastructure as Code (IaC). Aber auch bei der “klassischen” Administration halte ich es für sehr hilfreich, (Konfigurations-) Dateien explizit zu versionieren. Mit etckeeper wird das gut vereinfacht.

etckeeper stellt alle Dateien in /etc (bis auf definierte, sinnvolle Ausnahmen) unter Versionskontrolle, checkt auf Wunsch automatisch regelmäßig und/oder vor Package-Upgrades ein.

Im Netz gibt es diverse Anleitungen das einzurichten (z.B. bei Thomas Krenn und Ubuntu) – ist auch wirklich einfach. Daher wiederhole ich das nicht nochmal. Hier nur ein paar Dinge, die mir gefallen:

  • Automatischer täglicher Checkin (abschaltbar in /etc/etckeeper/etckeeper.conf).
  • Verzeichnisse und Dateirechte werden expizit in /etc/.etckeeper gespeichert.
  • Prüft vor Package-Upgrade, ob die etc-Konfig-Files eingecheckt sind und tut dies ggf. (abschaltbar).
  • Erweiterbar via Hooks in /etc/etckeeper/. Dort liegt für jedes Kommando ein Verzeichnis mit allen Skripten, die ausgeführt werden. z.B. /etc/etckeeper/commit.d/
  • Automatischer Push der commits an ein remote-Repo. Vorsicht: Da sollte man sich natürlich gut überlegen, wohin man das pusht – es können ja sensible Daten wie Passwörter enthalten sein. Also Vorsicht bei öffentlichen Servern!

Sichern von Dateien außerhalb von /etc

Wenn man Files und Verzeichnisse von außerhalb /etc ebenfalls versionieren möchte, kann man das z.B. so machen:

  • Mirror-Skript in /etc/etckeeper/commit.d/20mirror-outside-files anlegen (s.u.)
  • Gewünschte Verzeichnisse und Dateien dort eintragen.

Nun werden bei jedem commit die entsprechenden Datein nach /etc/etckeeper.mirror.d/ kopiert und dort ebenfalls versioniert.

Einrichtung via Ansible

Danach noch je Server:

  • Repo https://myremote.repo/config/HOSTNAME.git anlegen
  • Auf dem Server: git -C /etc push -u origin --all

Schreibe einen Kommentar

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