Gitolite und GitList unter Debian

Ob für die eigenen Konfigurationsdateien, Softwareprojekte oder für Webseiten bzw. Blogs bieten sich Versionsverwaltungen an. Eine, von Linus Torvalds entwickelte, Möglichkeit zu Versionsverwaltung – Git – hat sich mittlerweile fest etabliert.Möchte man nicht auf Plattformen wie GitHub oder BitBucket setzen und hat einen vServer oder Ähnliches zur Verfügung, bietet es sich geradezu an seine Projekte etc. selbst zu Hosten.

gitlist webinterface
gitlist webinterface

Dabei wird die Einrichtung in zwei Schritte gegliedert:

  1. Einrichten der Server-Schnittstelle „gitolite“ (machen wir hier)
  2. Einrichten des Webfrontends „gitlist“ (gibt es noch einen Post zu)

Gitolite ist ein Fork bzw. eine Weiterentwicklung des Projektes gitosis und ist in der Lage mehrere Repositories zu verwalten und verfügt obendrein noch über eine Rechte- und Benutzerverwaltung in Form einer Konfigurationsdatei. Die Authentifizierung erfolgt dabei über SSH und Private- bzw. Public-Keys.

Da die Installation von gitolite git benötigt, sollte das entsprechende Paket auch installiert sein.

bash

# Paketlisten updaten
apt-get update
# Updates installieren sofern nötig
apt-get upgrade
# das PAket git installieren
apt-get install git

Weiterhin wird zur sauberen Trennung, ein separater Nutzer eingerichtet.

bash

adduser git

Daraufhin wechselt man den Benutzer, nimmt die Umgebung mit und wechselt in das Benutzerverzeichnis des soeben erstellten Benutzers.

bash

su - git
cd ~

Da für die Authentifizierung ein SSH-Publickey (s.o.) benötigt wird, muss dieser zunächst erzeugt werden. Sicherlich kann auch ein bestehender Key verwendet werden, jedoch sollte man hinsichtlich sauberer Trennung einen separaten Key erstellen.

bash

# RSA-Schlüsselpaar erzeugen
ssh-keygen -t rsa

Zur Installation bleibt eigentlich nicht viel zu sagen. Der aktuelle Stand wird ausgecheckt und über die mitgelieferten Skripte installiert.

bash

# aktuellen Stand klonen
git clone git://github.com/sitaramc/gitolite
# Verzeichnis für die Binaries im Benutzerverzeichnis erstellen
mkdir -p $HOME/bin
# gitolite installieren
gitolite/install -to $HOME/bin
# public-key integrieren
gitolite setup -pk git.pub

Je nach Konfiguration, kann es sein das der letzte Befehl scheitert. Warum? Ganz einfach er kann den entsprechenden Befehl nicht finden, da nicht jede Distribution per Default das bin-Verzeichnis im Home an den PATH anhängt. Schnelle Abhilfe schafft ein entsprechender export oder ein Aufruf mit vollem Pfad.

bash

$HOME/bin/gitolite setup -pk git.pub

Soweit so gut, ist man soweit gekommen, ist eigentlich alles Nötige erledigt und gitolite funktioniert.

In einer lokalen Shell kann nun das Repository für die Konfiguration ausgecheckt werden und Benutzer sowie Repositories hinzugefügt werden.

bash

git clone git@example.com:/gitolite-admin

Daraufhin erhält man einen neuen lokalen Ordner „gitolite-admin“. Darin befinden sich die Ordner keydir und conf. Möchte man einen neuen Public-Key hinzufügen, so kopiert man diesen als Datei in den Ordner keydir und für innerhalb der Konfiguration im Ordner conf die entsprechenden Einträge hinzu. Dabei sieht die Konfiguration schematisch so aus:

ini

@entwickler = daniel felix simon
@admins = git 

repo meinprojektrepo
    RW+ = daniel
    RW = felix
    R = @entwickler

Dabei entsprechen @entwickler und @admins Gruppen, welche das hinzufügen von Benutzern recht komfortabel gestalten. Möchte man alle Nutzer hinzufügen bietet gitolite die Gruppe @all an. Die Zeile „repo meinprojektrepo“ stellt dabei ein Repository dar und definiert die Zugriffsrechte der Benutzer auf das Repository. Möchte man weitere Repositories erstellen, fügt man einfach weitere Abschnitte hinzu und gitolite wird die entfernten Repositories mit dem nächsten push erstellen und entsprechend einrichten.

bash

# neuen Public-Key hinzufügen
git add keydir/neuer_key
# Änderungen commiten/einpflegen
git commit -am "Neuer Key von Max Mustermann"
# Änderungen an Remote-Server übertragen
git push

So das war es eigentlich. Da der Post relativ lang geworden ist, werde ich den Part über gitlist später in einem weiteren Post erläutern. Sollten Fehler oder Fragen existieren, bitte einfach melden.