Git
Chapters ▾ 2nd Edition

4.5 Git auf dem Server - Git-Daemon

Git-Daemon

Als Nächstes richten wir einen Daemon ein, der Repositorys mit dem „Git“-Protokoll versorgt. Das ist eine gängige Option für den schnellen, nicht authentifizierten Zugriff auf deine Git-Daten. Denke daran, dass alles, was du über dieses Protokoll bereitstellst, innerhalb deines Netzwerks öffentlich ist, da dies kein authentifizierter Dienst ist.

Wenn du dieses auf einem Server außerhalb deiner Firewall ausführst, sollte dies nur für Projekte verwendet werden, die für die Welt öffentlich sichtbar sein dürfen. Wenn sich der genutzte Server, hinter deiner Firewall befindet, kannst du es für Projekte verwenden, auf die eine große Anzahl von Personen oder Computern (Continuous Integration oder Build-Server) nur Lesezugriff haben, wenn du nicht für jeden einen SSH-Schlüssel hinzufügen möchtest.

In jedem Fall ist das Git-Protokoll relativ einfach einzurichten. Grundsätzlich solltest du diesen Befehl als Daemon auszuführen:

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Mit der --reuseaddr Option kann der Server neu gestartet werden, ohne dass man auf eine Time-Out für alte Verbindungen warten muß. Mit der --base-path Option können Benutzer Projekte klonen, ohne den gesamten Pfad anzugeben. Der abschließende Pfad teilt dem Git-Daemon mit, wo nach zu exportierenden Repositorys gesucht werden soll. Wenn du eine Firewall verwendest, musst du den Port 9418 konfigurieren, um eingehende Verbindungen zuzulassen.

Du kannst diesen Prozess auf verschiedene Arten als Daemon betreiben, je nachdem, welches Betriebssystem du verwendest.

Das systemd ist das gebräuchlichste Init-System unter modernen Linux-Distributionen. Das könntest du für diesen Zweck verwenden. Lege einfach eine Datei mit folgendem Inhalt in /etc/systemd/system/git-daemon.service ab:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

Du hast vielleicht bemerkt, dass der Git-Daemon hier mit git als Gruppe und Benutzer gestartet wird. Passe es an deine Bedürfnisse an und stelle sicher, dass der angegebene Benutzer auf dem System vorhanden ist. Überprüfe auch, ob sich die Git-Binärdatei tatsächlich unter /usr/bin/git befindet und ändere gegebenenfalls den Pfad.

Abschließend führst du systemctl enable git-daemon aus, um den Dienst beim Booten automatisch zu starten, so dass du den Dienst mit systemctl start git-daemon und systemctl stop git-daemon starten und stoppen kannst.

Auf anderen Systemen kannst du xinetd verwenden oder ein Skript in deinem sysvinit System benutzen. Auch andere Lösungen sind möglich, solange der Prozess als Daemon läuft und irgendwie überwacht wird.

Als nächstes musst du Git mitteilen, auf welche Repositorys nicht authentifizierter, serverbasierter Zugriffe auf Git möglich sein soll. Du kannst das in den einzelnen Repositorys tun, indem du eine Datei mit dem Namen git-daemon-export-ok erstellst.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

Das Vorhandensein dieser Datei teilt Git mit, dass es in Ordnung ist, dieses Projekt ohne Authentifizierung zur Verfügung zu stellen.

scroll-to-top