Konfigurationen verwalten mit Etckeeper

Aus LinuxUser 06/2017

Konfigurationen verwalten mit Etckeeper

© alexmillos, 123RF

Versionitis

Etckeeper bringt Ordnung in die globalen Konfigurationsdateien und beugt dabei Problemen mit versehentlich gelöschten Dateien vor.

Gemäß dem Filesystem Hierarchy Standard (FHS) [1] teilen sich die Konfigurationsdateien in die persönlichen, auf einen Nutzer bezogenen Anpassungen im Home-Verzeichnis sowie auf die globale Konfiguration in /etc auf. Im Linux-Dateibaum stand das Verzeichnis /etc früher für “et cetera”; heute wird es auch als “editable text configuration” interpretiert, da sich dort im Lauf der Jahre zunehmend Konfigurationsdateien ansammelten. Linux und andere unixoide Systeme haben hier den Vorteil, Konfigurationen in leicht les- und editierbaren Textdateien abzulegen.

In /etc und seinen Unterverzeichnissen tummeln sich daher viele Dateien, die für interessierte Anwender eine Vielfalt an Einstellmöglichkeiten bieten. Hier liegen unter anderem die Init-Skripte beziehungsweise zunehmend die Konfigurationsdateien von Systemd, die Einstellungsdateien von Ein- und Ausgabegeräten sowie wichtige schützenswerte Dateien wie /etc/shadow. Die Nachverfolgbarkeit von Änderungen stellt hier ein wichtiges Ordnungselement dar.

Problemlösung

Wir wären nicht bei Linux, wenn sich dieses organisatorischen Problems nicht jemand angenommen hätte: Das vom prominenten Debian-Entwickler Joey Hess [2] geschaffene Programm Etckeeper [3] übernimmt in solchen Situationen die Aufgabe, Änderungen zu speichern und zu versionieren. Dabei macht sich Etckeeper sowohl auf Desktopsystemen wie auch auf Servern nützlich, wo des Öfteren Änderungen an der Konfiguration von Apache, MySQL und anderen Paketen anfallen.

Auch Entwickler und Paket-Maintainer ändern Konfigurationen in neuen Versionen der von ihnen betreuten Pakete. Die Paketverwaltung fragt zwar normalerweise beim Aktualisieren solcher Pakete ab, ob Sie Ihre individuell angepasste Version beibehalten oder die neue Variante des Maintainers übernehmen möchten. Eine in der Eile getroffene falsche Wahl führt jedoch unter Umständen zum Verlust umfangreicher individueller Anpassungen.

Git verwaltet

Bei Etckeeper handelt es sich um eine Sammlung von Werkzeugen, die Änderungen an /etc in einer Versionsverwaltung [4] speichert, sodass Sie jederzeit den Verlauf der Änderungen kontrollieren und Modifikationen nötigenfalls zurücknehmen können. Dabei lässt sich das System – bei Kenntnis einiger rudimentärer Git-Befehle – einfach bedienen und klinkt sich in Paketmanager wie Apt ein, um Änderungen in /etc bei Upgrades automatisch zu erfassen. Es unterstützt dabei die VCS-Systeme Git, Mercurial, Bazaar und Darcs.

Da Git heute das am weitesten verbreitete VCS ist, beschränkt sich der Artikel auf dieses Werkzeug. Git verwaltet Versionen in Repositories nahezu perfekt. Da es jedoch eigentlich zur Softwareentwicklung dient, fehlt ihm die Möglichkeit, Metadaten wie Dateirechte korrekt zu bewahren. Etckeeper dagegen verfügt über diese Fähigkeit und macht das Werkzeug damit für den Einsatz in /etc erst so richtig nutzbar.

Installation

Unter Debian und seinen Derivaten richten Sie Etckeeper über den Befehl apt install etckeeper ein, wobei die Paketverwaltung Git als Abhängigkeit mitinstalliert. Etckeeper findet sich unter anderem auch in den Paketquellen von Fedora, Arch Linux, OpenSuse, Gentoo und NetBSD.

Im nächsten Schritt konfigurieren Sie das Paket, indem Sie mit Root-Rechten nano /etc/etckeeper/etckeeper.conf aufrufen. Bei Debian und Ubuntu ist Git als VCS bereits voreingestellt. Die weiteren Einstellungen zur Zusammenarbeit mit Apt, Yum, DNF oder Zypper sowie DPKG, RPM und Pacman sind bereits je nach installiertem System entsprechend richtig gesetzt. Etckeeper schreibt standardmäßig Änderungen einmal täglich und jeweils bei Benutzung von Apt oder einem grafischen Paketmanager in das Repository (Abbildung 1).

