domingo, 6 de julio de 2008

Instalar un repositorio SVN con acceso WebDav

Tanto para unidades de desarrollos integradas como para aquel que realiza un proyecto solo, es necesario usar un repositorio de versiones.
Existen varios , y casi todos comparten muchas similitudes , aquí colocare un How-To para instalar en un servidor Apache un repositorio SVN , con el servidor web podremos configurarlo para tener acceso WebDav.
Esta instalación es hecha en una disto de linux debian etch.

Para comenzar la instalación, debemos descargar e instalar el servidor web Apache 2, el modulo de apache que funciona con SVN y el propio SVN, esto lo haremos desde la consola con una sola linea de comando:
aptitude install apache2 subversion libapache2-svn

Para que funcionen los módulos svn con el apache , podemos cargarlos ejecutándolos cuando inicie el sistema (aunque algunas distros los cargan por defecto) ejecutando:

a2enmod dav
a2enmod dav_svn


o podemos hacer que siempre se carguen junto con el apache, para ello nos vamos al directorio de apache y modificamos el http.conf:

cd /etc/apache2/
vim httpd.conf


y agregamos las siguientes lineas:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so


Posteriormente , reiniciamos el servicio apache:

/etc/init.d/apache2 restart


Una vez instalado los paquetes, podemos probar que este funcionando el servidor web, escribiendo la dirección localhost en el browser, por otro lado es hora de decidir donde irán almacenados nuestros repositorios de versiones, en mi caso los coloque en /var y le coloque el nombre mas ingenioso: svn, así que si queremos dejarlos ahí pues solo debemos escribir:
mkdir /var/svn

Una vez creado el directorio podremos empezar a crear los repositorios, esto lo haremos con un comando del svn, se debe sustituir la palabra repositorionombre por el nombre que le coloquen a su repositorio:
svnadmin create /var/svn/repositorionombre

Ahora comenzaremos con los temas de permisología. Para el caso de apache, lo tenemos resuelto ya que el sistema tiene un usuario www-data, este nos sirve para que sea usado por el servidor web, sin embargo es bueno crear otro grupo de usuario el cual será los que usen el svn, esta práctica es buena porque así definiremos la permisología orientada a este grupo de usuarios y no tendremos que hacerle modificaciones al grupo de usuarios www-data. Entonces lo primero que haremos será crear un grupo de usuario svn:
groupadd svn

Después para agregar los usuarios hay varias opciones, sin embargo yo prefiero agregarlos todos de una vez editando el group, entonces ejecutamos:
vim /etc/group

Dentro ubicamos la linea donde este el grupo que hemos creado , en este caso se llama "svn", la linea contiene ademas del nombre del grupo, una x y un numero de grupo (el numero variará dependiendo de la cantidad de grupos que tenga en su sistema), al final de la linea iremos agregando , separados por una "," coma , cada uno de los usuarios:
svn:x:129:usuario1,usuario2,usuario3

Una vez creado el grupo, y añadido los usuarios al mismo, entonces configuraremos la permisología de los repositorios creados a los grupos correspondientes, www-data el grupo de apache y svn el grupo de usuarios del subversion.
chown -R www-data:svn /var/svn/repositorionombre

Además para evitar problemas con varios clientes SVN que puedan usar, y también problemas cuando usen apache, yo personalmente modifico la permisología del directorio:
chmod -R 770 /var/svn/repositorionombre

Estas dos ultimas operaciones son realizadas cada vez que se cree un nuevo repositorio, para verificar que los cambios ha surtido efecto es bueno hacer un ls -l.
Ahora procedemos a crear dos archivos que seran sumamente importante para la seguridad y perfiles de nuestro repositorio, en mi caso los he colocado dentro del directorio del subversion:

htpasswd –c /etc/apache/svnpass usuario1
htpasswd /etc/apache/svnpass usuario2


El primer comando con la opción -c nos crea el archivo svnpass en la ruta indicada , y nos pedirá la contraseña que le asignaremos al usuario1, con el segundo comando es que seguiremos agregando mas usuarios al archivo svnpass, hay que observar que ya no es necesario la opción -c , ademas de que si la volvemos a colocar nos vuelve a crear el archivo y eliminara los usuarios creados previamente, hay que tener cuidado con esto.
El segundo archivo que crearemos, lo haremos a mano, este es el que permitirá definir los perfiles de los usuarios y a que repositorios podrán acceder:

vim /etc/subversion/acceso


