Kapitel ▾ 2. Auflage

4.5 Git auf dem Server - Git Daemon

Git Daemon

Als Nächstes richten wir einen Daemon ein, der Repositories über das „Git“-Protokoll bereitstellt. Dies ist eine gängige Wahl für schnellen, unauthentifizierten Zugriff auf Ihre Git-Daten. Denken Sie daran, dass, da dies kein authentifizierter Dienst ist, alles, was Sie über dieses Protokoll bereitstellen, innerhalb seines Netzwerks öffentlich ist.

Wenn Sie dies auf einem Server außerhalb Ihrer Firewall betreiben, sollten Sie es nur für Projekte verwenden, die für die Welt öffentlich sichtbar sind. Wenn sich der Server, auf dem Sie es ausführen, innerhalb 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) schreibgeschützten Zugriff hat, wenn Sie nicht für jeden eine SSH-Schlüssel hinzufügen möchten.

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/

Die Option --reuseaddr ermöglicht es dem Server, neu zu starten, ohne auf das Timeout alter Verbindungen warten zu müssen, während die Option --base-path es den Benutzern ermöglicht, Projekte zu klonen, ohne den gesamten Pfad anzugeben. Der Pfad am Ende teilt dem Git-Daemon mit, wo er nach zu exportierenden Repositories suchen soll. Wenn Sie eine Firewall betreiben, müssen Sie außerdem einen Port 9418 auf der Box, auf der Sie dies einrichten, öffnen.

Sie können diesen Prozess auf verschiedene Arten daemonisieren, je nach Betriebssystem, das Sie verwenden.

Da systemd das gängigste Init-System unter modernen Linux-Distributionen ist, können Sie es zu diesem Zweck verwenden. Platzieren Sie einfach eine Datei unter /etc/systemd/system/git-daemon.service mit folgendem Inhalt

[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 dies an Ihre Bedürfnisse an und stellen Sie sicher, dass der angegebene Benutzer im System existiert. Überprüfen Sie außerdem, ob sich die Git-Binärdatei tatsächlich unter /usr/bin/git befindet, und ändern Sie den Pfad gegebenenfalls.

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

Auf anderen Systemen möchten Sie möglicherweise xinetd, ein Skript in Ihrem sysvinit-System oder etwas anderes verwenden – solange Sie diesen Befehl daemonisieren und irgendwie überwachen.

Als Nächstes müssen Sie Git mitteilen, für welche Repositories ein unauthentifizierter, serverbasierter Git-Zugriff zulässig ist. Dies können Sie in jedem Repository tun, indem Sie eine Datei namens 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 bereitzustellen.