Frage Welche Lösungen gibt es, um die Versionskontrolle für Serverkonfigurationsdateien zu verwenden? [geschlossen]


In einer Umgebung mit mehreren Systemadministratoren sehe ich einige Vorteile beim Hinzufügen der Serverkonfigurationsdateien zu einem Versionskontrollsystem. Am bemerkenswertesten ist die Fähigkeit, Änderungen nachzuverfolgen, wer sie erstellt hat und natürlich in der Lage ist, zu bekannten Arbeitskonfigurationen zurückzukehren.

Ich interessiere mich hauptsächlich für Unix / Linux-Lösungen, wäre aber auch neugierig auf Windows-Implementierungen.


85
2018-05-06 17:46


Ursprung


Scheint zu duplizieren oder mit dieser Frage sehr verwandt zu sein serverfault.com/questions/3852/ ... - Zoredache


Antworten:


Ich habe das zu Hause (~ 3 Hosts) seit einiger Zeit getestet und versuche es anders scms (RCS, Subversion, Git). Das Setup, das im Moment perfekt für mich funktioniert, ist git mit das setgitperms Haken.

Dinge, die Sie beachten müssen:

Handhabung von Dateiberechtigungen und Eigentumsrechten

  • RCS: macht das nativ
  • Subversion: Zuletzt habe ich es versucht, du brauchst einen Wrapper svn um dies zu tun
  • Git: die setgitperms haken handhabt das transparent (braucht eine ziemlich neueste Version von Git mit Unterstützung für post-checkout Haken, obwohl)

Auch wenn Sie nicht alle möchten /etc unter Versionskontrolle, aber nur die Dateien, die du tatsächlich geändert hast (wie ich), du wirst ein scm brauchen unterstützt diese Art der Nutzung.

  • RCS: funktioniert sowieso nur bei einzelnen Dateien.
  • Subversion: Ich fand das schwierig.
  • Git: kein Problem, setzen "*"auf der obersten Ebene .gitignore Datei und fügen Sie nur diese hinzu Dateien, die Sie verwenden möchten git add --force

Schließlich gibt es einige problematische Verzeichnisse unter /etc wo Pakete fallen können Config-Snippets, die dann von einem Programm oder einem Daemon gelesen werden (/etc/cron.d, /etc/modprobe.d, usw.). Einige dieser Programme sind intelligent genug, um sie zu ignorieren RCS-Dateien (z. B. Cron), manche nicht (z. B. modprobe). Gleiches mit .svn Verzeichnisse. Wieder ein großes Plus für Git (erstellt nur eine Top-Level .git Verzeichnis).


52
2018-05-06 18:23



Subversion benötigt asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn. Archive SVN (asvn) erlaubt die Aufzeichnung von Dateitypen, die normalerweise nicht von svn bearbeitet werden. Derzeit umfasst dies Geräte, Symlinks und Dateibesitzrechte. - Cristian Ciupitu
Haben Sie irgendwo eine Beschreibung, wie Sie die von Ihnen verwendeten Hooks einrichten, ect.? - GruffTech
Eine kurze Beschreibung ist hier: jottit.com/jg8h7 - 8jean
Hier ist ein Beitrag über das Einrichten von so etwas in Arch Linux ARM, sollte hier genauso gut gelten. zduck.com/2012/storing-your-raspberry-pi-config-in-git - silent__thought


Ich habe es informell mit git gemacht, aber da ist auch der Etckeeper Projekt, das eine vollständigere und detailliertere Umsetzung ist.


28
2018-05-06 17:47



Etckeeper ist wirklich gut - es behandelt die Wiederherstellung von Berechtigungen (nicht unterstützt von Git, Hg, etc) und unterstützt Ihr Backend der Wahl (einschließlich Git, Hg, Basar, etc). Hat auch eine Integration in APT, so dass bei jeder apt-get-Operation das / etc-Repository festgeschrieben wird und über Nacht commit. Ich habe das für eine Weile verwendet und insgesamt ist es viel besser als ein Vanilla VCS, wenn nur für die Berechtigungen-Funktion. - RichVel


Eine andere Option ist die Verwendung eines automatisierten Serverkonfigurationstools wie Marionette oder Cfengine um Ihre Serverkonfigurationen in einer deklarativen Sprache zu schreiben.

Es ist zusätzliche Arbeit am Front-End, aber mit einem Dienstprogramm wie Puppet können Sie einen Server mit sehr wenig menschlichem Eingreifen automatisch neu aufbauen und konfigurieren.


23
2018-05-06 18:03



