Inhaltsverzeichnis

ETCkeeper

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.

Installation

Zunächst muss GIT installiert werden:

# sudo apt-get install git-core

Danach wird noch der ETCkeeper installiert:

# sudo apt-get install etckeeper

Konfiguration

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.

Commit

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.

Version einer Datei zurücksetzen

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!

Entferntes GIT-Repository einrichten und automatischen Push einrichten

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.

Root SSH-Keys

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:

  1. Als root auf der Shell anmelden mit sudo -s
  2. SSH-Keys mit ssh-keygen erstellen
  3. PublicKey id_rsa.pub aus dem Verzeichnis /root/.ssh/ kopieren.

Remote Repository einrichten

Im 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

Repository initial pushen

sudo git push -u origin master

Push automatisieren

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

1) engl. für „Blödmann“
2) Version Controll System = Versionskontrollsystem