Ariel Costas

Instalación y configuración de Cgit en Debian

El contenido de esta guía fue publicado originalmente en inglés en landchad.net por mí. Referencias a cosas que deberían estar configuradas u otras guías hacen referencia a contneido publicado en landchad.net.


Una vez tienes tu servidor alojando tus repositorios git, puedes querer que otros puedan visitarlos y navegar por ellos desde la web. Cgit es un programa Libre para navegar por repositorios Git a través de la Web.

Ten en cuenta que Cgit es un frontend de solo lectura para repositorios git, y no tiene gestión de reportes, contribuciones de código o cuentas de usuario. Si eso es lo que quieres, considera instalar Gitea en su lugar.

Instalar cgit y fcgriwrap

Instalar fcgiwrap

NGINX no es capaz de ejecutar script CGI por sí mismo, depende de una capa intermedia como fcgiwrap para ejecutar scripts CGI como cgit:

apt install fcgiwrap

Y ahora podemos instalar cgit con el siguiente comando:

apt install cgit

Configurando NGINX

A estas alturas ya deberías tener un servidor NGINX funcionando con un certificado TLS. Añade la siguiente configuración a tu servidor para pasar las peticiones a Cgit, mientras que sirve archivos estáticos directamente:

server {
	listen 443 ssl;
	listen [::]:443 ssl;
	ssl_certificate /etc/letsencrypt/live/git.example.org/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/git.example.org/privkey.pem;
	server_name git.example.org;

	root /usr/share/cgit ;
	try_files $uri @cgit ;

	location @cgit {
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
		fastcgi_param PATH_INFO $request_uri;
		fastcgi_param QUERY_STRING $query_string;
		fastcgi_pass unix:/run/fcgiwrap.socket;
	}
}

Ahora haz que NGINX recargue su configuración.

Configurando cgit

Tienes cgit instalado y funcionando, pero probablemente lo ves sin ningún estilo ni ningún repositorio. Para cambiar esto, tenemos que configurar Cgit a nuestro gusto editando el archivo /etc/cgitrc.

css=/cgit.css
logo=/cgit.png
virtual-root=/

# Título y descripción que se muestran en la parte superior de cada página
root-title=Mi servidor de cgit
root-desc=Una interfaz web para mis repositorios, cortesía de cgit.

# La ubicación de tus repositorios git
scan-path=/srv/git/

Esta configuración asume que seguiste la guía de alojamiento de Git y almacenas tus repositorios en el directorio /srv/git/.

La configuración de cgit permite cambiar muchos ajustes, como se documenta en la manpage de cgitrc(5) instalada junto a Cgit.

Cambiando el nombre de dueño del repositorio mostrado

La página principal de cgit muestra el dueño de cada repositorio, que es "git" si seguiste la guía de alojamiento de git, pero puedes querer que muestre tu nombre. Cgit muestra el nombre en el sistema del usuario, así que necesitas modificar el usuairo Git para que muestre tu nombre:

usermod -c "Tu nombre" git

Cambiando la descripción del repositorio

Navega a tu repositorio bare y modifica el archivo description que hay en su interior.

Mostrar el tiempo idle de cada repositorio

Para hacer esto, tenemos que crear un disparador post-recepción [NdT. en inglés post-receive hook] para cada repositorio que actualiza el archivo que cgit usa para determinar el tiempo inactivo. Dentro de tu repositorio, crea un archivo hooks/post-receive y añade el siguiente contenido:

#!/bin/sh
			
agefile="$(git rev-parse --git-dir)"/info/web/last-modified

mkdir -p "$(dirname "$agefile")" &&
git for-each-ref \
	--sort=-authordate --count=1 \
	--format='%(authordate:iso8601)' \
	>"$agefile"

Y otórgale permisos de ejecución con:

chmod +x hooks/post-receive

La próxima vez que hagas push a ese repositorio, el tiempo inactivo debería reiniciarse y mostrar el valor correcto.