In einer Umgebung mit mehreren Systemadministratoren sehe ich einige Vorteile beim Hinzufügen der Serverkonfigurationsdateien zu einem Revisionskontrollsystem. Am bemerkenswertesten ist die Möglichkeit, Änderungen nachzuverfolgen, wer sie vorgenommen hat, und natürlich ein Rollback auf bekannte funktionierende Konfigurationen durchzuführen.
Ich interessiere mich hauptsächlich für Unix / Linux-Lösungen, bin aber auch neugierig auf Windows-Implementierungen.
linux
version-control
Dave K
quelle
quelle
Antworten:
Ich habe dies zu Hause (~ 3 Hosts) seit einiger Zeit getestet und verschiedene scms (RCS, Subversion, Git) ausprobiert. Das Setup, das im Moment perfekt für mich funktioniert, ist Git mit dem
setgitperms
Haken.Dinge, die Sie beachten müssen:
Umgang mit Dateiberechtigungen und Eigentumsrechten
svn
zu tunsetgitperms
Hook handhabt dies transparent (benötigt jedoch eine relativ neue Version von git mit Unterstützung fürpost-checkout
Hooks)Wenn Sie nicht alle
/etc
Dateien unter Versionskontrolle haben möchten , sondern nur die Dateien, die Sie tatsächlich geändert haben (wie ich), benötigen Sie einen SCM, der diese Art der Verwendung unterstützt.*
" in die.gitignore
Datei der obersten Ebene und füge nur die Dateien hinzu, die du verwenden willstgit add --force
Schließlich gibt es einige problematische Verzeichnisse unter
/etc
denen Pakete Config - Schnipsel fallen können , die dann durch ein Programm oder Daemon gelesen werden (/etc/cron.d
,/etc/modprobe.d
usw.). Einige dieser Programme sind intelligent genug, um RCS-Dateien zu ignorieren (z. B. cron), andere nicht (z. B. modprobe). Gleiches gilt für.svn
Verzeichnisse. Wieder ein großes Plus für Git (erstellt nur ein oberstes.git
Verzeichnis).quelle
Ich habe es informell mit Git gemacht, aber es gibt auch das Etckeeper- Projekt, das eine vollständigere und detailliertere Implementierung bietet .
quelle
Eine andere Möglichkeit besteht darin, ein automatisiertes Serverkonfigurationstool wie Puppet oder Cfengine zu verwenden, um Ihre Serverkonfigurationen in einer deklarativen Sprache zu schreiben.
Es ist zusätzliche Arbeit am Front-End, aber mit einem Hilfsprogramm wie Puppet können Sie einen Server automatisch neu erstellen und konfigurieren, ohne dass ein menschlicher Eingriff erforderlich ist.
quelle
Ich habe mit etckeeper experimentiert, was ziemlich gut zu funktionieren scheint. Ich benötige keinen zentralen Server, was in manchen Situationen wichtig sein kann. Sie können mehrere verschiedene DVCS-Backends verwenden, sodass Sie dasjenige auswählen können, mit dem Sie am besten vertraut sind. Es scheint sehr gut für mich zu funktionieren, aber ich habe noch nicht versucht, die anderen Techniker, bei denen ich arbeite, dazu zu bringen, es zu verwenden.
quelle
Ich habe in letzter Zeit in Chef gesucht . Es behält nicht nur templierbare (.erb) Konfigurationen in der Versionskontrolle bei, sondern ermöglicht Ihnen auch Aktionen auszuführen (wie das Neustarten eines Dienstes, nachdem Sie die Konfigurationen auf den Knoten hochgeladen haben). Chef hilft bei der Paketverwaltung, damit Sie Abhängigkeiten mit jedem Knoten überprüfen können , mit dem Sie eine Schnittstelle herstellen (dh sudo-Paket muss installiert sein). Chef scheint in Ruby leicht erweiterbar zu sein. Wenn Sie also benutzerdefinierte Prozesse haben, können Sie diese einfach innerhalb des bereitgestellten Frameworks ausschreiben.
Aber noch nicht ausprobiert und Sie müssen Ruby auf dem Client und Server mit den entsprechenden Edelsteinen installieren (das ist wirklich nicht so schwer). Insgesamt sieht es wirklich einfach aus, viele Server gleichzeitig zu verwalten.
quelle
Ich bin gerade dabei, Puppet in unserer Infrastruktur zu implementieren, und es ist sehr förderlich, seine Daten in der Versionskontrolle zu belassen.
Ich bevorzuge Mercurial, da es sich nur um eine Sammlung von Dateien mit Metadaten handelt, die in versteckten Verzeichnissen gespeichert sind (einfach zu verwalten, leicht zu verstehen, leicht zu verwenden).
Meine Puppet-Dateien befinden sich unter / usr / local / etc / puppet / (FreeBSD 7.1). Alles was es brauchte, um Mercurial hinzuzufügen:
Alle Änderungen werden mit einem einfachen "hg commit" festgeschrieben. Wenn eine Änderung etwas bewirkt, kann ich jeden einzelnen Server mit einem einzigen Befehl auf eine bestimmte Version der Datei (z. B. sudoers) zurücksetzen.
Tolles Intro zu Mercurial
quelle
Ich habe Subversion auf den von mir verwalteten Servern verwendet. Funktioniert gut. Ich habe auch eine Trac- Instanz eingerichtet, sodass wir eine Zeitleistenansicht, ein Ticketing-System, das Durchsuchen usw. haben.
Mit symlinks, cron und subversion habe ich auch eine automatische Konfigurationsverteilung basierend auf dem Subversion-Repository eingerichtet, bei der jeder Linux-Server ein Repository
svn update
mit Skripten (z. B. Firewall-Skripten) aktualisiert .quelle
Hier ist ein realer Anwendungsfall: Verwendet Subversion, um Konfigurationsdateien auf 4 verschiedenen Servern zu verwalten. Ich würde empfehlen, die Versionskontrolle für Konfigurationsdateien zu verwenden, aus dem gleichen Grund, aus dem Sie sie mit Code verwenden würden - es ist ein Backup und eine Schaltfläche zum Rückgängigmachen in einem. Wenn ich eine viel größere Anzahl von Servern verwalten würde und sie in Bezug auf die Konfiguration viel näher wären, würde ich so etwas wie Puppet verwenden, wie in Berberichs Antwort beschrieben.
Die Idee ist, dass Sie ein Repository haben, in dem Sie bestimmte Ordner auf den Servern auschecken können (z. B. / var / named /), sodass ich sowohl einen Verlauf als auch ein Backup der Konfigurationsdateien habe (das Backup ist ein Bonus, wenn Sie den Fehler machen von der Verwendung einer GUI-Konfigurationsanwendung, die Ihre handbearbeiteten Zusätze abwischt ( hustet Server Admin unter Mac OS X Server hustet ). Es ist dann einfach, es auf einem Testserver zu testen und anschließend den Produktionsserver mit Dateien zu aktualisieren, die funktionieren, ohne dass Dateien manuell kopiert werden müssen.
quelle
Ich habe vor ein paar Jahren ein Projekt erstellt, um genau dies zu tun: Savon
Es verwendet Subversion zum Speichern von Dateien und verfügt über einige zusätzliche Funktionen, z. B. das Verfolgen des Eigentums, der Berechtigungen und des SELinux-Kontexts. Außerdem können Sie Ihre Dateisystemänderungen logisch in Ebenen aufteilen, sodass Sie beispielsweise Änderungen verfolgen können, die auf alle Ihre Webserver separat übertragen werden sollen.
quelle
Subversion ist sehr einfach einzurichten und zu verwenden und es gibt viele Ressourcen:
Grundlegende Anleitungen
SVN-Buch
Übersicht über die Dokumentenverwaltung
quelle
Die meisten unserer Änderungen werden mit unserem Helpdesk-System verwaltet, auch für routinemäßige Wartungsarbeiten. Wir haben unsere Dokumentation langsam in ein Wiki verschoben, das wir für den eigenen Gebrauch und für Endbenutzer veröffentlichen. Es ist schön, die Konfigurationsänderungen und die Diskussion dahinter in unserem Intranet zu veröffentlichen.
quelle
Viele Jahre lang habe ich rcs für Dateien verwendet, die ich zu modifizieren begonnen habe, aber vor ein paar Jahren habe ich begonnen, die gesamte Datei / etc unter Git-Kontrolle zu bringen. Das Einchecken von Dateien in granularen Mengen erfordert einige Arbeit (manchmal greife ich auf ein umfangreiches Einchecken von "verschiedenen Updates" zurück), und ich habe einige Skripte geschrieben, um dies zu unterstützen.
quelle