ETCkeeper ist ein sehr nützliches Programm welches das kritische Verzeichnis etc/ unter Versionskontrolle stellt. Dies ist nützlich bei der Installation von neuen Packages, Änderungen in der Konfig und bei allgemeinen Backups. ETCkeeper wird außerdem automatisch ausgeführt wenn per aptitude
# sudo apt-get intstall "package"
neue Pakete installiert werden. Für ETCkeeper können unterschiedliche Versionverwaltungssysteme genutzt werden, am meisten Sinn macht jedoch GIT1), da es als einziges VCS2) auch symbolische Links verarbeitet und versionieren kann.
Zunächst muss GIT installiert werden:
# sudo apt-get install git-core
Danach wird noch der ETCkeeper installiert:
# sudo apt-get install etckeeper
Damit der ETCkeeper auch weiß was für ein VCS er nutzt muss ihm das in der Konfiguration mitgeteilt werden. Dazu wird die Konfigurationsdatei bearbeitet:
# sudo vi /etc/etckeeper/etckeeper.conf
Da standardmäßig das VCS „bazaar“ genutzt wird muss dieses auskommentiert werden und git angegeben werden. Die Konfiguration sieht dann folgendermaßen aus:
# The VCS to use. # VCS="hg" VCS="git" #VCS="bzr" # VCS="darcs" # Options passed to git commit when run by etckeeper. #GIT_COMMIT_OPTIONS="" # Options passed to hg commit when run by etckeeper. #HG_COMMIT_OPTIONS="" # Options passed to bzr commit when run by etckeeper. #BZR_COMMIT_OPTIONS="" # Options passed to darcs commit when run by etckeeper. #DARCS_COMMIT_OPTIONS="" # Uncomment to avoid etckeeper committing existing changes # to /etc automatically once per day. #AVOID_DAILY_AUTOCOMMITS=1 # Uncomment to avoid etckeeper committing existing changes to # /etc before installation. It will cancel the installation, # so you can commit the changes by hand. #AVOID_COMMIT_BEFORE_INSTALL=1 # The high-level package manager that's being used. # (apt, pacman-g2, yum etc) HIGHLEVEL_PACKAGE_MANAGER=apt # The low-level package manager that's being used. # (dpkg, rpm, pacman-g2, etc) LOWLEVEL_PACKAGE_MANAGER=dpkg
Damit der ETCkeeper funktioniert muss zunächst einmal ein lokales GIT-Repository angelegt werden und die Grundkonfiguration geschrieben werden.
Die Initialisierung geschieht im Verzeichnis /etc
einfach über
# sudo etckeeper init
Es sollte die Meldung Initialized emtpy Git repository in /etc/.git/
erscheinen.
Danach muss der Inhalt von /etc noch zur Versionskontrolle hinzugefügt werden:
# cd /etc # sudo git status # sudo git commit -m "initial checkin" # sudo git gc //gc komprimiert das Repository um Platz zu sparen.
Nachdem diese konfiguration vorgenommen wurde arbeitet etckeeper im Hintergrund und versioniert automatisch bei der installation von Paketen.
Bei manuellen Änderungen in der Konfiguration muss folgendermaßen vorgegangen werden um Änderungen zu versionieren:
# sudo etckeeper commit
Es öffnet sich dann ein VI-Fenster in dem eine commit Message angegeben werden muss!
Die Zeilen mit Hashtag am Anfang dienen nur zur Information und werden nicht als Message comitted.
Nach Eingabe eines kurzen und präzisen Kommentares drückt man ESC
, danach wq
und bestätigt mit Enter
.
Danach erhält man auf dem Bildschirm eine ausgabe, welche Dateien committed wurden. Hat man keinen Kommentar angegeben meldet etckeeper dies.
Falls eine Datei in /etc zurückgesetzt werden kann dies einfach mit folgendem Befehl realisiert werden: Zuerst muss im Log nachgesehen werden welche Version wieder geholt werden soll:
# git log
Im Log kann man dann einsehen welche Version man haben will. Hierzu dienen die ersten Stellen des langen Hash-Codes.
Zurückgesetzt wird die Version dann mit
# sudo git checkout <Die ersten paar Ziffern der alten Version> --<File das zurückgesetzt werden soll>
Soll dann bspw. wieder auf die neueste Version zurückgegriffen werden, so geschieht dies mit:
git checkout master
Achtung: hierbei werden ALLE Dateien aus dem master-commit geholt und überschrieben!
Um eine noch bessere Datensicherheit zu erlangen macht es Sinn, das GIT-Repository auf einen entfernten Server zu pushen. Die Einrichtung hierfür ist nicht schwer. Eine Möglichkeit GIT-Repositories zu Hosten ist Installation Gitolite Versionsverwaltungsserver.
Da Commit und Push des etckeepers nur mit Rootrechten möglich ist, braucht man für den SSH-Zugriff auf das entfernte GIT-Repository SSH-Keys für den Benutzer root:
sudo -s
ssh-keygen
erstellenIm Verzeichnis /etc folgenden Befehl mit den entsprechenden Serverdaten ausführen (evtl. als root):
git remote add origin git@example.com:my_project
wobei hier git der Nutzer des Gitbenutzers ist und my_project das Repository. Läuft der Git-Server nicht auf Port 22 so nutzt man folgenden Befehl:
git remote add origin ssh://git@example.com:[PORT]/my_project
sudo git push -u origin master
In der Config des etckeepers müssen nun noch zwei neue Dateien erstellt werden:
In beide Dateien fügt man folgenden Inhalt ein:
#!/bin/bash set -e git push origin master
Ein deutscher Artikel über ETCkeeper: http://www.linux-magazin.de/Online-Artikel/Etckeeper-stellt-Systemkonfiguration-unter-Versionskontrolle
Offizielle Seite: http://kitenet.net/~joey/code/etckeeper/
Offizielle Entwicklerbeschreibung und Tutorial: http://git.kitenet.net/?p=etckeeper.git;a=blob_plain;f=README;hb=27ca6c9eb668c9ab55cf65f8e620893589536c84