Este artículo es realmente antiguo (algo así como del 2006 o 2007). Haciendo limpieza de la wiki interna iba a borrarlo porque está bastante obsoleto. No por el procedimiento de instalación, sino porque actualmente seria mucho mejor optar por un sistema de control de versiones distribuido como Git o PlasticSCM. Pero creo que publicarlo aquí no cuesta nada y quizás a alguien le pueda ser de alguna utilidad.

Introducción

Nos proponemos mover el servidor de control de versiones entre dos servidores. Debido a las nuevas aplicaciones que implementan este servicio y mejoran el antiguo CVS. Vamos a hacer un estudio para saber qual es la mejor opción.

 Alternativas

Debido a que una de las aplicaciones que más vamos a usar en conjunto con el servidor de control de versiones es el Intellij IDEA, solo nos fijaremos en las aplicaciones que este soporta. Y estas opciones son:

  • CVS: Es la alternativa de toda la vida.

  • Perforce: Es la solución comercial a las mejoras del CVS tipico. Es free si trabajas con codigo open-source, pero de pago para empresas. En [1] nos recomiendan subversion si queremos una herramienta open-source equivalente.

  • Subversion: La única, junto a CVS que es open-source.Contiene todas las mejoras necesarias con CVS y continua siendo open-source.

  • StarTeam: Pertenece a Borland. Vale 700$.

  • Visual SourceSafe: Pertenece a Microsoft Visual Studio.

 Instalación Subversion

Nos decantamos por el Subversion al ser la única aplicación open-source, exceptuando CVS, que es la que ya teniamos y la que queremos mejorar:

# aptitude install subversion subversion-tools

Creamos un directorio donde tendremos todos los repositorios:

# cd /var/lib 
/var/lib# mkdir svn 

Tenemos que crear un usuario con el que se ejecutará el servicio svn:

# adduser --shell /bin/false --home /var/lib/svn --disabled-login --no-create-home svn 
Añadiendo usuario svn... 
Adding new group `svn' (1034). 
Adding new user `svn' (1034) with group `svn'. 
Cambiando la información de usuario para svn 
Introduzca el nuevo valor, o presione ENTER para el predeterminado 
Nombre completo []: 
Número de habitación []: 
Teléfono del trabajo []: 
Teléfono de casa []: 
Otro []: 
¿Es correcta la información? [y/N] y 

Aplicamos los permisos al directorio:

/var/lib# chown svn.svn svn

 Configuración del servicio

El paquete Subversion no incluye un script de parada y reinico del servicio. En [2] indican como instalar el servicio con el superservidor inetd.

Añadimos la siguiente linea en el fichero /etc/inetd.conf:

svn stream tcp nowait svn /usr/bin/svnserve svnserve -i

Ahora podemos reiniciar el servicio reiniciando el inetd.

hs-412:/etc# /etc/init.d/openbsd-inetd restart

 Usuarios y passwords

La gestión de acceso se realiza mediante un fichero de usuarios. El fichero es especifico de cada repositorio pero tenemos un fichero maestro genérico para uso de los proyectos internos con acceso a todos los usuarios.

hs-412:/var/lib/svn# ls -l passwd
-rw-r----- 1 root svn 28 2007-05-30 18:12 passwd

El contenido tiene la siguiente forma:

hs-412:/var/lib/svn# cat passwd
[users]

usuario1=xxxxxxxxx
usuario2=yyyyyyyyy

 Configuración del cliente

Para acceder a nuestro repositorio ‘gproject’, por ejemplo, està es la URL necesaria:

svn://10.1.5.1/var/lib/svn/gproject

 Configuración del acceso websvn

 Instalación

Vamos a instalar el paquete websvn para poder acceder a los repositorios por web:

# aptitude install websvn

Durante la instalación nos van a pedir:

  • Qual es nuestro servidor web(apache, apache-perl, apache-ssl o apache2), para una configuración automatica. Indicamos que el nuestro es el apache2.
  • El directorio donde estan nuestros repositorios: /var/lib/svn
  • Repositorios concretos a añadir: en blanco ya que hemos indicado el padre anteriormente y estan todos ahíTenemos que añadir el usuario con el que se ejecuta el apache en el grupo svn para que pueda acceder a los repositorios:

# adduser www-data svn

 Configuración

Queremos acceder al repositorio via web por la VPN únicamente. Por eso vamos a colgar el repositorio desde la configuración del apache para la VPN. Borramos el fichero /etc/apache2/conf.d/websvn. Al final del fichero /etc/apache2/conf.d/vpn añadiremos la siguiente linea:

# Configuración del websvn
Include /etc/websvn/apache.conf

Tambien es necesario mover el soft link de /var/www/websvn al directorio base del virtual host.

hs-412:/etc/websvn# ls -l /var/www/
total 16
drwxr-xr-x 2 root root 4096 2007-04-18 15:28 apache2-default
drwxr-xr-x 2 root root 4096 2007-04-17 18:47 mrtg
drwxr-xr-x 3 root root 4096 2007-05-14 12:09 upgrader
drwxr-xr-x 2 root root 4096 2007-04-18 17:26 vpn
lrwxrwxrwx 1 root root   17 2007-05-30 22:12 websvn -> /usr/share/websvn
hs-412:/etc/websvn# cd /var/www
hs-412:/var/www# ls
apache2-default  mrtg  upgrader  vpn  websvn
hs-412:/var/www# mv websvn vpn/

 Syntax coloring

Documentamos el mecanismo para configurar colores en el código fuente que mostramos mediante websvn. Seguimos este howto.

 Bibliografia

  • [1] Better SCM Initiative: better-scm.berlios.de.
  • [2] Version Control with Subversion: http://svnbook.red-bean.com/en/1.1/svn-book.html
  • [3] TortoiseSVN: http://tortoisesvn.tigris.org
  • [4] Subclipse: Un plugin para el eclipse. http://subclipse.tigris.org[5] eSvn: http://esvn.umputun.com