Abbildung 1: Die Konfigurationsdatei von Etckeeper müssen Sie nur für den manuellen Modus editieren.

Abbildung 1: Die Konfigurationsdatei von Etckeeper müssen Sie nur für den manuellen Modus editieren.

Erste Änderung

Etckeeper erzeugt seine Infrastruktur während der Installation unter /etc/.git/, wo es künftig die Versionierung von Änderungen speichert (Abbildung 2). Die Berechtigungen der Dateien legt das System unter /etc/.etckeeper ab.

Abbildung 2: Etckeeper legt im versteckten Verzeichnis <code>/etc/.git</code> seine Infrastruktur an.

Abbildung 2: Etckeeper legt im versteckten Verzeichnis /etc/.git seine Infrastruktur an.

Um nun zu sehen, wie Etckeeper arbeitet, editieren Sie die Datei /etc/debian_version oder ein ähnlich kleines File. In debian_version steht lediglich 8.0 oder 9.0 für die installierte Debian-Version. Hier haben wir als Kommentar den Satz # Dies ist die derzeitige Version von Debian-Testing eingefügt (Abbildung 3).

Abbildung 3: Die erste &Auml;nderung: ein kurzer Kommentar in <code>/etc/debian_version</code>.

Abbildung 3: Die erste Änderung: ein kurzer Kommentar in /etc/debian_version.

Zwei Modi

Sie haben die Wahl, Etckeeper automatisch zu verwenden oder manuell zu bedienen, um mehr Kontrolle zu haben. Im automatischen Modus, der die Voreinstellung darstellt, sichert Etckeeper einmal täglich (nachts) alle Änderungen in /etc. Zusätzlich schreibt es vor und nach jedem Einsatz von Apt (auch bei Verwendung grafischer Paketmanager) eine Sicherung (Abbildung 4). Egal, mit welcher Methode Sie arbeiten möchten: Vor dem ersten Commit sollten Sie die Befehle aus Listing 1 ausführen.

Abbildung 4: Im automatischen Modus versioniert Etckeeper bei jedem Apt-Lauf &Auml;nderungen an <code>/etc</code>.

Abbildung 4: Im automatischen Modus versioniert Etckeeper bei jedem Apt-Lauf Änderungen an /etc.

Listing 1

$ git config --global user.name "Name"
$ git config --global user.email "E-Mail"
$ git config --global core.editor "nano"   # oder ein anderer Editor
$ git config --global -l
$ cd /etc
$ sudo etckeeper init

Falls Sie mehr Kontrolle und Übersicht möchten, steuern Sie Etckeeper mit wenigen einfachen Git-Befehlen manuell. Dazu müssen Sie sich immer als Root im Verzeichnis /etc befinden. Um den automatischen Modus auszuhebeln, öffnen Sie die Datei etc/etckeeper/etckeeper.conf in einem Editor und entfernen die Kommentar-Rauten in den Zeilen aus Listing 2, gefolgt von einem git init auf der Kommandozeile.

Listing 2

[...]
AVOID_DAILY_AUTOCOMMITS=1
AVOID_COMMIT_BEFORE_INSTALL=1
[...]

Beide Methoden lassen sich jedoch auch kombinieren. Dabei sichert das System dann automatisch eventuell vergessene Änderungen.

Mehr Kontrolle

Nun lässt sich überprüfen, was das Tool seit seiner Installation getan hat. Dazu dient der Befehl git status. Er sollte nun die Änderungen an etckeeper.conf sowie der Datei debian_version anzeigen (Abbildung 5). Noch sind die Änderungen jedoch erst vorgemerkt, nicht aber geschrieben.

Abbildung 5: Mit <code>git status</code> &uuml;berpr&uuml;fen Sie vor dem Commit die anstehenden &Auml;nderungen.

Abbildung 5: Mit git status überprüfen Sie vor dem Commit die anstehenden Änderungen.

Dazu dient der Commit-Befehl git commit -a -m "Beschreibung". Es ist sinnvoll, den Commits jeweils eine aussagekräftige Beschreibung mitzugeben, um sie später bei Bedarf besser zuordnen zu können (Abbildung 6). Dateien, die Sie nicht versionieren möchten, tragen Sie in /etc/.gitignore ein. Es schadet nicht, ab und an das Repository mit git gc --auto ein wenig aufzuräumen. Dabei komprimiert das System den Inhalt und entfernt überflüssige Dateien.