La estructura de este archivo es sencilla, lo primero que haremos será colocar la etiqueta [groups] y debajo iremos poniendo el nombre del rol y los usuarios que pertenecen a este rol, en esta parte es que definimos exclusivamente los roles, posteriormente si queremos tener un administrador general del svn tendremos que colocar la etiqueta [/] y debajo irá el usuario que será administrador , para hacerlo se debe colocar "@" delante de cada nombre de usuario y con "r" le damos permiso de lectura y "w" permiso de escritura, se puede colocar también "rw".
Por ultimo se coloca el nombre de cada directorio svn, y sus correspondientes usuarios, por ejemplo [repositorio1:/] esto le dará a los usuarios que estén debajo la permisología correspondiente para este repositorio, si queremos ser mas especifico y solo darle permiso en el trunk y no en los branches, podemos definir una política que sea : [repositorio1:/trunk], a continuación agrego un ejemplo de un archivo acceso con varios perfiles y varios repositorios:

[groups]
adminrepositorio1 = usuario1
adminrepositorio2 = usuario2
adminrepositorio3 = usuario1,usuario2

admingeneral = usuarioadmin

observador = usuarioobservador

desarrollador = desarrollador1

[/]
@admingeneral = rw
@observador = r

[repositorio1:/]
@adminrepositorio1 = rw

[repositorio2:/]
@adminrepositorio2 = rw

[repositorio3:/]
@adminrepositorio1 = rw
@adminrepositorio2 = rw

[repositorio3:/branches]
@desarrollador1 = rw


Creado estos dos archivos, ahora configuraremos nuestro modulo dav para definir el WebDav via browser, para ello editaremos el archivo dav_svn.conf:

vim /etc/apache2/mods-available/dav_svn.conf


Es posible que tenga algún contenido, generalmente comentado, a continuación agregaremos al final del archivo las siguientes lineas:


DAV svn
SVNParentPath /var/svn
# Utilizo una plantilla por defecto
SVNIndexXSLT "/svnindex.xsl"

# Autenticacion para los usuarios
AuthType Basic
AuthName "svn"
AuthUserFile /etc/subversion/svnpass

# Solo usuarios autenticados podrán acceder
Require valid-user

# Utilizo políticas de acceso a los repositorios
AuthzSVNAccessFile /etc/subversion/acceso



El significado de estas lineas es el siguiente, lo primero indicamos el nombre por el que se accederá en nuestro browser, es decir, la ruta aquí será : http://direccionio/svn/
La sentencia SVNParentPath nos indica el lugar donde están nuestros repositorios, es usada también en caso de tener varios repositorios, si solo tenemos un repositorio pues usaremos SVNPath, lo que no se debe hacer es usar ambas sentencias.
Hay una linea opcional, y es el uso de una plantilla xsl, si queremos que el svn tenga un aspecto mas presentable.
El siguiente grupo de lineas tratan sobre el mecanismos de autorización y el lugar donde se encuentra el archivo de usuarios, el cual fue el que creamos anteriormente, el nombre y el lugar que hayamos decidido es el que colocaremos en la ruta.
Posteriormente le indicamos al svn que solo aquellos usuarios registrados son los que podrán acceder, es decir que no se permiten accesos anónimos.
Por ultimo indica el nombre y el lugar del archivo que creamos para definir los roles y su permisología.
Una vez hecho esto, guardamos el archivo y reiniciamos el apache, podremos acceder al browser y colocar la dirección de nuestro repositorio, si todo salio bien, nos pedirá el nombre y la clave de acceso del usuario, al verificarla lo que nos mostrará será un mensaje indicando el numero de revisión, en este caso si el repositorio solo se ha creado y no se le han cargado archivos indicará Revision 0.
El alcance de este How-To es solo de la instalación y configuración del SVN, los comandos para su uso los pueden conseguir en múltiples sitios, he incluso recomiendo también el libro de SVN de O'Reilly el cual se consigue gratis, en español o en ingles.

2 comentarios:

  1. Hola,
    buen post, pero tengo un problema, no puedo ver la lista de repositorios, en tanto que si puedo ingresar al repositorio.Tengo esto en mi httpd.conf:
    [code]
    < IfModule dav_svn_module >
    < Location /svn >
    DAV svn
    SVNParentPath "C:/svn"
    SVNListParentPath on
    SVNIndexXSLT "/svnindex.xsl"
    Satisfy Any
    AuthType Basic
    AuthName "Repositorio Subversion"
    AuthUserFile "M:/Archivos de programa/Apache Software Foundation/Apache2.2/bin/.htpasswd"
    AuthzSVNAccessFile "M:/Archivos de programa/Apache Software Foundation/Apache2.2/bin/control_acceso.txt"
    Require valid-user
    < / Location >
    < / IfModule >

    [/code]

    Y en control_acceso.txt tengo:
    [code]
    [/]
    *=r
    [ProyectoI:/]
    jose=rw
    david=rw
    [/code]

    Que crees que pueda ser.
    Gracias por tu atencion.

    ResponderEliminar
  2. oops! no funcionan las etiquetas code

    ResponderEliminar