Das Netz ist natürlich voll von HowTos zum Thema gitolite, in diesem hier nutze ich aber nicht die bleeding edge Version von upstream sondern das Debian-Paket. Eine gewisse Hilfe für’s Verständnis und bei der Installation war die Dokumentation für gitolite 2.x, denn in Wheezy ist Version 2.3 verpackt.
Installation
Geht los mit Installation des Pakets gitolite. Wenn der bei der Installation dpkg nichts konfiguriert haben will, dann gibt man danach nochmal ein:
dpkg-reconfigure gitolite
Dort wird dann ein SSH public key abgefragt für den Admin-Nutzer. In meinem Fall hab ich hier für die Testinstallation auf dem selben Rechner den folgenden Pfad angegeben, ansonsten kopiert man seinen public key ins Eingabefeld:
/home/adahl/.ssh/id_rsa.pub
Damit liegt jetzt hier unterhalb von /var/lib/gitolite
folgendes:
% ls -la /var/lib/gitolite
insgesamt 28
drwxr-xr-x 5 gitolite gitolite 4096 Jun 17 13:51 ./
drwxr-xr-x 58 root root 4096 Jun 17 13:47 ../
drwx------ 8 gitolite gitolite 4096 Jun 17 13:47 .gitolite/
-rw-r--r-- 1 gitolite gitolite 4217 Jun 17 13:47 .gitolite.rc
-rw------- 1 gitolite gitolite 0 Jun 17 13:47 projects.list
drwx------ 4 gitolite gitolite 4096 Jun 17 13:47 repositories/
drwx------ 2 gitolite gitolite 4096 Jun 17 13:47 .ssh/
Da mein public key bereits hinterlegt ist, kann ich direkt zum nächsten Schritt übergehen und das Admin-Repo clonen, welches bei der Installation angelegt wurde:
git clone gitolite@localhost:gitolite-admin
Wie man sieht, hatte ich den dedizierten Nutzer gitolite genannt, für Produktionsumgebung ist vielleicht git eine bessere Wahl.
Ganz wichtig: beim Ändern der Config muss man stets drauf achten, dass man sich nicht selbst aussperrt. Für das Repository gitolite-admin
muss man Schreibrechte für irgendeinen Key behalten, auf den man auch Zugriff hat und der unterhalb von keydir
im Repo liegt, sonst hat man keine Möglichkeit mehr ohne große Schmerzen diese Rechte wiederzuerlangen.
Konfiguration
Als nächstes habe ich die Datei /var/lib/gitolite/.gitolite.rc
angepasst. Berücksichtigt sind hier bereits, dass ich sowohl git-daemon als auch gitweb einsetzen und die Repos auf einen anderen Rechner spiegeln will. D.h. ich habe folgende Einträge geändert:
$REPO_UMASK = 0027;
$GL_GITCONFIG_KEYS = "gitolite.mirror.*";
$REPO_BASE="/srv/repos/git";
Der letzten Zeile ist erhöhte Beachtung zu schenken. Die bereits angelegten Repositories gitolite-admin
und testing
aus /var/lib/gitolite/repositories
müssen nämlich in den geänderten Pfad verschoben werden. Damit der Zugriff über gitweb funktioniert, habe ich den Nutzer www-data
der Gruppe git
hinzugefügt und die Rechte des Repository-Verzeichnisses gelockert:
sudo addgroup www-data git
sudo chmod g+rx /var/lib/gitolite/repositories
Die eigentliche Konfiguration erfolgt dann wie bei gitolite üblich über das admin-Repository nachdem man es geklont hat:
git clone gitolite@myfancyserver:gitolite-admin
Wie man das im Einzelnen macht, kann man in der Doku zu gitolite v2 nachlesen. Das ist nicht Debian-spezifisch.
gitweb mit lighttpd
Für einen schnellen Überblick mit dem Webbrowser ist das Paket gitweb
installiert. Als Webserver kann vermutlich irgendein Webserver dienen. Für lighttpd
habe ich eine Datei /etc/lighttpd/conf-available/80-gitweb.conf
angelegt und mit den für diesen Browser üblichen Mechanismen aktiviert. Der Inhalt sieht so aus:
# -*- depends: cgi -*-
server.modules += ("mod_setenv")
setenv.add-environment = ("GITWEB_CONFIG" => "/etc/gitweb.conf")
alias.url += ( "/gitweb" => "/usr/share/gitweb" )
$HTTP["url"] =~ "^/gitweb/" {
server.indexfiles = ("gitweb.cgi")
cgi.assign = ( ".cgi" => "" )
}
Es ist außerdem das Modul 10-cgi.conf
zu aktivieren:
sudo lighty-enable-mod cgi
sudo lighty-enable-mod gitweb
In der /etc/gitweb.conf
sind auch noch Anpassungen zu tätigen. Hier meine geänderten Zeilen:
$projectroot = "/var/lib/gitolite/repositories";
$projects_list = "/var/lib/gitolite/projects.list";
@diff_opts = ('--find_renames', '--minimal');
Urspünglich war jetzt hier noch eine Beschreibung zum Mirroring, ich verschiebe das auf später und tu es in einen separaten Artikel … O:-)