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 Ihre Git-Daten. Denken Sie daran, dass alles, was Sie über dieses Protokoll bereitstellen, innerhalb des Netzwerks öffentlich ist, da dies kein authentifizierter Dienst ist.

Wenn Sie dies auf einem Server außerhalb Ihrer Firewall ausführen, sollte es nur für Projekte verwendet werden, die für die Welt öffentlich sichtbar sind. Wenn sich der Server, auf dem Sie es ausführen, in Ihrer Firewall befindet, können Sie es für Projekte verwenden, auf die eine große Anzahl von Personen oder Computern (Continuous Integration oder Build-Server) nur Lesezugriff haben, wenn Sie dies nicht möchten um jeweils einen SSH-Schlüssel hinzuzufügen.

In jedem Fall ist das Git-Protokoll relativ einfach einzurichten. Grundsätzlich müssen Sie diesen Befehl daemonisiert ausführen:

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

Mit der --reuseaddr-Option kann der Server neu gestartet werden, ohne dass das Zeitlimit für alte Verbindungen überschritten wird. Mit der --base-path Option können Benutzer Projekte klonen, ohne den gesamten Pfad anzugeben. Der Pfad am Ende teilt dem Git-Dämon mit, wo nach zu exportierenden Repositorys gesucht werden soll. Wenn Sie eine Firewall verwenden, müssen Sie auch an Port 9418 der Box, auf der Sie diese einrichten, ein Loch in die Firewall bohren.

Sie können diesen Prozess auf verschiedene Arten dämonisieren, je nachdem, welches Betriebssystem Sie verwenden.

Da systemd das gebräuchlichste Init-System unter modernen Linux-Distributionen ist, können Sie es für diesen Zweck verwenden. Legen Sie 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

Sie haben vielleicht bemerkt, dass der Git-Daemon hier mit git als Gruppe und Benutzer gestartet wird. Passen Sie es an Ihre Bedürfnisse an und stellen Sie sicher, dass der angegebene Benutzer auf dem System vorhanden ist. Überprüfen Sie auch, ob sich die Git-Binärdatei tatsächlich unter /usr/bin/git befindet und ändern Sie gegebenenfalls den Pfad.

Abschließend führen Sie systemctl enable git-daemon aus, um den Dienst beim Booten automatisch zu starten, so dass Sie den Dienst mit systemctl start git-daemon und systemctl stop git-daemon starten und stoppen können.

Auf anderen Systemen können Sie xinetd verwenden um ein Skript in Ihrem sysvinit-System zu benutzen, oder etwas anderes – solange Sie diesen Befehl aktiviert und irgendwie überwacht bekommen.

Als nächstes müssen Sie Git mitteilen, auf welche Repositorys nicht authentifizierter, serverbasierter Zugriff auf Git möglich sein soll. Sie können das in den einzelnen Repositories tun, indem Sie eine Datei mit dem Namen git-daemon-export-ok erstellen.

$ 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 zu betreuen.