Abbildung 6: Ein ausf&uuml;hrlicher Kommentar beim Commit hilft sp&auml;ter beim Auffinden von &Auml;nderungen.

Abbildung 6: Ein ausführlicher Kommentar beim Commit hilft später beim Auffinden von Änderungen.

Git-Befehle

Einen Überblick über die bereits getätigten Commits verschafft Ihnen der Befehl git log oder auch – spezifischer – git log /etc/hosts (Abbildung 7). Auf diese Weise sehen Sie neben dem von Ihnen verfassten Kommentar, dem sogenannten Changelog, auch die dazugehörigen Revisionsnummern. Sie erleichtern es, bestimmte Revisionen zu finden, zu vergleichen oder rückgängig zu machen.

Abbildung 7: Mit <code>git log</code> listen Sie alle vorgenommenen Commits samt Revisions-ID auf.

Abbildung 7: Mit git log listen Sie alle vorgenommenen Commits samt Revisions-ID auf.

Um etwa einen Commit näher zu betrachten, benötigen Sie die ersten sechs Zeichen der Revisions-ID, die im Beispiel aus Abbildung 8 40f0de lauten. Damit nehmen Sie dann die genauen Änderungen durch Eingabe von git show 40f0de in Augenschein.

Abbildung 8: Mit <code>git show</code> und der ID eines Commits wird dieser detailliert angezeigt.

Abbildung 8: Mit git show und der ID eines Commits wird dieser detailliert angezeigt.

Möchten Sie zwei Commits vergleichen, hilft git diff weiter. Dabei ist es sinnvoll, die sechs Zeichen des zeitlich weiter zurückliegenden Commits zuerst anzugeben. Das erreichen Sie etwa mit git diff 2d6617..40f0de (Abbildung 9).

Abbildung 9: Der Vergleich zweier Commits gelingt mit <code>git diff</code>.

Abbildung 9: Der Vergleich zweier Commits gelingt mit git diff.

Fehler zurücknehmen

Stellen Sie vor einem Commit etwa per git status fest, dass Sie bei einer Änderung einen Fehler gemacht haben, so nehmen Sie diesen mit dem Befehl git checkout zurück. Dabei lässt sich der gesamte Commit revidieren oder nur Teile davon. Der Befehl git checkout /etc/hosts würde nur eine nicht ins Git geschriebene Änderung in dieser Datei zurücknehmen. Geben Sie hingegen nur git checkout ein, spielt das System alle noch nicht geschriebenen Änderungen zurück.

Ist ein Commit bereits abgesetzt, bevor der Fehler auffällt, müssen Sie anders vorgehen: Der Befehl git revert HEAD nimmt den fehlerhaften Commit wieder komplett zurück (Abbildung 10). Danach lässt sich die zurückgenommene Änderung nicht mehr nachvollziehen.

Abbildung 10: &Auml;nderungen lassen sich mit <code>git revert</code> auch nach dem Commit zur&uuml;cknehmen.

Abbildung 10: Änderungen lassen sich mit git revert auch nach dem Commit zurücknehmen.

Fazit

Etckeeper bietet ein probates Mittel, um Konfigurationsänderungen im Verzeichnis /etc zu versionieren. Dabei sollten Sie nicht vergessen, dass in diesem Verzeichnis Dateien wie beispielsweise shadow liegen, die Informationen vorhalten, die unter der Kontrolle von Root bleiben sollten. Wenn Sie also das Repository exportieren, achten Sie auf den Schutz dieser Daten.

Im automatisierten Modus müssen Sie Etckeeper lediglich installieren und dürfen dann sofort loslegen. Möchten Sie mehr Kontrolle, schreiben Sie Änderungen manuell ins Repository. Bei letzterer Methode helfen gute Kommentare, Änderungen später zu identifizieren; automatisierte Commits erzeugen prinzipbedingt lediglich generische Changelogs.

Etckeeper beherrscht weit mehr Funktionen, als dieser Artikel anreißt. So lässt sich etwa das Repository auf einem Server oder nach GitHub auslagern beziehungsweise auf andere mehr oder weniger öffentliche Git-Repositories umleiten. Die Grenzen des Machbaren definiert der Befehlsumfang des jeweiligen VCS. Möchten Sie tiefer in die Materie eindringen, dann empfiehlt sich die Lektüre der Dokumentation von Joey Hess [5] und der Manpage zu Etckeeper. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 06/2017 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben