Speichern von etckeeper-Repositorys auf einem zentralen Server über git


7

Ich hätte gerne ein zentrales Git-Repository für alle etckeeper .git-Repos meiner Server. Hier wurde vorgeschlagen, eine Datei in /etc/etckeeper/commit.d zu verwenden, die im Grunde so aussieht, vorausgesetzt, dass ein Git-Repo in Somedir auf Somehost eingerichtet wurde:

#!/bin/sh
cd /etc
git push faruser@farhost:somedir

Das Problem dabei ist, dass es wirklich schön wäre, alle Server im selben Repo auf dem zentralen Server zu haben. Ich habe es versucht

git push faruser@farhost:somedir/server1

aber das ist gescheitert.

Wie Sie sehen, habe ich noch nie mit Git gearbeitet ... Ideen, wie dies erreicht werden kann, werden sehr geschätzt :)

Prost,

Andreas

Antworten:


2

Ich kann verstehen, dass Sie einen zentralen Ort mit all Ihren Konfigurationsinformationen wünschen, aber Sie möchten wahrscheinlich, dass sie immer noch ihre eigenen separaten Repositorys sind, nur an einem zentralen Ort. Schauen Sie dazu nach, wie Sie in git an entfernte Speicherorte pushen (mit git push ). Anschließend müssen Sie von allen Servern aus den Zugriff auf diesen Speicherort einrichten. An diesem Punkt können Sie von allen Servern aus einen Push durchführen. An diesem Punkt sollte der Vorschlag, auf den Sie hingewiesen haben, funktionieren.


1
Ich habe versucht, eine Vorlagenkonfiguration im Master zu haben und dann einen Zweig für jeden Server zu erstellen, damit ich serverspezifische Dinge wie Netzwerkskripte usw. ausführen kann. Ist dieser Ansatz sinnvoll?
Nic Cottrell

3

Zusätzlich zu der guten Antwort von pjz können Sie hier Schritt für Schritt Folgendes tun:

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


2

Sie müssen den Remote-Host so einrichten, dass der lokale Benutzer (ich nehme root an, wenn Sie etckeeper verwenden) auf das Remote-Repository pushen darf. Wie dies zu tun ist, hängt davon ab, wie Ihre Git-Repos auf der Remote-Site veröffentlicht / verfügbar sein sollen. Wenn Sie beispielsweise git über ssh verwenden, würden Sie höchstwahrscheinlich ein sshkey-Paar ohne Passphrase einrichten und dem lokalen Root erlauben, sich auf der Reomteside ohne (keyoard -, ...) Ineraktion anzumelden. Und ja, beim Pushing an den Remote-Standort muss das Repository vorhanden sein, sodass mindestens ein leeres Repo vorhanden sein muss. Teilen Sie uns zunächst die genaue Situation mit, mit der Sie arbeiten, und den genauen Fehler, den Sie erhalten.


1

Ich denke, dass die erste Frage ist, wie man zu verschiedenen Zweigen im selben Repo pusht. Eine Möglichkeit, dies zu archivieren, besteht in der Verwendung der folgenden Syntax:

git push faruser@farhost:somedir master:server1

Dadurch wird der lokale 'Master'-Zweig in den Remote-Zweig' Server1 'verschoben. Sie können Variationen davon haben, wie zum Beispiel:

git push faruser@farhost:somedir master:auto/$(hostname)

Mehrere Bemerkungen:

  1. Da nicht alle Zweige einen gemeinsamen Vorfahren haben, benötigen Sie möglicherweise eine --force für das erste Commit

  2. Aus dem gleichen Grund sehen Sie im Remote-Repo einen linearen unabhängigen Verlauf. Insbesondere werden Sie den gemeinsamen Teil Ihrer verschiedenen Niederlassungen nicht leicht erkennen können. Idee für ein Projekt: Nehmen Sie mehrere Git-Zweige, erstellen Sie neue, um gemeinsame Aktualisierungen gemeinsam zu nutzen, und stellen Sie sicher, dass der Status in den anfänglichen Commits auch in neu geschriebenen Commits vorhanden ist (dh schreiben Sie den Verlauf neu, indem Sie Commit / Merge / ... hinzufügen Status der anfänglichen Commits)


0

Zumindest auf Debian gibt es eine Option in etckeeper.conf.

...
# To push each commit to a remote, put the name of the remote here.    
# (eg, "origin" for git).
PUSH_REMOTE="origin"
...

Nach dem manuellen Hinzufügen von Remote zu Git-Repos sollte es sofort funktionieren


Das würde für einen einzelnen Server /etcin einem Remote-Repo funktionieren - erklärt jedoch nicht, wie dieses Remote-Repo mit mehreren Computern umgehen könnte (wie in den anderen Antworten erläutert, entweder über separate Repos oder über Zweige).
Izzy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.