Ja, aber Sie sollten auch Ihre Puppet / CFengine-Konfiguration revisionieren. Ich bin auch ein Fan von Revisions-Controlling der Ausgabe, so dass Sie die Frage beantworten können, was war das Config-On-Datum x? "sowie" was sollte die Config nach Puppet sein? ", und korrelieren Inputs mit Outputs zur Fehlersuche im Config-Management-System. - Rob Chanter


Ich habe mit experimentiert Etckeeper das scheint ziemlich gut zu funktionieren. Ich benötige keinen zentralen Server, was in manchen Situationen wichtig sein kann. Sie können mehrere verschiedene DVCS-Backends verwenden, so dass Sie diejenige wählen können, mit der Sie vertraut sind. Es scheint sehr gut für mich zu funktionieren, aber ich habe nicht versucht, die anderen Techs dorthin zu bringen, wo ich arbeite.


10
2018-05-06 18:10





Ich habe nachgeschaut Koch in letzter Zeit. Es hält nicht nur Templatisch (.erb) configs in der Versionskontrolle, aber erlaubt Ihnen, Aktionen (wie Neustart eines Dienstes nachdem du die Configs auf den Knoten hochgeladen hast). Chef hilft Ihnen bei der Paketverwaltung Abhängigkeiten überprüfen mit jedem Knoten, mit dem Sie interagieren (d. h. muss das sudo-Paket installiert sein). Chef scheint in Ruby leicht erweiterbar zu sein. Wenn Sie also benutzerdefinierte Prozesse haben, können Sie sie einfach in dem bereitgestellten Framework ausführen.

Habe es aber noch nicht ausprobiert und du musst Ruby auf dem Client und Server mit den entsprechenden Edelsteinen installieren (das ist wirklich nicht so schwer). Insgesamt sieht es sehr einfach aus, viele Server gleichzeitig zu verwalten.


6
2018-05-27 20:49



Wir verwenden Chef stark (60+ Server) sehr erfolgreich. Alle Rezepte und Konfigurationsdateien werden in Subversion eingecheckt. - organicveggie


Ich bin dabei, Puppet über unsere Infrastruktur zu implementieren, und es ist sehr hilfreich, seine Daten in der Versionskontrolle zu behalten.

Ich bevorzuge Mercurial, da es nur eine Sammlung von Dateien mit einigen Metadaten ist, die in versteckten Verzeichnissen gespeichert sind (einfach zu verwalten, leicht zu verstehen und einfach zu benutzen).

Meine Puppet-Dateien befinden sich unter / usr / local / etc / puppet / (FreeBSD 7.1). Alles was nötig war, um Mercurial hinzuzufügen:

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

Alle Änderungen werden mit einem einfachen "hg commit" ausgeführt. Wenn eine Änderung etwas verschlingt, kann ich jeden einzelnen Server mit einem einzigen Befehl auf eine bestimmte Version der Datei zurücksetzen (z. B. sudoers).

Tolles Intro zu Mercurial


3
2018-05-06 19:59





Ich verwende Subversion auf den Servern, die ich verwalte. Funktioniert gut. Ich habe auch ein Trac Instanz, so haben wir eine Timeline-Ansicht, Ticketing-System, Browsing, etc.

Unter Verwendung von Symlinks, Cron und Subversion habe ich auch eine automatische Konfigurationsverteilung basierend auf dem Subversion-Repository eingerichtet, bei der jeder Linux-Server ein Repository aktualisiert svn update mit Skripten (z. B. Firewall-Skripten).


3
2018-05-07 16:19





Hier ist ein reales Anwendungsbeispiel: Benutzte Subversion, um Konfigurationsdateien auf 4 verschiedenen Servern zu verwalten. Ich würde empfehlen, Versionskontrolle für Konfigurationsdateien aus dem gleichen Grund zu verwenden, wie Sie sie mit Code verwenden würden - es ist eine Sicherungs- und eine Rückgängig-Schaltfläche in einem. Wenn ich eine viel größere Anzahl von Servern verwalten würde und sie viel näher bei der Konfiguration wären, würde ich etwas wie Puppet verwenden, wie in Berberichs Antwort beschrieben.

Die Idee ist, dass Sie ein Repository haben, mit dem Sie bestimmte Ordner auf den Servern auschecken können (zB. / Var / named /), so dass ich sowohl einen Verlauf als auch ein Backup von Konfigurationsdateien habe (das Backup ist ein Bonus, wenn Sie den Fehler machen) Verwenden einer GUI-Konfigurationsanwendung, die Ihre handbearbeiteten Ergänzungen löscht Husten Server Admin in Mac OS X Server Husten). Es ist dann einfach, es auf einem Testserver zu testen und anschließend den Produktionsserver mit Dateien zu aktualisieren, die funktionieren, ohne Dateien manuell zu kopieren.


2
2018-05-06 19:11