Servidor Git + Gitolite + Gitweb sobre Debian Wheezy

La intensión de esta entrada es recrear los pasos necesarios y complementarios para tener un servidor de control de versiones GIT corriendo sobre Debian Wheezy, el cual pueda soportar la gestión cotidiana de cambios sobre códigos fuentes de un equipo de desarrollo. Para ello usaremos GITOLITE como método de control de acceso de nuestros programadores a los repositorios de software. También veremos algunas de las opciones para tener GITWEB ajustado a las necesidades e identidad del equipo.

Gitolite es una capa de la autorización en la parte superior de Git, que se apoya en ssh para la autenticación. Permite especificar permisos no sólo por repositorio, sino también por rama o etiquetas dentro de cada repositorio.

Instalación de paquetes

Servidor de GIT

Dentro del que sera nuestro Servidor GIT

Instalar los siguientes paquetes:

aptitude install git-core git-doc gitolite git-daemon-run gitweb highlight

Agregar usuario para el servicio GIT y sus operaciones:


root@debian7:~#adduser git
root@debian7:~# su - git
git@debian7:~$ git config --global user.name "git"
git@debian7:~$ git config --global user.email git@192.168.0.104

En lo sucesivo hacemos referencia a la IP 192.168.0.104 como la ip del servidor, pudiera ser también un nombre de host o subdominio como git.leninmhs.com

Generar y enviar al servidor la llave publica de los usuarios (Desde tu maquina local)


lenin@i5:~$ scp /home/lenin/.ssh/id_rsa.pub git@192.168.0.104:/tmp/lhernandez.pub

Consumir la llave del usuario anterior para otorgar el acceso (de vuelta al servidor git)


root@debian7:~# su - git
git@debian7:~$ gl-setup /tmp/lhernandez.pub
The default settings in the rc file (/home/git/.gitolite.rc) are fine for most
people but if you wish to make any changes, you can do so now.

hit enter...
creating gitolite-admin...
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /home/git/repositories/testing.git/
[master (root-commit) 8a39640] start
2 files changed, 6 insertions(+)
create mode 100644 conf/gitolite.conf
create mode 100644 keydir/lhernandez.pub

Al ejecutar el comando anterior abrirá directamente un editor de texto con el archivo /home/git/.gitolite.rc donde deberán cambiar

$REPO_UMASK = 0077;

por

$REPO_UMASK = 0027;

y luego ajustar permisos:

chmod g+r /home/git/projects.list
chmod -R g+rx /home/git/repositories

De vuelta a tu maquina local, obtendremos los archivos de configuración de gitolite en el cual se gestionan los proyectos versionados con sus respectivos usuarios y accesos. Procederemos a agregar dos repositorios


lenin@i5:~/Escritorio$git clone git@192.168.0.104:gitolite-admin.git
lenin@i5:~/Escritorio$cd gitolite-admin
lenin@i5:~/gitolite-admin$ vi conf/gitolite.conf
repo gitolite-admin
RW+ = lhernandez bdiaz

repo tuwiki
RW+ = @all
R = daemon
R = gitweb

repo sistemasoporte
RW+ = lhernandez mvalverde lortiz bdiaz fgordon
R = daemon
R = gitweb

lenin@i5:~/gitolite-admin$
lenin@i5:~/gitolite-admin$git add *
lenin@i5:~/gitolite-admin$git commit -m "Agregando repositorios tuwiki y sistemasoporte con permiso de escritura para lhernandez mvalverde lortiz bdiaz fgordon "
lenin@i5:~/gitolite-admin$git push origin master

.

Configuración de GITWEB

De vuelta a nuestro servidor de GIT procedemos a configurar nuestra interfaz web de GIT
root@debian7:~#vi /etc/gitweb.conf
$projectroot = «/var/cache/git»;
dejar
$projectroot = «/home/git/repositories»;
#$projects_list = $projectroot;
dejar
$projects_list = «/home/git/projects.list»;

root@debian7:~# vi /etc/sv/git-daemon/run
#!/bin/sh
exec 2>&1
echo ‘git-daemon starting.’
exec chpst -ugitdaemon:git \
«$(git –exec-path)»/git-daemon –verbose –reuseaddr \
–base-path=/home/git/repositories /home/git

root@debian7:~# sv restart git-daemon
ok: run: git-daemon: (pid 6393) 0s
root@debian7:~#

.

gitweb-default
Accedemos a gitweb colocando en el navegador 192.168.0.104/gitweb

.

Agregar theme a gitweb

Usaremos un tema similar a github de nombre gitweb-theme http://kogakure.github.io/gitweb-theme/

git@debian7:~$ su – git
git@debian7:~$ git clone git://github.com/kogakure/gitweb-theme
git@debian7:~$ su
root@debian7:/home/git/gitweb-theme# cp -Rfv /usr/share/gitweb/static/ /usr/share/gitweb/static_old
root@debian7:/home/git/gitweb-theme# cd gitweb-theme/
root@debian7:/home/git/gitweb-theme# cp gitweb.css gitweb.js /usr/share/gitweb/static

gitweb-theme
gitweb-theme
Servidor de GIT
gitweb-theme-summary
gitweb-diff
gitweb-diff

Adicionalmente pueden reemplazar los logos, ajustar el archivo css y js a su necesidad en /usr/share/gitweb/static como resultado pudieran tener algo como:

Servidor de GIT
Tema personalizado para gitweb

.

Agregar opciones adicionales a gitweb

Agregar las lineas que se presentan a continuación al final del archivo /etc/gitweb.conf
$feature{‘blame’}{‘default’} = [1];
$feature{‘blame’}{‘override’} = 1;

$feature{‘pickaxe’}{‘default’} = [1];
$feature{‘pickaxe’}{‘override’} = 1;

$feature{‘snapshot’}{‘default’} = [‘zip’, ‘tgz’];
$feature{‘snapshot’}{‘override’} = 1;

$feature{‘search’}{‘default’} = [1];

$feature{‘grep’}{‘default’} = [1];
$feature{‘grep’}{‘override’} = 1;

$feature{‘show-sizes’}{‘default’} = [1];
$feature{‘show-sizes’}{‘override’} = 1;

$feature{‘avatar’}{‘default’} = [‘gravatar’];
$feature{‘avatar’}{‘override’} = 1;

$feature{‘highlight’}{‘default’} = [1];
$feature{‘highlight’}{‘override’} = 1;

Habilitando estas opciones obtenemos resaltado de sintaxis del código fuente versionado, un completo buscador, descargar las versiones de los proyectos en otros formatos de compresión, tener avatares de los usuarios, entre otras…

Para consultar la documentación oficial de gitweb en el terminal usen: man gitweb ó visiten: https://www.kernel.org/pub/software/scm/git/docs/gitweb.conf.html

