Git installieren – Tutorial

In diesem Tutorial werde ich zeigen, wie man das Git-Versionierungssystem installiert. Zusätzlich zu Git wird außerdem eine Weboberfläche für die Repositories eingerichtet. Außerdem werden die Git-Repositories nur über einen SSH-Zugang verfügbar gemacht, so dass Fremde keinen Zugriff auf das System haben. Die Weboberfläche wird ebenfalls geschützt. Das Beispiel wird an einem Debian-Server (Version 5, Lenny) exerziert.

Nachdem der Server erfolgreich mit openSSH konfiguriert wurde (siehe Debian mit OpenSSH administrieren) kann nun mit dem Aufsetzen eines privaten Git-Servers begonnen werden. Die folgende Anleitung geht dabei davon aus, dass auf dem Debian-System noch kein Git-Server installiert wurde, aber bereits ein Apache2-Webserver vorhanden ist. Es werden die einzelnen Kommandos genannt, um die Git-Versionsverwaltung einzurichten sowie ein Webinterface für Projektänderung bereit zustellen. Die Webanwendung wird ermöglicht durch gitweb und die Zugriffsverwaltung mit SSH wird übernommen von gitosis.

Git und gitosis installieren:

1. Installation von Git:
apt-get install git-core python-setuptools
2. Wechsel in das temporäre Verzeichnis:
cd /tmp
3. Holen der gitosis-Installationsdateien:
git clone git://eagain.net/gitosis
4. Wechsel in das gitosis-Installationsverzeichnis (/tmp/gitosis):
cd gitosis
5. Installtion von gitosis:
sudo python setup.py install
6. Löschen der temporären Dateien:
rm -r -f -v /tmp/gitosis/

Hinweis: In gitosis werden alle Git-Repositories von einem einzelnen Benutzer (im Beispiel gituser) verwaltet. Auf diesen Benutzer greifen auch alle gewünschten Git-Benutzer zu. Gitosis kann die einzelnen Benutzer dann anhand Ihres Schlüssels, mit dem Sie sich am gituser-Account anmelden, zuordnen. Somit ist eine Differenzierung der einzelnen Benutzer problemlos möglich, ohne dass jeder einzelne Benutzer einen direkten SSH-Zugang hat. Dies gewährleistet ein hohes Maß an Sicherheit, ohne die Funktionalität einzuschränken.

7. Globalen Git-Benutzer (gituser) anlegen und ihn der Gruppe www-data zuordnen. Der gituser bekommt www-data als Gruppe zugewiesen, damit später auch die Webanwendung (über gitweb) ohne Zugriffsprobleme verwendet werden kann. Außerdem wird für den gituser die Passwort-Anmeldung deaktiviert, so dass ein Shell-Zugriff über ein Passwort nicht möglich ist (erhöhte Sicherheit).
sudo adduser --shell /bin/sh --gecos 'git version control' --ingroup 'www-data' --disabled-password --home /srv/git gituser

Hinweis: Damit gitosis alle späteren Git-Benutzer kennt, müssen dem „gituser“ die öffentlichen Schlüssel der jeweiligen Benutzer bekannt gemacht werden. Der Benutzer des Schlüssels, mit dem gitosis über den „gituser“ initialisiert wird, wird gleichzeitig Administrator des entsprechenden Repository. Wie das aussieht wird exemplarisch am Beispiel des Benutzers username gezeigt. Die öffentlichen Schlüssel müssen übrigens in der Form „benutzername.pub“ bzw. „benutzername@domain.pub“ abgespeichert werden.

8. Den eigenen öffentlichen Schlüssel (username.pub) im Ordner /tmp abspeichern.
Beispiel-Speicherort:
/tmp/username.pub
9. Den eigenen privaten Schlüssel unter dem Namen „id_rsa“ im persönlichen Ordner abspeichern (dabei auf die Zugriffsrechte (chmod) achten!):
Beispiel-Speicherort:
/home/username/.ssh/id_rsa
10. Konfigurationsdatei für die SSH-Identifikation unter dem Namen „config“ im eigenen „.ssh“-Ordner erstellen.
Beispiel-Speicherort:
/home/username/.ssh/id_rsa
11. Inhalt der „config“-Datei (Host, User und Port falls nötig anpassen):
Host domain.de
User gituser
# falls man einen anderen Port verwendet, muss dieser hier gesetzt werden
# Port 22
IdentityFile ~/.ssh/id_rsa

