grimboite/articles/sys/2015-03-07-cgit.md

3.1 KiB

Title Date Tags
cgit 2015-03-07 git, cgit, server

Cgit se présente comme A hyperfast web frontend for git repositories written in C. Jason A. Donenfeld: about summary refs log tree commit diff stats. Il se trouve normalement dans les dépôts de votre distribution. Sous Debian, un petit aptitude install cgit fera l'affaire. Le paquet viendra avec liblua comme dépendance, mais ce sera tout. Pour l'exécuter au travers d'Nginx, vous devrez également installer fcgiwrap, puis le démarrer (systemctl start fcgiwrap.socket).

Ma configuration Nginx est la suivante. J'ai placé cgit à l'url /cgit. Il est nécessaire d'ajouter un deuxième emplacement pour les fichiers statiques, qui seront accessibles depuis /cgit-web:

location /cgit {
	include fastcgi_params;
	fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
	fastcgi_pass unix:/run/fcgiwrap.socket;
	fastcgi_split_path_info           ^(/cgit/?)(.+)$;
	fastcgi_param PATH_INFO $fastcgi_path_info;
	fastcgi_param QUERY_STRING $args;
}

location /cgit-web {
	rewrite ^/cgit-web(/.*)$ $1 break;
	root /usr/share/cgit;
}

En ayant fait l'installation par le package maneger de Debian, les fichiers seront placés dans le répertoire /usr/share/cgit/, à l'exception du fichier de configuration, accessible depuis le chemin /etc/cgit/cgitrc. C'est à cet endroit-là que vous renseignerez notamment les dépôts à afficher, ainsi que l'url à utiliser pour accéder aux fichiers de style (dans la conf' nginx, on a spécifié cgit-web alors que le fichier cgitrc paramètre par défaut le chemin vers cgit-css. A vous de voir, mais faites correspondre les deux).

Pour ajouter des dépôts, le plus simple est d'ajouter la ligne scan-path=<path>. L'autre solution est de les ajouter à la main, en utilisant les propriétés url, path et desc, comme proposé sur le Wiki d'ArchLinux:

#
# List of repositories.
# This list could be kept in a different file (e.g. '/etc/cgitrepos')
# and included like this:
#   include=/etc/cgitrepos
#

repo.url=MyRepo
repo.path=/srv/git/MyRepo.git
repo.desc=This is my git repository

repo.url=MyOtherRepo
repo.path=/srv/git/MyOtherRepo.git
repo.desc=That's my other git repository

L'utilisateur sous lequel tourne nginx doit cependant avoir accès en lecture aux dépôts. Pour faciliter les choses, j'ai modifié les permissions pour donner accès en lecture au groupe www-data, tout en gardant la propriété avec mon compte utilisateur: sudo chown -R fred:www-data <path>.

Ajoutez-y une petite description avec l'attribut root-desc, ainsi qu'un titre éloquent avec root-title, et vous aurez une petite interface pratique, rapide et lisible. Elle n'offrira sans doute pas autant de fonctionnalités qu'un GitWeb avec http-backend.

#
# cgit config
# see cgitrc(5) for details

css=/cgit-web/cgit.css
logo=/cgit-web/cgit.png

root-title=Git repositories
root-desc=

scan-path=/home/fred/git/

Sources: