Autogestión: Montar y Administrar gitolite + cgit + git-daemon

Los repositorios git son una de las mejores cosas que se han hecho a nivel de compartir. No sólo permite descargar y hojear el código sino que además permite ver que cambios se han hecho cuando, aumentando así la confianza que se pueda tener en ese programa. Así que al lío. Veremos cómo se instala en un servidor con Debian Wheezy.

La parte de la instalación es fácil:

# aptitude install git gitolite3

Nos pedirá una clave SSH. Podemos pasar por que vamos a re-configurar el paquete, para ajustar algunas cosillas.

# dpkg-reconfigure gitolite3

Nos preguntará que usuario vamos a usar, directorio home de ese usuario (dónde estarán los repositorios) y una clave SSH. Deberíamos poner la de nuestro ordenador. Una vez hecho, entraremos con el usuario git y iniciaremos el repositorio.

# su git
$ gitolite setup -a admin

Veremos que en el home de git aparecen ya dos repositorios git, uno llamado testing y el otro gitolite-admin. Este es muy importante, por eso lo clonaremos a nuestro ordenador y administraremos todos los repositorios desde ahí.

$ git clone git@servidor.git.lol:gitolite-admin
$ cd gitolite-admin

Aquí veremos dos directorios, keys y conf. En el primero veremos un archivo llamado admin.pub, que contiene nuestra clave de administrador. En conf veremos gitolite.conf, que es dónde está la magia. Ahí añadiremos los repositorios y permisos de estos que queramos.

Ahora, según las necesidades de cada persona, habrán distintas necesidades. Para una mejor comprensión, mejor leer la documentación. A continuación habrá un pequeño resumen con una pequeña explicación a modo de comentario.

# gitolite.conf

# Declaramos los grupos que queramos
@usuarias = foo bar 

# Necesario para que git-daemon acceda a los repositorios
repo @all
    R       = daemon

repo gitolite-admin
    RW+     =   admin

# Declaramos repositorios. El que tengan el mismo prefijo (ElBinario), hará que se divida en 
# secciones, cómo veremos más adelante con cgit.
repo ElBinario/gnusrss
    RW+     =   @elbinario
    R       =   @all

repo ElBinario/eve
    RW+     =   @usuarias
    R       =   @all

repo ElBinario/alex
    RW+     =   @usuarias
    R       =   @all

repo ElBinario/bofh
    RW+     =   @usuarias
    R       =   @all

repo ElBinario/dni
    RW+     =   @usuarias
    R       =   @all

repo ElBinario/etherpad-lite-config-files
    RW+     =   @usuarias
    R       =   @all

repo ElBinario/asocial
    RW+     =   @usuarias
    R       =   @all

# Según lo que se quiera, esto puede no interesar. Esto permite a cualquier usuaria crear un
#  repositorio.
repo CREATOR/[a-z].*
    C       =  @usuarias
    RW+     =  CREATOR
    RW      =  WRITERS
    R       =  READERS

Tras modificar el fichero conf/gitolite.conf, tendremos que hacer constar los cambios:

$ git add conf/gitolite.conf
$ git commit -m "initial commit"
$ git push --set-upstream origin master # esto sólo la primera vez, las siguientes será sólo:
$ git push

Ahora podríamos clonar de tal manera:

# Para clonar uno existente
$ git clone git@git.server.lol:ElBinario/eve.git
# Para crear un repositorio
$ git clone git@git.server.lol:drymer/testeando.git

Vale. Ahora le pondremos una interfaz web, que siempre queda más bonito. gitweb puede servir, pero para mi es demasiado sencillo, aunque tiene la ventaja de que anda en la paquetería de debian, a diferencia de cgit. Pero bueno, cgit ofrece más cosas que gitweb, así que usaremos ese:

$ git clone git://git.zx2c4.com/cgit
$ cd cgit
$ git submodule init
$ git submodule update
$ make get-git
$ make
$ make install

A continuación la configuración. Primero el virtual host de Nginx, un script de manejo del cgi y luego el /etc/cgitrc, que es su fichero de configuración. Está todo en el pad, para no alargar demasiado el articulo. No explicaré que hace cada linea del /etc/cgitrc por que seria muy largo. Para eso, mejor leer el man.

Hecho esto, reiniciamos nginx e iniciamos el script de inicio (muy cutre) de fcgiwrap y ya deberíamos ver nuestro repositorio git. Al final he puesto un pequeño cheatsheet de cómo administrar diferentes aspectos necesarios.

9 Comments

    1. Pues leyendo y montando cosas. Yo he aprendido montando las cosa sobre las que he ido escribiendo por aquí.

    1. Es bonito y simple, cómo comentas. Pero eso tiene mucha pinta de usar javascript y de chupar un poco más de lo que querriamos. La cosa es que cgit y gitweb no permiten hacer nada, se hace todo por terminal. Gitlist parece que algo permite hacer, aunque igual me equivoco.

      1. Naa, es solo por si alguien cae por aquí desde algún buscador al buscar “montar server git” por si lee los comentarios y ve que hay mas alternativas.

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax