Escrito el 19 octubre 2012 por Luis Ignacio Díaz Martínez
Tabla de contenidos
Anteriormente en esta entrada ya comentaba como instalar Git + GitLab + Gitolite, pero ahora simplificaré algo más las cosas y realizaremos una instalación «seca» de git más la interface web GitWeb que es más amena y no consumirá tantos recursos.
La idea de esto es montar nuestro propio servidor git para que así podamos utilizar la aplicación sparkleshare y así poder crear nuestra alternativa libre a dropbox.
Tenemos como objetivo utilizar dicho software como método de copia de seguridad con control de versión ( espero ). Esto quiere decir que si alguno de nuestros documentos ha sido corrompido podremos rescatarlo por medio de una versión anterior que nuestro repositorio git habrá almacenado. Siendo así un sistema de protección bastante potente y a la vez sencillo de poner en funcionamiento.
Estamos trabajando con una máquina virtual equipada con una distribución GNU/Linux mas concretamente una Debian versión 6. La máquina virtual tiene 500mb de ram asignados y está conectada a nuestra red local ( obtiene dirección IP local como una máquina físsica ).
Nuestro sistema como ya hemos comentado más arriba tendrá instalado Git con una interface web, así que para ello instalaremos un servidor web más el core de git.
Así que a continuación instalaremos los paquetes que necesitamos de la siguiente forma:
1 |
apt-get install apache2 git-core gitweb openssh-server |
Con ello instalamos:
Una vez instalado todo correctamente podemos proceder con lo siguiente.
Ahora tendremos que crear la organización básica de nuestro repositorio. Esto quiere decir simplemente donde almacenaremos nuestro repositorio. Cada uno lo creará en el lugar que más le plazca… o le convenga, yo en este caso lo crearé…
1 |
mkdir /home/gite |
Ahora crearemos el directorio donde se almacenará git-web:
1 |
mkdir /var/www/git |
GitWeb nos proporcionará un acceso vía Web al repositorio git haciendo más sencillo ver las versiones que hay y las modificaciones que se han realizado. Para ello, anteriormente hemos comentado que necesitaremos de un servidor web… así que como ya lo tendríamos que tener instalado procederemos a la configuración de este.. primero de todo editaremos la configuración que se ha creado automáticamente cuando hemos instalado gitweb:
1 |
nano /etc/apache2/conf.d/gitweb |
Y le insertaremos el siguiente contenido:
1 2 3 4 5 6 7 8 9 |
<Directory /var/www/git> Order allow,deny Allow from all Options +ExecCGI AddHandler cgi-script .cgi DirectoryIndex gitweb.cgi RewriteEngine on RewriteRule ^([^.]+\.git.*)$ /git/gitweb.cgi/$0 [L,PT] </Directory> |
Ahora moveremos todo el directorio donde se encuentra gitweb al directorio nuevo que hemos creado.
1 2 |
mv -v /usr/share/gitweb/* /var/www/git mv -v /usr/lib/cgi-bin/gitweb.cgi /var/www/git |
Al haber modificado las rutas ya establecidas en GitWeb tendremos que modificar el archivo de configuración para actualizarlas… para ello editaremos el fichero /etc/gitweb.conf y lo dejaremos así:
1 2 3 4 5 6 7 8 9 |
$projectroot = '/home/git'; $site_name = "MiNombreGuay"; $my_uri = "/git"; $home_link_str = "MiNombreGuay"; $home_link = "/git"; @stylesheets = ("/git/gitweb.css"); $logo = "/git/git-logo.png"; $favicon = "/git/git-favicon.png"; $javascript = "/git/gitweb.js"; |
Ahora tenemos que habilitar el modulo RewriteEngine de la siguiente forma:
1 |
a2enmod rewrite |
Y por último vamos a recargar la configuración Apache2:
1 |
/etc/init.d/apache2 reload |
Ahora vamos a iniciar nuestro proyecto. Para ello primero vamos a crear el siguiente directorio:
1 |
mkdir /home/git/backup-hdd1 |
Ahora entramos al directorio e iniciamos el proyecto:
1 2 3 4 5 6 |
cd /home/git/backup-hdd1/ git init echo "Descripción del proyecto" > .git/description git config --global user.name "Tu nombre" git commit -a |
Ahora marcaremos el repositorio como exportado:
1 2 |
cd /home/git/backup-hdd1 touch .git/git-daemon-export-ok |
Ahora asignaremos permisos al repositorio para un usuario especifico:
1 |
chown -Rv usuario:usuario /home/git/backup-hdd1 |
Con esto tendríamos el repositorio iniciado.
Ahora, tendríamos que poner en funcionamiento el servicio git. Para ello git cuenta con un pequeño demonio que lo lanzaremos de la siguiente forma:
1 |
git daemon --base-path=/home/git/ --detach --syslog --export-all |
Vale, si no nos devuelve error comprobaremos que está en funcionamiento ejecutando esto:
1 |
nmap localhost -p 9418 |
Tendría que devolver lo siguiente:
1 2 3 |
Interesting ports on localhost (127.0.0.1): PORT STATE SERVICE 9418/tcp open unknown |
Esto quiere decir que está abierto y podemos trabajar con el.
Ahora tenemos un pequeño problema… cuando reiniciamos la máquina el demonio deja de funcionar y de nuevo, tendríamos que ejecutarlo… que podemos hacer?
Como respuesta al punto anterior vamos a instalar git-daemon que nos permitirá ejecutar git nada más iniciemos el equipo. Para ello tan solo introducimos lo siguiente:
1 |
apt-get install git-daemon-run |
Ahora, tenemos que editar el fichero de configuración para determinar la ruta en la cual nosotros estamos utilizando git:
1 |
nano /etc/sv/git-daemon/run |
Y ahora introducimos lo siguiente:
1 2 3 4 5 6 |
#!/bin/sh exec 2>&1 echo 'git-daemon starting.' exec chpst -ugitdaemon \ "$(git --exec-path)"/git-daemon --verbose --reuseaddr \ --base-path=/home/git |
Y reiniciamos el servicio:
1 |
sv restart git-daemon |
Ahora probaremos de reiniciar a ver que tal… Correcto! se inicia solo.
Ahora, una vez lo tenemos todo configurado vamos a comprobar que el repositorio esté funcionando correctamente… para ello realizaremos un par de conexiones desde una máquina que no sea la misma que el servidor:
1 |
git clone git://192.168.0.2/home/git/backup-hdd1 backup-hdd1 |
Eso tendría que clonarnos el repositorio del servdidor a la carpeta «backup-hdd1» de nuestra máquina local.
Una vez hemos comprobado que el protocolo git funciona vamos a realizar lo mismo por medio de SSH. Para ello lanzaremos lo siguiente en nuestro cliente:
1 |
Al proceder con el comando anterior tendría que solicitarnos una contraseña de acceso para el servidor. Esta contraseña será la del usuario remoto del cual estamos solicitando el acceso.
**Nota: Lógicamente tendremos que tener el servidor OpenSSH instalado en el servidor para realizar el último paso.