Etc-Verzeichnis mit etckeeper versionieren

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Die Versionierung von Konfigurationsverzeichnissen empfiehlt sich aus Dokumentations- und Backup-Sicht. Zum einen werden alle Änderungen an Konfigurationsdateien mitprotokolliert und versioniert, zum anderen können frühere Versionen im Fehlerfall wieder hergestellt werden. Ganz ohne Vorsicht sind diese Features nicht zu genießen, da sich schützenswerte Informationen im etc-Verzeichnis befinden. Auf Verschlüsselung und restriktive Dateirechte bei der Übertragung bzw. Sicherung des Repos, in welchem das etc-Verzeichnis versioniert wird, ist daher zu achten.

Etckeeper installieren

Der Source-Code von etckeeper kann vom Git-Repository unter [1] bezogen werden. Unter Ubuntu empfiehlt sich die Installation aus den Repositories:

:~$ sudo apt-get install git 
:~$ sudo apt-get install etckeeper

Etckeeper konfigurieren

Anschließend wird in der etckeeper-Konfiguration Git eingetragen:

:~$ sudo vi /etc/etckeeper/etckeeper.conf
# The VCS to use.
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"
[...]

Weitere wichtige Optionen sind AVOID_DAILY_AUTOCOMMITS und AVOID_COMMIT_BEFORE_INSTALL. Diese sind beide per Default deaktiviert. Wer sich mit etckeeper näher beschäftigt und für alle Änderungen sinnvolle Commits erstellen möchte, sollte diese aktivieren.

AVOID_DAILY_AUTOCOMMITS=1
AVOID_COMMIT_BEFORE_INSTALL=1

Vor der ersten Initialisierung sollten noch folgende GIT Einstellungen (siehe Git Grundbefehle#Konfiguration von User- und E-Mail-Informationen) vorgenommen werden. Ansonsten kann es bei der Verwendung von git zusammen mit sudo zum Problem kommen, dass als Commiter immer "root" eingetragen wird.

git config --global user.name "Test User"
git config --global user.email "tktest@example.com"
git config --global core.editor "vim"

Daraufhin kann das Repository initialisiert werden:

:~$ cd /etc/
:/etc$ sudo etckeeper init
Initialized empty Git repository in /etc/.git/

Beim ersten commit werden alle vorhandenen Dateien in etc zum Repo hinzugefügt und von nun an versioniert:

:/etc$ sudo etckeeper commit "Initial etc commit"

Etckeeper verwenden

Wir nun eine Datei editiert, werden mittels Git die Änderungen protokolliert:

:/etc$ sudo vi /etc/phpmyadmin/apache.conf 
:/etc$ sudo git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   phpmyadmin/apache.conf
#
no changes added to commit (use "git add" and/or "git commit -a")

Die Änderung kann anschließend wieder verworfen oder ins Repo gespielt werden:

:/etc# git commit -a -m "Changed phpmyadmin apache.conf"
[master d589a0a] Changed phpmyadmin apache.conf
[...]
:/etc# git log
commit d589a0a6dfecbb19a5e24be0d6f3a02d2e915d28
Author: root <root@icinga.(none)>
Date:   Thu Nov 8 15:21:53 2012 +0100
 
    Changed phpmyadmin apache.conf
[...]

Datei/Verzeichnis Metadaten

Da git an sich keine vollständigen Datei/Verzeichnis Metadaten aufzeichnet, wurde von etckeeper ein pre-commit hook (/etc/.git/hooks/pre-commit) eingeführt. Dieser zeichnet in der Datei /etc/.etckeeper die chmod und chgrp Befehle auf, für alle Dateien die nicht den Standardrechten entsprechen.

...
maybe chmod 0755 './apticron'
maybe chmod 0644 './apticron/apticron.conf'
maybe chgrp daemon './at.deny'
maybe chmod 0640 './at.deny'
maybe chmod 0644 './bash.bashrc'
maybe chmod 0644 './bash_completion'
maybe chmod 0755 './bash_completion.d'
...

Datei zu gitignore hinzufügen

Dateien, die nicht per git im /etc/ Verzeichnis versioniert werden sollen, werden zur Datei /etc/.gitignore hinzugefügt. Darin befindet sich bereits eine Liste an Dateien, die standardmäßig von etckeeper ausgeschlossen sind. Nach den Pfaden, die von etckeeper verwaltet wrden - gekennzeichnet durch einen Kommentar # end section managed by etckeeper, werden die eigenen Pfade eingetragen. Das folgende Beispiel nimmt den Ordner vmware-tools' einer VMware-Gast-Maschine von der Versionierung aus:

:/etc$ sudo vi .gitignore
[...]
# end section managed by etckeeper
# begin manually added section
vmware-tools/*

Da sich die Dateien bereits im Index befinden, müssen sie vom diesen entfernt werden - git status zeigt immer noch an, dass sich vmware-tools/locations geändert hätte. Ein git rm --cached entfernt die Datei nur vom Index und lässt die Datei selbst unberührt:[1]

:/etc$ sudo git rm --cached vmware-tools/locations
rm 'vmware-tools/locations'
:/etc$ sudo git add .gitignore
:/etc$ sudo git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   .gitignore
#	deleted:    vmware-tools/locations
#
:/etc$ sudo git commit -a -m "Removed vmware-tools"
[master 79111f9] Removed vmware-tools
 3 files changed, 3 insertions(+), 4082 deletions(-)
 delete mode 100644 vmware-tools/locations

Einzelnachweise

  1. git-rm documentation (kernel.org)


Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung Web Operations & Knowledge Transfer, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2012 ist Georg bei der Thomas-Krenn.AG beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.

Icon-GooglePlus.png Icon-Twitter.png Icon-Xing.png 

Das könnte Sie auch interessieren

Git Server-Konfiguration
Git Tags
Git-annex Archiv mit git-annex assistant