12. Gitosis mit dem öffentlichen Schlüssel des Git-Administrators initialisieren:
sudo -H -u gituser gitosis-init < /tmp/username.pub sudo chmod +x /srv/git/repositories/gitosis-admin.git/hooks/post-update
13. Den "gituser" als SSH-Zugriffsberechtigten in der SSH-Konfigurationsdatei hinzufügen:
sudo vi /etc/ssh/sshd_config
14. Die Zeile „AllowUsers username“ ändern in:
AllowUsers username gituser
15. Für erhöhte Sicherheit zusätzlich die Anmeldung am Server über Passwörter verbieten. Dazu folgenden Eintrag anpassen/hinzufügen:
PasswordAuthentication no
16. Konfigurationsdatei über den vi abspeichern
17. Konfigurationsdatei neu laden:
sudo /etc/init.d/ssh reload
Zugriffsrechte für das Git-Repository setzen und den "gituser" als Verwalter der Dateien anlegen:
sudo chmod 750 /srv/git
sudo chown gituser:www-data /srv/git

Wenn bisher alles geklappt hat, sollte folgender Ordner existieren:
/srv/git/repositories/gitosis-admin.git/

Der Ordner „gitosis-admin.git“ ist das initiale Git-Repository. Es beinhaltet die Verwaltung aller späteren Git-Repositories sowie die Zugriffsrechte auf die einzelnen Repositories. Damit alle Git-Benutzer erfolgreich erkannt werden können muss im Ordner „gitosis-admin.git“ ein Unter-Ordner namens „keygen“ erstellt werden, in dem dann die öffentlichen Schlüssel (im Format "username.pub" bzw. "username@domain.pub") der jeweiligen Personen abgelegt werden. Über die Kommandozeile lässt sich das auch realisieren:

18. Administrationsrechte holen:
sudo –i
19. Den Ordner „keydir“ erstellen:
sudo -H -u gituser mkdir /srv/git/repositories/gitosis-admin.git/keydir
20. Den öffentlichen Schlüssel aus dem temporären Verzeichnis in das „keydir“-Verzeichnis kopieren (scp = safe copy). Diese Aktion muss über den gituser-Account erfolgen, da diesem Account der „gitosis-admin.git“-Ordner gehört:
sudo -H -u gituser scp /tmp/bennyn.pub /srv/git/repositories/gitosis-admin.git/keydir/

Wer bis hierhin fehlerfrei gekommen ist, der hat jetzt ein startfertiges Git-Versionierungssystem. Um das Ganze komfortabel im Web zu sehen, kann gitweb installiert werden.

Gitweb einrichten:

1. Gitweb installieren:
apt-get install gitweb
2. Eine Passwortdatei anlegen, damit die Git-Webanwendung später passwortgeschützt ist:
sudo htpasswd -c /srv/git/.htpasswd username
3. Die Datei /etc/gitweb.conf öffnen und dort folgende Zeile:
$projectroot = "/var/cache/git";
ändern in:
$projectroot = "/srv/git/repositories";
4. Die Datei /etc/gitweb.conf abspeichern.
5. Die gitweb-Webseite werden wir auf einer Subdomain (sub.domain.de) anlegen. Dazu muss folgende Datei erstellt werden:
/etc/apache2/sites-available/sub.domain.de
6. Der Inhalt der Datei „sub.domain.de“ kann wie folgt aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<VirtualHost *:80>
  ServerName sub.domain.de
  ServerAdmin webmaster@domain.de
  DocumentRoot /srv/git/repositories
  SetEnv GITWEB_CONFIG /etc/gitweb.conf
  Alias /gitweb.css /usr/share/gitweb/gitweb.css
  Alias /git-logo.png /usr/share/gitweb/git-logo.png
  Alias /git-favicon.png /usr/share/gitweb/git-favicon.png
  ScriptAlias /gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
  DirectoryIndex gitweb.cgi
 
<Directory />
    AuthType Basic
    AuthName "Projekt Team"
    AuthUserFile /srv/git/.htpasswd
                AllowOverride None
                Order allow,deny
                Allow from all
          Require valid-user
</Directory>
</VirtualHost>

7. Um diese Domain verfügbar zu machen, muss die Seite nach dem Abspeichern der Konfiguration aktiviert werden:
sudo a2ensite git.angelcode.de
8. Außerdem empfiehlt es sich Rewrite-Befehle über das Apache Rewrite-Modul zu aktivieren:
sudo a2enmod rewrite
9. Nach diesen Änderungen muss der Apache-Server neu geladen werden:
sudo /etc/init.d/apache2 reload

Wenn jetzt alles geklappt hat ist Git-Repository passwortgeschützt über die Adresse sub.domain.de erreichbar. Viel Spaß beim Ausprobieren! Sollten Fehler oder Fragen auftreten, so bitte ich um Kommentare.

Im nächsten Teil dieser Anleitung werde ich zeigen, wie man sich als Windows-Benutzer mit dem Git-Repository verbindet und Dateien hoch –bzw. runterlädt.

Ergänzende Webseiten:
Git Repositories gemeinsam nutzen
Git, Gitosis, Gitweb (the Debian way)
Hosting von Git-Repositories mit Gitosis
How to set up your own private Git server on Linux
Git-Repositories mit gitosis und gitweb (Debian Lenny)

2 Gedanken zu „Git installieren – Tutorial“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.