viernes, 23 de noviembre de 2007

How to/Cómo… ¿Crear un servidor de SVN?

En este post se explicará como montar un servidor SVN (Subversion) en Ubuntu (Linux). Para quien no lo sepa, SVN es un servidor de versiones, útil para la realización de proyectos informáticos en los que trabajan varias personas, cada una de ellas tiene una tarea distina (interficie gràfica, càlculos matemáticos, etc.).

Mediante SVN se pueden conocer en todo momento los cambios realizados y tener a mano las últimas versiones del programa desarrollado sin tener que estar pendiente del mail.

Antes de nada, comentar que en el servidor donde se han realizado las pruebas ya estaba el apache instalado para acceder mediante http. Por lo tanto, si se necesita saber como instalar apache… googlea… al menos por ahora(intentaré colgar como hacerlo algun dia).

Pues bien, primero de todo es necesario instalar subversion:

$ sudo apt-get install subversion

Crear el repositorio es el siguiente paso a seguir. Un repositorio es el lugar donde el proyecto se deposita. Para hacerlo se crea una carpeta en /varlib/svn para crear el proyecto prueba, y posteriormente cambiar los permisos para accedir via http:

$ sudo mkdir /var/lib/svn
$ sudo svnadmin create /var/lib/svn/prueba
$ sudo chown www-data:www-data /var/lib/svn/prueba

Se recomienda crear diferentes carpetas dentro del repositorio para tener una mínima organización de las versiones que se vayan colgando. Estas son trunk, branches i tags:

  • Trunk: donde se encuentra la version principal
  • Branches: Donde se encuentran las derivaciones de la version del trunk. En otras palabras, en esta carpeta se depositan los cambios del proyecto para mejorar-lo, pero que aún no se tiene la total seguridad que se ha mejorado. Por ese motivo, con el tiempo puede ser que passe a ser la carpeta trunk.
  • Tags: donde se encuentran las versiones finalizadas antiguas, o sea, que cuando en branches se consigue una versión mejor, esta pasa a trunk, y la de trunk a tags

$ sudo svn mkdir file:///var/lib/svn/prueba/trunk \
file:///var/lib/svn/prueba/branches \
file:///var/lib/svn/prueba/tags

De este modo ya se tienen creadas las carpetas del repositorio, faltando entonces, colgar los archivos de nuestro proyecto. En este caso se crea una carpeta workspace (por ejemplo) dentro de /var/lib/svn/prueba, y en su interior se copian los archivos que se deseen importar al repositorio:

$ sudo mkdir /var/lib/svn/prueba/workspace
# copiar los archivos a workspace, p.e con un cp de toda la vida
$ sudo svn import /var/lib/svn/prueba/workspace http://127.0.0.1/prueba/trunk
–message ‘Versión inicial’

Ahora ya se tiene más o menos el repositorio creado. Lo que falta es definir como se accederà a él. Para eso se configura el apache mediante el archivo /etc/apache2/mods-enabled/dav svn.conf:

$ sudo joe /etc/apache2/mods-enabled/dav_svn.conf


DAV svn
# Path on es troba el repositori
SVNPath /var/lib/svn/prueba
Require valid-user
# Autentificación via password
AuthType Basic
AuthName "Repositorio de prueba"
AuthUserFile /etc/apache2/dav_svn.passwd

Require valid-user

Mediante las tres línias de autentificación (Auth…) se està configurando para que cada vez que se desee conectar con el servidor se solicite un nombre de usuario y contraseña. Para crear un usuario se realiza del siguiente modo:

$ sudo htpasswd2 -cm /etc/apache2/dav_svn.passwd [username]
New password:
Re-type new password:
Updating password for user [username]

Si lo que se desea es solo cambiar el password de un usuario ya existente:

$ sudo htpasswd2 -m /etc/apache2/dav_svn.passwd [username]

Y bien, lo único pendiente de realizar es reiniciar los servicios de apache para que tenga en cuenta la nueva configuración:

$ sudo /etc/init.d/apache2 restart

De este modo, abriendo un explorador de Internet (preferiblemente firefox) y escribiendo http://hostname/prueba se podran ver los archivos que se han colgado en el repositorio. Sino es así… puede que te hayas saltado un paso!

En un futuro… How to/Como… ¿Acceder a un servidor de versiones mediante TortoiseSVN?

No hay comentarios: