Forum: PC Hard- und Software Tool um Linux-Konfigurationsänderungen zu erkennen, zu extrahieren und zu reproduzieren


von Gerd E. (robberknight)


Lesenswert?

Hi,

ich verwalte einige Linux-VMs (hier CentOS 7). Die werden nach einem 
standardisierten Verfahren erstellt (hier libvirt, PXE und kickstart). 
Sie haben dann eine Grundkonfiguration.

Dann gehe ich her passe sie für die geplante Aufgabe an. Ich installiere 
z.B. ein paar neue Pakete, ändere ein paar Configdateien etc. Nicht 
immer weiß ich vorher wie die korrekten Einstellungen sind, ich muss 
also eine Configdatei ein paar mal ändern, ausprobieren, wieder ändern 
bevor es sitzt.

Wenn alles läuft würde ich gerne diese von mir gemachten 
Konfigurationsänderungen in ein Versionskontrollsystem (hier git) 
einchecken, damit sie
1. dokumentiert sind
2. auf einer weiteren VM möglichst einfach reproduziert werden können
3. beim Umzug auf eine neues OS (z.B. CentOS 8 wenn es irgendwann mal 
rauskommt) möglichst einfach auf die neue VM migriert werden können.

Ich suche nun ein Tool, welches mir die nach der automatischen 
Grundkonfiguration gemachten Änderungen möglichst einfach und komplett 
aus der fertigen VM "herauszieht" und als Dateien in meinen git-Tree 
legt.

Also so etwas wie ein besseres Diff. "besser", denn es sollte mit Dingen 
wie z.B. neu installierten Paketen (hier RPM), Prelink, automatischem 
Indizieren der man-Datenbanken etc. umgehen können. Gut wäre auch ein 
System, welches Änderungen an den Selinux-Parametern (z.B. umgestellte 
Booleans) aus den entsprechenden Binärdateien rauszieht.

Ich habe verschiedene Tools wie z.B. Ansible, Chef, etc. gefunden. Die 
gehen aber einen anderen Ansatz. Dort kann man seine Änderungen nicht an 
der lebenden Maschine direkt vornehmen, sondern muss alle Änderungen in 
einer Domain Specific Language schreiben und dann über das Tool 
deployen.

Wenn ich damit hunderte identische Maschinen erstellen will ist das 
sicher ein guter Ansatz. Ich hab hier aber erst mal nur eine und da hab 
ich doch einen nicht zu unterschätzenden Overhead wenn ich statt direkt 
in ner Configdatei zu editieren und auf Speichern zu klicken ich jede 
neu zu ändernde Configdatei erst mal auf meine Workstation in den 
richtigen Pfad kopieren muss, sie in ein "recipe" aufnehmen muss und sie 
dann erst editieren kann. Dann merke ich daß es die falsche war und darf 
sie wieder rauswerfen und statt dessen eine andere kopieren etc.

Kennt jemand so ein Tool oder etwas, was in diese Richtung geht?

von Axel S. (a-za-z0-9)


Lesenswert?

Gerd E. schrieb:

> Wenn alles läuft würde ich gerne diese von mir gemachten
> Konfigurationsänderungen in ein Versionskontrollsystem (hier git)
> einchecken

> Ich suche nun ein Tool, welches mir die nach der automatischen
> Grundkonfiguration gemachten Änderungen möglichst einfach und komplett
> aus der fertigen VM "herauszieht" und als Dateien in meinen git-Tree
> legt.

Klingt so als würdest du "etckeeper" suchen. Weiß nicht, wie gut sich 
das in CentOS integriert, aber hier auf Debian nutzt es apt-Hooks, um 
nach Paket-Update/Installation/Entfernen automatisch zu committen.

von Gerd E. (robberknight)


Lesenswert?

Axel S. schrieb:
> Klingt so als würdest du "etckeeper" suchen.

Danke, das kannte ich noch nicht.

Es verfolgt einen etwas anderen Ansatz als ich ihn oben skizziert hatte. 
Denn das komplette /etc wird dann im git gepflegt, nicht nur die 
Änderungen die ich darin nach der Grundkonfiguration gemacht habe. Die 
Änderungen bekommt man natürlich dennoch über die git history.

Wenn ich so darüber nachdenke, fallen mir 2 Punkte ein die mir daran 
nicht gefallen:

1. es scheint nur /etc zu betreffen. Oft muss ich aber auch Dateien 
unter z.B. /var/www/html, /var/lib/irgendwas etc. anlegen und 
konfigurieren um einen bestimmten Dienst zum Laufen zu bekommen.

2. Ich befürchte, daß ich bei späteren Änderungen in /etc nicht leicht 
die Änderungen, die ich manuell gemacht habe von den Änderungen, die 
durch ein Update eines RPM-Pakets gemacht wurden, unterscheiden kann.

> Weiß nicht, wie gut sich
> das in CentOS integriert, aber hier auf Debian nutzt es apt-Hooks, um
> nach Paket-Update/Installation/Entfernen automatisch zu committen.

