lunes, 19 de marzo de 2007

Subversion + UBUNTU + Apache - Parte 4

A continuación voy a describir los pasos para usar Subversion con el protocolo http. Lo primero que debemos hacer es instalar Apache web server y el modulo de Subversion para Apache

$ sudo apt-get install apache2
$ sudo apt-get install libapache2-svn


Una vez instalados vamos a crear el contexto bajo el cual vamos a accesar los repositorios. Para eso debemos editar el archivo de configuracion de Apache

$ sudo vi /etc/apache2/apache2.conf

y agregar la definición del contexto, en este caso lo vamos a llamar /svn. La definición es la siguiente

<location /svn>
DAV svn
SVNParentPath /ruta/a/dir/padre/de/repositorios
AuthzSVNAccessFile /etc/apache2/.svn_access_control
Require valid-user
AuthType Basic
AuthName "Enter password for Subversion Repository"
AuthUserFile /etc/apache2/.dav_svn.passwd
</location>


Esta definición solo permite acceso a usuarios validos (Require valid-user), si se quieren permitir usuarios anónimos o colocar otro tipo de restricciones a los accesos deben consultar la documentación de Apache. Fijense en los 3 valores a modificar

SVNParentPath: debe apuntar al directorio padre de los repositorios
AuthzSVNAccessFile: define los accesos de los usuarios a los repositorios
AuthUserFile: archivo con la definición de usuarios y los passwords

Para definir usuarios se debe usar el comando htpasswd2. Este comando agrega una entrada a un archivo de password por cada usuario registrado. La encriptación es MD5. El archivo de password se especifica en la línea de comando y debe ser el mismo usado en AuthUserFile.

$ sudo htpasswd2 -m /etc/apache2/.dav_svn.passwd user1
New password:
Re-type new password:
Updating password for user user1


Si se quiere limpiar el archivo y definir usuarios desde cero se debe ejecutar el comando (se recomienda hacer esto la primera vez)

$ sudo htpasswd2 -cm /etc/apache2/.dav_svn.passwd svnuser

La definición de los accesos se hace en el archivo definido por la entrada AuthzSVNAccessFile, en nuestro caso es /etc/apache2/.svn_access_control. En este archivo se definen grupos de accesos y perisología de acceso a cada repositorio. Para una descripción detallada ver la documentación ( http://svnbook.red-bean.com/)

$ sudo nano /etc/apache2/svn_access_control

# Se definen los grupos de trabajo
[groups]
devteam=user1, user2
guest=user3, user4
everyone=@devteam, @guest

# Acceso de lectura para todo el mundo
[/]
* = r

# Guest pueden leer pero solo devteam actualizar en
# el repositorio repo
[repo:/]
@devteam=rw
@guest=r

# Todo el musndo puede leer el repo test pero solo
# user5 lo puede modificar
[test:/]
user5=rw
@everyone=r

# Solo el grupo devteam tiene acceso total al
# repositorio bcol. Guest no tienen ningun acceso
[bcol:/]
@devteam = rw
@guest =


Para que Apache tome los cambios se deben habilitar los módulos de svn y reiniciar el servicio

$ sudo a2enmod dav
$ sudo a2enmod dav_svn
$ sudo /etc/init.d/apache2 force-reload


Y por ultimo para probar que todo esta ok ejecutamos desde el browser

http://svn_server/svn/nombre_del_repo

Debe salir una pagina con el titulo "Revision 0: /"

Asi de facil se configura http con svn. Fijense que el esquema es mas seguro que el usado con svnserve porque el archivo de passwords esta encriptado. En la proxima parte vamos a usar MySQL para guardar los passwords, asi agregamos un nivel de seguridad mayor.

Publicar un comentario