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