Es scheint auch hooks für yum und dnf zu haben, im Centos-EPEL ist 
etckeeper auch gepackaged. Von daher also unter Centos und Fedora wohl 
ähnlich einfach zu nutzen wie unter Debian.

Hast Du persönlich Erfahrung mit dem etckeeper gemacht? Funktioniert das 
in der Praxis oder was hast Du für Probleme beobachtet?

von dupdup (Gast)


Lesenswert?

Ich kann dir nur empfehlen mal ansible zu testen. Du kannst deine 
Bestandskonfiguration ja Schritt fuer Schritt migrieren. Ich setze damit 
gerade einen LXC-Host mit > 10 Containern auf die jeweils einzelne 
Dienste hosten. Das ganze ist sehr bequem da man bei einem Fehler 
innerhalb von ein paar Minuten die den kompletten LXC Container mit der 
gesamten Konfiguration wieder hergestellt hat.

Desweiteren dokumentierst du automatisch die Systemkonfiguration und 
musst dich bei einer erneuten Einarbeitung nicht mit Dingen befassen die 
du nie angefasst hast. Wenn man mal ein paar Dienste damit konfiguriert 
hat geht das ziemlich schnell weil man meist immer wieder die gleichen 
Dinge benoetigt und bei mehreren Servern Basiskonfigurationen in Rollen 
speichern kann.

von Gerd E. (robberknight)


Lesenswert?

dupdup schrieb:
> Ich kann dir nur empfehlen mal ansible zu testen.

Ich hab mir das durchaus schon angeschaut.

Es löst mir das Problem, wie ich eine Config von meiner Workstation auf 
eine oder mehrere VMs bringe. Aber ohne das von mir oben gewünschte 
"bessere" diff-Tool hat das dann zur Folge, daß ich die Config nicht 
mehr auf der Maschine selber anpassen kann, sondern immer erst die 
anzupassenden Teile auf meine Workstation kopieren und dort irgendwie 
registrieren, in ein Recipe aufnehmen etc. muss bevor ich eine Änderung 
vornehmen kann.

Gerade heute hab ich wieder eine VM auf ein neue Version migriert. Der 
Zugriff mit Samba auf ein Dir ging nicht. Ich hab 4 verschiedene 
Configdateien angepasst, bis ich wusste daß es eigentlich an den 
SELinux-Contexts lag. So konnte ich jede direkt auf der Maschine selbst 
bearbeiten und hatte das recht fix. Hätte ich jede der Dateien erst 
rüberkopieren und registrieren und hinterher wieder Löschen müssen wäre 
das deutlich langsamer gewesen.

> Ich setze damit
> gerade einen LXC-Host mit > 10 Containern auf die jeweils einzelne
> Dienste hosten.

Wie gesagt, ich habe es fast immer nur mit einer VM zu tun. Alles, was 
an Config bei mehreren Maschinen identisch ist, decke ich über spezielle 
RPM-Pakete ab. Ich kann mir also die VM mit "yum install 
config-web-base" oder so ähnlich schon recht weit konfigurieren lassen. 
Nur der Rest ist das worum es mir geht.

Das, was Du mit Ansible machst, hab ich also zu einem großen Teil über 
spezielle RPMs abgedeckt. Mir geht es jetzt darum, das Erstellen dieser 
RPMs zu vereinfachen, in dem ich die veränderten Dateien "auf dem 
Silbertablett" geliefert bekommen möchte.

von Axel S. (a-za-z0-9)


Lesenswert?

Gerd E. schrieb:
> Hast Du persönlich Erfahrung mit dem etckeeper gemacht? Funktioniert das
> in der Praxis oder was hast Du für Probleme beobachtet?

Ich habe es ehrlich gesagt noch nicht gebraucht. Also ich committe schon 
meine Änderungen in /etc. Aber ich mußte noch nie zurückrollen oder 
Änderungen auf ein anderes System übertragen. Andererseits ist das die 
übliche git-Magie. Ob du einen diff jetzt aus dem /etc repo oder einem 
anderen extrahierst, ist am Ende kein Unterschied.

Was deine anderen Punkte angeht: /var/www/ ist deine private Spielwiese, 
mir wäre nicht bekannt, daß da irgendwas automatisch angelegt oder 
verändert würde. Also einfach irgendwo spiegeln und gut. In /var/lib/ 
mußte ich noch nie irgendwas ändern. Packages legen da Verzeichnisse an 
(und dann zur Laufzeit temporäre Files oder Sockets). Auf meinen 
Systemen finden sich schützenswerte Konfigurationsfiles tatsächlich nur 
unter /etc und /home.

von Noch einer (Gast)


Lesenswert?

Dürfte sowieso kein Tool geben, das genau die selben Dateien als 
"Konfiguration" betrachtet.

Warum nicht einfach die Liste der Dateien mit find -newer ausgeben und 
in einem Editor alle Zeilen löschen, die keine Konfiguration sind?

Und dann ein Editor-Makro oder ein Script, das ein git add vor jede 
Zeile stellt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.