Ist es möglich, etckeeper mit einem einzigen gemeinsam genutzten Git-Repository zu verwenden?

9

Ich habe festgestellt, dass mehrere Personen empfohlen haben, etckeeper zu verwenden, um die Versionskontrolle auf mein Verzeichnis / etc anzuwenden.

Mir scheint, dass die Standardinstallation ein Repository auf demselben Computer wie das / etc platziert, das Sie verwalten möchten. Dies funktioniert gut für die Versionskontrolle, bietet jedoch nicht den zusätzlichen Vorteil einer Off-Server-Sicherung der Dateien - oder ermöglicht es mir, Teile von / etc von einem Quellcomputer auf einen anderen zu duplizieren.

Ist es möglich, ein einzelnes Git-Repository auf einem zentralen Verwaltungscomputer freizugeben, sodass etckeeper auf jedem Server seine Daten am selben Ort speichert?

(Ich mache jetzt etwas Ähnliches mit svn und einigen benutzerdefinierten Skripten, um Dateien festzuschreiben und zurückzusetzen, aber ich muss daran denken, sie festzuschreiben, wenn ich Änderungen vornehme.)

Brent
quelle

Antworten:

8

Verwenden Sie zunächst install etckeeper, das für git in /etc/etckeeper/etckeeper.conf konfiguriert ist. Befolgen Sie die Installationsmethode von etckeeper für Ihre Distribution oder von der Quelle.

Bald wirst du ein /etc/.git haben

Stellen Sie jetzt auf Ihrem Server sicher, dass Sie ein (sicheres) Repo haben, auf das Sie ...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

Schieben Sie nun auf dem ersten Host Ihr lokales Repo über ssh auf den Server:

# cd /etc && git push faruser@farhost:somedir

Somedir kann in diesem Fall natürlich relativ sein (gemäß der SSH-Konvention)

Tun Sie dies jedes Mal, wenn Sie eine Änderung vornehmen, die sich auf / etc auswirkt (und von etckeeper in /etc/.git gespeichert wird), und Sie haben sowohl lokale als auch Off-Machine-Repos für Ihren Computer.

Oder richten Sie passwortloses ssh ein und machen Sie einen Hook in /etc/etckeeper/commit.d/, damit es automatisch geschieht, wenn die Maschine immer verbunden ist.

Quanten
quelle
2
Das sieht gut aus. Gibt es eine Möglichkeit, das lokale Repository in einem Unterverzeichnis des Remote-Repositorys zu speichern? Ich möchte etwas Ähnliches tun und ein einziges Remote-Repository verwenden, um die (separaten) Konfigurationen für mehrere Server zu speichern.
Andrew Ferrier
Kann git pushauf Ihr erstelltes Git-Repo hinarbeiten? wahrscheinlich müssen Sie nacktes Repo in etwas erstellen, das der Haken unter commit.d ist wirklich gute Idee, ich mag es
larrycai
3

Es ist möglich, eine Remote-Zweigstellenkonfiguration hinzuzufügen, um den Hauptzweig des etckeeper-Repositorys von jedem Server einem Zweig im Remote-Repository zuzuordnen. Dazu können Sie auf jedem Server die folgenden Befehle ausführen:

cd /etc
git branch -m master $HOSTNAME
git remote add origin [email protected]:path/to/single/repo.git
git push -u origin master:$HOSTNAME

Nach diesem Setup werden nachfolgend git pushÄnderungen von jedem Server-Master-Zweig an den dedizierten Server-Zweig im zentralen Repository gesendet.

Obwohl die Zweige keinen gemeinsamen Ausgangspunkt haben, können Sie auf einfache Weise dieselbe Datei aus zwei verschiedenen Zweigen vergleichen, die zwei verschiedene Server darstellen, indem Sie Folgendes ausführen:

git diff origin/server1 origin/server2 -- file

Dies kann mit dem von jojoo vorgeschlagenen automatisierten Setup kombiniert werden .

TTT
quelle
git push -u origin master: $ HOSTNAME funktioniert hier nicht. Remote Repo ist ein leeres Bare Repo. Fehler: src refspec master stimmt mit keinem überein.
Bertl
1

Wie es automatisch geht, die ganze Geschichte:

Erstellen Sie die Datei /etc/etckeeper/commit.d/60-push (vergessen Sie nicht, chmod + x it) auf den Clients.

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_server ist in der ssh-Konfiguration definiert, siehe unten. /var/git/client_name.git ist das Verzeichnis auf dem zentralen Server, das das Git-Repo enthält.

Die ~ / .ssh / config von root (!) Sollte ungefähr Folgendes enthalten:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

Dann müssen Sie das Git-Repo auf dem central_server starten

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

Testen Sie es mit einer kleinen Bearbeitung in / etc und dann einem Etckeeper-Commit "Test Push'ing".

Jojoo
quelle
1

Das ist nicht der Punkt. Wenn Sie die Konfiguration weit verteilen möchten, richten Sie zusätzlich zum lokalen Repo jedes Computers ein weiteres Repository ein und lassen jeden Computer nach Bedarf auswählen . Dies ermöglicht es jeder Maschine, abzuweichen (wirklich zu verzweigen) und die Revisionskontrolle beizubehalten.

jldugger
quelle
Ich bin mir nicht sicher, wie ich das machen soll (zweites Repository). Können Sie das näher erläutern?
Brent
Sie müssen wahrscheinlich eines der Repos auf Ihr "zentrales Repo" klonen. du brauchst nur einen. Von dort aus können Sie Änderungen vornehmen, und dann kann jeder der Server die in einer Revision gespeicherten Patches auswählen. Wie Sie es anfänglich einrichten, variiert zwischen den DSCMs. Für git siehe kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger
-2

Sie möchten etckeeper wirklich nicht zu Ihrer Sicherungsrichtlinie machen. Eine Kopie Ihrer Konfigurationsdateien wäre zwar nett, reicht jedoch kaum aus, um als Disaster Recovery-Plan zu gelten.

Konzentrieren Sie sich stattdessen auf echte Backups Ihres Systems. Der Simplist könnte ein Cronjob sein, um einen Tarball auf Band zu füttern ... oh, richtig. Niemand benutzt mehr Bänder. Okay, ein cronjob rsync alle Ihre Dateien auf einem dedizierten NAS . Weitere Informationen zu robusteren Backup-Lösungen finden Sie unter Amanda und Bacula .

Und für den Fall von Akademikern, konnte ich pushen meine etckeeper Repo bis GitHub wie jeder anderen git Repo.

Shazburg
quelle
Niemand spricht davon, dies zu einer Sicherungsrichtlinie zu machen. Aber meiner Erfahrung nach ist es praktisch, alles an einem Ort auf einem sichereren Server zu haben.
Brent
1
Dann habe ich falsch verstanden. Wenn Sie wirklich nach einer Möglichkeit suchen, Ihre Systemkonfiguration zentral zu speichern und zu verteilen, ist Puppet ( reductivelabs.com/products/puppet ) dort möglicherweise hilfreich.
Shazburg
Ein Beispiel: Wir übertragen alle unsere Konfigurationen auf einen Host. Dort läuft ein Trac, der zur Visualisierung der Konfigurationsänderungen verwendet wird (und natürlich Tickets schreibt, wenn etwas nicht funktioniert, ...). Da es sehr praktisch ist, kann ich zum Beispiel die Crontabs aller unserer Hosts mit vergleichen ein paar Klicks.
Jojoo