21 comentarios en “Servidor Git + Gitolite + Gitweb sobre Debian Wheezy”

  1. Lenin que tal de nuevo x aquí mira en la parte de Agregar opciones adicionales a gitweb están mal las comillas simples te paso el conf
    $feature{‘blame’}{‘default’} = [1];
    $feature{‘blame’}{‘override’} = 1;
    $feature{‘pickaxe’}{‘default’} = [1];
    $feature{‘pickaxe’}{‘override’} = 1;
    $feature{‘snapshot’}{‘default’} = [‘zip’, ‘tgz’];
    $feature{‘snapshot’}{‘override’} = 1;
    $feature{‘search’}{‘default’} = [1];
    $feature{‘grep’}{‘default’} = [1];
    $feature{‘grep’}{‘override’} = 1;
    $feature{‘show-sizes’}{‘default’} = [1];
    $feature{‘show-sizes’}{‘override’} = 1;
    $feature{‘avatar’}{‘default’} = [‘gravatar’];
    $feature{‘avatar’}{‘override’} = 1;
    $feature{‘highlight’}{‘default’} = [1];
    $feature{‘highlight’}{‘override’} = 1;

    Y en la parte de los permisos los cambie por 0750 y me sirvio. Y tambien reinicie el servicio de apache !! de resto tengo GIT

  2. Amigo gracias por tu aporte, pero te quería consultar una duda. La parte del servidor Git funciona perfectamente pero el git web cuando abro desde el explorador me arroja un mensaje «404 – No projects found»

  3. Hola gracias por compartir,

    Tengo una duda donde se almacenan localmente los archivos que subo desde una maquina local al servidor git?,

    Pasa que cuando voy desde consola a /git/repositories/nombre.git no encuentro por ejemplo el archivo físicamente hello.py que acabo de subir desde un cliente local, pero en el gitweb si logro verlo… es por esto que no entiendo esta parte, si esta lógicamente pero no físicamente?, donde puedo encontrarlos?

    Saludos

    1. Lo mas practico es hacer un clone desde cualquier host remoto al servidor, ahora hay que recordar que el Servidor git realmente almacena son las diferencias de los archivos seguramente por ello te ha costado encontrar lo que buscas, igualmente revisare en mi servidor git por lo curioso e interesante del tema

      1. Pues este tema se vuelve aun más curioso porque he empezado a implementarlo en varias maquinas cliente 6 winbugs y 2 GNU/Linux y efectivamente mis cambios se ven en todos los clientes pero en el server git sigo sin encontrarlos, quizás vaya por lo que comentas que el solo guarda los cambios en el proyecto no todo el proyecto, cualquier cosa que encentres a entender mejor esto por acá nos leemos.

        Saludos.

  4. Saludos, cada vez que hago un cambio en un proyecto desde la terminal pierdo los permisos necesarios para que el proyecto siga viéndose por gitweb.

    Para empezar, después de seguir esta guía pude usar git a través de la terminal sin mayor problema, pero me aparecía el error que relatan más arriba en los comentarios “404 – No projects found”. Lo que finalmente solucionó el error fue cambiar el dueño de la carpeta /home/git/repositories y del archivo /home/git/projects.list a www-data

    # chown -R www-data:www-data /home/git/projects.list

    # chown -R www-data:www-data /home/git/repositories

    Pero cuando hago una edición desde un cliente remoto y luego tiro el «$git push origin master» ya no puedo ver más el proyecto a través de gitweb hasta que repita el cambio de permisos.

    ¿Qué solución se les ocurre para evitar esto?

    Yo he probado agregar al usuario git al grupo www-data y viceversa, cambiar los permisos a 777, colocar al usuario gitweb con privilegios de lectura y escritura en los proyectos, y nada que puedo dar con el problema.

    Gracias por tu guía es la más explícita que he visto por ahí que incorpora gitolite.

    1. Saludos verifica:
      – Si en conf/gitolite.conf en el renglón de ese proyecto tienes a gitweb autorizado para lectura del repo(R = gitweb) ?

      – Si en /home/git/.gitolite.rc se cambio $REPO_UMASK = 0077; por $REPO_UMASK = 0027; ?

      Espero sea de utilidad esta guía y la cadena de comentarios, ciertamente para el momento de escribirla no había mucho sobre el tema en internet!

    2. Hola yo solucione el problema como comentas, cambiando el propietario, pero en lugar de data use el usuario git ya que es el que realmente realiza los cambios cuando mandas el push desde tu maquina administrador, saludos.

  5. Buenas compañero, ante todo un saludo cordial y felicitaciones por esta guía de verdad que esta muy bien explicada, me he guiado por este tutorial para instalarlo en debían 8 con el resultado de que me menciona que tengo uno repositorio desfasado , alguien sabe donde puedo conseguir información al respecto Gracias.

  6. Hola

    Excelente guia, felicitaciones.

    Estoy intentando configurarlo en ubuntu server 14.04.2, me preguntaba si hay alguna limitante o algo que falte, porque no me corre me dice «Not Found The requested URL /gitweb was not found on this server».

    He revisado cada uno de los pasos una y otra vez, y nada que consigo la cura.

    El archivo /etc/sv/git-daemon/run del servicio lo tengo asi

    #!/bin/sh
    exec 2>&1
    echo ‘git-daemon starting.’
    exec chpst -ugitdaemon:git
    «$(git -exec-path)»/git-daemon -verbose -reuseaddr
    -base-path=/home/git/repositories /home/git

    Modifique el archivo /home/git/.gitolite.rc
    $REPO_UMASK = 0077; —-> $REPO_UMASK = 0027;

    Modifique el archivo/etc/gitweb.conf
    $projectroot = «/var/cache/git»; —->$projectroot = «/home/git/repositories»;
    #$projects_list = $projectroot;—->$projects_list = «/home/git/projects.list»;

    le di permisos 777 recursivos a los directorios:
    chmod -R 777 /home/git/projects.list
    chmod -R 777 /home/git/repositories

    Y git me funciona desde el cliente sin ningun problema ya que puedo hacer add, commit y push.

    El problema esta que en el navegador, muestra «Not Found The requested URL /gitweb was not found on this server».

    Se agradece la ayuda de antemano.

    Saludos

  7. hola compañero disculpa la tardanza el problema es como te comente que cuando trato instalar gitolite «apt-get install gitolite » en mi debian 8 jessien me dice package gitolite is not available, but is referred to by another package. this may mean that the package is missing, has been obsoleted. en conclusion el paquete es obsoleto para la version de mi sistema operativo o eso es lo que entiendo. investigando un poco encontre que hay una version de gitolite compatible para mi sistema operativo llamado gitolite3 estoy en eso resolviendo alguno detalle despues te informo de los detalle para aquello que lo este intentando en este sistema operativo

  8. Pingback: GitLab CE vs EE - Versión Comunity Edition ó Enterprise Edition? - Leninmhs

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *