cgit mit nginx

Cgit ist ein Web-Interface für git. Es ist in C realisiert und arbeitet als CGI-Skript.

Im folgenden wird beschrieben, wie cgit mit nginx unter Ubuntu 10.04 aufgesetzt und konfiguriert wird. Die Anleitung sollte sich jedoch leicht auf andere Versionen bzw. Distributionen übertragen lassen.

Zunächst wird das Programm fcgiwrap benötigt. Da es leider bei Ubuntu 10.04 noch nicht vorhanden ist, gibt es hier zwei Möglichkeiten. Entweder es wird von Hand selbst "gebaut" oder es wird versucht ein vorhandenes Paket zu installieren. In diesem Fall wurde sich dafür entschieden ein fertiges Paket aus einer neueren Ubuntu Version zu verwenden. Da dieses Jahr noch auf Ubuntu 12.04 aktualisiert werden soll wurde auch das fcgiwrap Paket aus dieser Version genommen und installiert.

$ sudo apt-get update
$ sudo dpkg -i fcgiwrap_1.0.3-3_i386.deb
$ sudo apt-get -f install

Da cgit leider nicht in den Paketquellen vorhanden ist, muss es auch selbst gebaut werden, das ist jedoch relativ einfach zu machen. Zunächst werden die dafür benötigten Pakete installiert.

$ sudo apt-get install build-essential git-core libssl-dev

Für ein leichteres und schnelleres Update wird anschließend direkt der stable Zweig des git Repositories verwendet.

$ git clone git://hjemli.net/pub/git/cgit
$ cd cgit/
$ git submodule init git submodule update
$ git checkout stable

Im stable Zweig kann dann direkt mit dem "Bauen" begonnen werden.

$ make

Theoretisch könnte cgit jetzt direkt mit make install ins System installiert werden, da jedoch cgit an einer anderen Stelle liegen soll, wird es einfach von Hand kopiert.

Achtung: Wer die Mapage benötigt müsste diese auch von Hand kopieren.

$ cp cgit /mein/cgi-bin/
$ sudo mkdir /var/www/cgit/
$ sudo cp cgit.css cgit.png /var/www/cgit/
$ sudo chown -R www-data:www-data /var/www/cgit

Ist dies geschafft kann nginx konfiguriert werden.

server {
    listen       git.example.org:80;
    server_name  git.example.org;

    access_log  /var/log/nginx/git.log;
    error_log   /var/log/nginx/git.error;

    root /var/www/cgit/;
    proxy_redirect off;

    location ~* ^.+\.(css|png|ico)$ {
        expires 30d;
    }

    location / {
                include fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME  /mein/cgi-bin/cgit;
                fastcgi_pass   unix:/var/run/fcgiwrap.socket;
                fastcgi_param    PATH_INFO $uri;
                fastcgi_param    QUERY_STRING  $args;
    }
}

Nun noch nginx neu starten.

$ sudo service nginx restart

Zum Schluss muss noch die Datei /etc/cgitrc angelegt werden. Der Inhalt könnte wie folgt aussehen.

root-title=Mein cgit Server
root-desc=
css=/cgit.css
logo=/cgit.png
snapshots=tar.gz tar.bz2

virtual-root=/
enable-index-links=1
enable-log-filecount=1
enable-log-linecount=1
enable-commit-graph=1

repo.url=erstes-repo
repo.path=/var/git/erstes-repo
repo.desc=Erstes Repo
repo.owner=Ich

repo.url=zweites-repo
repo.path=/var/git/zweites-repo
repo.desc=Zweites Repo
repo.owner=Du

Achtung: Für mehr Sicherheit sollte der Dienst fcgiwrap noch einmal geprüft werden. Laufen alle Prozesse mit den gewünschten Nutzerrechten und in der gewünschten Umgebung?

Verwandte Artikel