Welche Lösungen gibt es, um die Verwendung der Versionskontrolle für Serverkonfigurationsdateien zu ermöglichen? [geschlossen]

85

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.

Dave K
quelle
Scheint zu duplizieren oder sehr mit dieser Frage verwandt zu sein serverfault.com/questions/3852/…
Zoredache

Antworten:

52

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 setgitpermsHaken.

Dinge, die Sie beachten müssen:

Umgang mit Dateiberechtigungen und Eigentumsrechten

  • RCS: tut dies von Haus aus
  • Subversion: Das letzte Mal, dass ich es versucht habe, brauchten Sie einen Wrapper, um dies svnzu tun
  • git: Der setgitpermsHook handhabt dies transparent (benötigt jedoch eine relativ neue Version von git mit Unterstützung für post-checkoutHooks)

Wenn Sie nicht alle /etcDateien 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.

  • RCS: Funktioniert sowieso nur mit einzelnen Dateien.
  • Subversion: Ich fand das schwierig.
  • git: no probem, setze " *" in die .gitignoreDatei der obersten Ebene und füge nur die Dateien hinzu, die du verwenden willstgit add --force

Schließlich gibt es einige problematische Verzeichnisse unter /etcdenen Pakete Config - Schnipsel fallen können , die dann durch ein Programm oder Daemon gelesen werden ( /etc/cron.d, /etc/modprobe.dusw.). 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).

8jean
quelle
1
Subversion benötigt asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn . Mit Archive SVN (asvn) können Dateitypen aufgezeichnet werden, die normalerweise nicht von svn verarbeitet werden. Derzeit umfasst dies Geräte, Symlinks und Dateiberechtigungen.
Cristian Ciupitu
Haben Sie irgendwo einen Artikel geschrieben, der zeigt, wie Sie die von Ihnen verwendeten Hooks einrichten, ect.?
grufftech
Eine kurze Beschreibung finden Sie hier: jottit.com/jg8h7
8.
Hier ist ein Beitrag darüber, wie man so etwas in Arch Linux ARM einrichtet. zduck.com/2012/storing-your-raspberry-pi-config-in-git
silent__thought
28

Ich habe es informell mit Git gemacht, aber es gibt auch das Etckeeper- Projekt, das eine vollständigere und detailliertere Implementierung bietet .

pjz
quelle
4
etckeeper ist wirklich gut - es verwaltet das Wiederherstellen von Berechtigungen (nicht von git, hg usw. unterstützt) und unterstützt das Backend Ihrer Wahl (einschließlich git, hg, bazaar usw.). Hat auch eine Integration in APT, sodass das / etc-Repository jedes Mal, wenn Sie eine apt-get-Operation ausführen, festgeschrieben wird und über Nacht festgeschrieben wird. Ich habe dies für eine Weile verwendet und insgesamt ist es viel besser als die Verwendung eines Vanille-VCS, wenn auch nur für die Berechtigungsfunktion.
RichVel
23

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.

berberich
quelle
5
Ja, aber Sie sollten auch Ihre Puppet / CFengine-Konfigurationen überarbeiten. Ich bin auch ein Fan von Revisionskontrolle der Ausgabe, so dass Sie die Frage "Was war die Konfiguration am Datum x?" Beantworten können. sowie "Was sollte die Konfiguration laut Puppet gewesen sein?" und korrelieren Sie Eingaben mit Ausgaben für die Fehlerbehebung des Konfigurationsverwaltungssystems.
Rob Chanter
10

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.

Zoredache
quelle
6

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.

Bluehavana
quelle
Wir setzen Chef sehr erfolgreich ein (60+ Server). Alle Rezepte und Konfigurationsdateien werden in Subversion eingecheckt.
Bio-Gemüse
3

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:

> cd /usr/local/etc/puppet
> hg init

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

sh-beta
quelle
3

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 updatemit Skripten (z. B. Firewall-Skripten) aktualisiert .

Martin C.
quelle
2

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.

Chealion
quelle
1

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.

Thomas Vander Stichele
quelle
0

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.

Waldo
quelle
0

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.

hlovdal
quelle