fragen stichworte

Wie speichert man etckeeper Repositories über git auf einem zentralen Server?

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 irgendwo ein Git-Repo in irgendeiner Form 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 mit

versucht
git push faruser@farhost:somedir/server1

aber das ist fehlgeschlagen.

Wie du sehen kannst, habe ich noch nie mit git gearbeitet ... Irgendwelche Ideen, wie dies erreicht werden kann, werden sehr geschätzt :)

Prost,

Andreas

antworten

Zusätzlich zu der guten Antwort von pjz, hier ist, wie es Schritt für Schritt getan werden könnte:

Erstellen Sie die Datei/etc/etckeeper/commit.d/60-push (vergessen Sie nicht chmod + x) 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 den Git Repo enthält.

Die ~/.ssh/config von root (!) sollte etwa so aussehen:

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 zentralen Server

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

Teste es mit einer kleinen Änderung in/etc und dann einen Etckeeper Commit "test push'ing".

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. Suchen Sie dazu nach entfernten Positionen in git (mit git drücken Sie). Dann müssen Sie von all Ihren Servern den Zugriff auf diesen Standort einrichten. Von diesem Punkt aus können Sie von allen Servern aus pushen. An welchem ​​Punkt sollte der Vorschlag funktionieren, auf den Sie hingewiesen haben?

Sie müssen den Remote-Host so einrichten, dass der lokale Benutzer (dh root, während Sie etckeeper verwenden) zum Remote-Repository pushen darf. Wie Sie dies tun, 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 dafür zulassen, dass sich das lokale Stammverzeichnis an der Reomteside ohne (Tastatur -, ...) Ineraktion anmeldet. Und ja, beim Push an den Remote-Standort muss das Repository vorhanden sein, sodass mindestens ein leeres Repo vorhanden sein muss. Sagen Sie uns also zuerst die genaue Situation, mit der Sie arbeiten, und den genauen Fehler, den Sie bekommen.

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

git push faruser@farhost:somedir master:server1

Dadurch wird der lokale 'master'-Zweig in den fernen' server1'-Zweig verschoben. Sie können dies variieren, beispielsweise:

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

Einige Bemerkungen:

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

  2. Aus dem gleichen Grund wird im Remote-Repo ein linearer unabhängiger Verlauf angezeigt. Insbesondere können Sie nicht einfach den gemeinsamen Teil Ihrer verschiedenen Branchen sehen. 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 ursprünglichen Commits auch in neu geschriebenen Commits vorhanden ist Zustand der ursprünglichen Commits)

Zumindest bei 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 funktionieren