====== 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 GIT((engl. für "Blödmann")), da es als einziges VCS((Version Controll System = Versionskontrollsystem)) 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 --
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 [[software:gitolite|]].
==== 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**:
- Als **root** auf der Shell anmelden mit ''sudo -s''
- SSH-Keys mit ''ssh-keygen'' erstellen
- 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:
* **/etc/etckeeper/commit.d/60vcs-commit-push**
* **/etc/etckeeper/post-install.d/60vcs-commit-push**
In beide Dateien fügt man folgenden Inhalt ein:
#!/bin/bash
set -e
git push origin master
===== Weiterführende Links und Infos =====
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]]
{{tag>versionsverwaltung backup }}