In der letzten Zeit gab es einige Threads mit dem Thema Netzwerk. Wenn man mit den verschiedenen Möglichkeiten experimentiert kann man schnell den Überblick über die vielen Dateien verlieren. Irgendwann sind es zu viele oder falsche für ein Tool oder es fehlen welche. Damit endet man schnell bei "gestern ging es noch..."
. Mit dem Tool zur Versionsverwaltung
git kann man sich das Leben erleichtern. Dazu brauch man nur einen Bruchteil der Funktionen, die git eigentlich bietet. Alles wie unten beschrieben wird als root ausgeführt.
Praktisch alles wichtige wird in /etc und den Unterordnern abgelegt. Also wechselt man in dieses Verzeichnis. Dort wird ein git Repository angelegt.
Das erzeugt ein verstecktes Verzichnis .git in dem git alles verwaltet. Man kann sich noch eine Datei /etc/.gitignore anlegen mit einer Liste von Dateien, die git ignorieren soll. Das brauchen wir aber nicht. Nach dem allerersten Starten von git werden einige Dinge abgefragt, die dann in einer Konfigurationsdatei abgelegt werden. Details habe ich vergessen, nur ist der Prozess problemlos.
Mit
werden alle Dateien aus /etc und den Unterverzeichnissen in das Repository einbezogen. Nun müssen sie von git für das erste Commit noch versioniert werden. Am einfachsten geht das mit
Code: Alles auswählen
git commit -a -m "Ausgangspunkt oder etwas anderes ..."
Mit
bekommt man Meldungen über den Zweig vom Repository, in dem man gerade arbeitet und Unterschiede in Dateien im Vergleich zum letzten Einchecken. Nun ist mal zu Testzwecken /etc/resolv.conf geändert und eine neue Datei hinzugefügt. Außerdem wurde /etc/aliases gelöscht. Das Ergebnis ist
Code: Alles auswählen
/etc# git status
Auf Branch bonding
Änderungen, die nicht zum Commit vorgemerkt sind:
(benutzen Sie "git add/rm <Datei>...", um die Änderungen zum Commit vorzumerken)
(benutzen Sie "git restore <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
gelöscht: aliases
geändert: resolv.conf
Unversionierte Dateien:
(benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
systemd/Ueberfluessig_aber_neu
keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
Wenn das so gewollt ist, dann kann mit mit
die Änderungen übernehmen. Wenn man sich aber nicht sicher ist kann man sich die genauen Unterschiede auch anzeigen lassen.
Code: Alles auswählen
/etc# git diff
diff --git a/aliases b/aliases
deleted file mode 100644
index b4e7371..0000000
--- a/aliases
+++ /dev/null
@@ -1,15 +0,0 @@
-# /etc/aliases
-mailer-daemon: postmaster
-postmaster: root
-nobody: root
-hostmaster: root
-usenet: root
-news: root
-webmaster: root
-www: root
-ftp: root
-abuse: root
-noc: root
-security: root
-fetchmail: root
-root: chris
diff --git a/resolv.conf b/resolv.conf
index bbc8559..d6e7e62 100644
--- a/resolv.conf
+++ b/resolv.conf
@@ -1 +1,2 @@
+# Ein Kommentar zum probieren
nameserver 127.0.0.1
Die gelöschte Datei /etc/aliases kann ich mit
Code: Alles auswählen
/etc# git checkout aliases
1 Pfad vom Index aktualisiert
wieder aus dem Repository holen. Wenn ich dann noch /etc/resolv.conf editiere oder aus dem Repository hole sowie die überflüssige Datei lösche, dann ergibt git status keine Unterschiede mehr aus. Damit kann ich zum Beispiel networking konfigurieren Wenn alles funktioniert wird die Version mit einem passenden Kommentar comitten.
Wenn man jetzt etwas anderes ausprobieren will startet man am besten auf einem neuen Zweig , branch genannt. Das funktioniert zum Beispiel mit
Nun darf man nicht vergessen, auf den neuen Zweig zu wechseln mit
Dann kann man beginnen, Dateien zu löschen oder umzubenennen, die man für diese Konfiguration nicht brauch oder sogar verschwinden müssen. Ein Beispiel ist /etc/network/interfaces. So etwas fundamentales muss man auch mal kontrollieren. Auf meinem System ist networking im Branch opensmtpd konfiguriert. Ich befinde mich aber in einem anderen Branch. Das sehe ich mit
Code: Alles auswählen
/etc# git branch
* bonding
master
networkd
networkmanager
next
opensmtpd
Im Branch bondig ist networkd mit bonding konfiguriert. Dabei darf keine Datei /etc/network/interfaces existieren. Ein Vergleich der Verzeichnisse vom aktuellen Branch mit opensmtpd ergibt
Code: Alles auswählen
/etc# git diff opensmtpd network/
diff --git a/network/interfaces b/network/interfaces.org
similarity index 100%
rename from network/interfaces
rename to network/interfaces.org
Die Datei wurde also nur umbenannt. Nun hat man aber oft das Problem bei Netzwerkkonfigurationen, dass nicht alles auf Anhieb funktioniert und man noch etwas im Internet nachlesen will. Wenn man - um bei diesem Beispiel zu bleiben - den neuen Branch networkd temporär so lassen will, dann kontrolliert man den Status ein letztes mal mit
.
Neue Dateien werden mit
hinzugefügt und das ganze mit
im Repository abgelegt. Mit
kann ich den Zustand vom Branch master oder einem anderen Branch wieder herstellen. Nun kann man per Hand die entsprechenden Dienste stoppen und starten oder man startet einfach den Rechner neu. Damit hat man wieder ein lauffähiges System. Nun kann man wieder recherchieren und gegebenenfalls mit
und weiteren Optionen die notwendigen Änderungen im neuen Branch herausfinden. Den kann man dann wieder auschecken und die Änderungen implementieren.
Der Vorteil der Vorgehensweise ist
- Es ist möglich auf verschiedene Versionen zurückzugreifen
- Änderungen sind nachvollziehbar
- Es werden nur wenige git Optionen benötigt. Damit ist die Methode für jeden möglich.
Wenn man mit allem zufrieden ist, dann kann man das ganze git Repository durch das Löschen von /etc/.git entfernen. Man kann auch einzelne Branches löschen. Wer sich etwas mit git befasst hat wird außerdem Änderungen in Branches testen und die dann mit git merge in einem Hauptzweig integrieren. Das wäre dann für interessierte Nutzer der nächste Schritt.
Vielleicht ist das nützlich oder auch nur eine Motivation git auszuprobieren. Es gibt ja auch im home Verzeichnis viele Konfigurationen, an denen man das eine oder andere ausprobieren will.