Herramientas web USVN y WebSVN para Subversion en openSUSE

En esta guía se fusionan las herramientas web USVN y WebSVN para ofrecer una excelente experiencia de usuario en la gestión y navegación de repositorios Subversion en openSUSE.

A diferencia de los artículos previos referentes a Subversion y a ViewVC, esta guía proporciona una configuración más avanzada debido a que incorpora una serie de herramientas que facilitan las tareas. La creación y el mantenimiento de repositorios ya no se realiza de forma manual, sino desde la interfaz web proporcionada por la herramienta USVN. Por su parte, la navegación de los repositorios subversion queda a cargo de la herramienta WebSVN, que posee una interfaz web muy potente y sencilla de utilizar. A continuación se presentan cada uno de los pasos de la guía.


Instalación de Paquetes

Los paquetes que debemos tener instalados para realizar todas las configuraciones necesarias son los que se muestran a continuación como argumentos del comando zypper:
testsrv:~ # zypper in apache2 apache2-prefork php5 apache2-mod_php5 libapr1 libapr-util1 libneon27 subversion subversion-doc subversion-server sqlite3
Los mismos se encuentran disponibles en los repositorios oficiales de openSUSE (y también en el CD o DVD de instalación, aunque posiblemente algo desactualizados).


Configuración de Subversion con Apache

La forma más recomendable de utilizar subversion es publicando los repositorios a través del servicio http que ofrece Apache sobre el protocolo de red WebDAV/DeltaV y esto es posible gracias a los módulos que permiten su integración. Los pasos para este apartado van a continuación:
  1. La primera tarea que tendremos que hacer es agregar al sistema operativo un nuevo grupo y usuario de sistema para el servicio subversion, ambos llamados svn. El usuario svn es necesario para ejecutar el software por primera vez y lamentablemente no se crea automáticamente durante la instalación del paquete. Lo podemos agregar mediante los siguientes comandos:
    testsrv:~ # groupadd -r svn
    testsrv:~ # useradd -r -g svn svn

  2. En cuanto a la configuración de Apache, lo primero que debemos hacer es dirigirnos al directorio /etc/sysconfig y editar el archivo apache2.
    testsrv:~ # vi /etc/sysconfig/apache2
    Una vez en el archivo nos dirigimos a la sección APACHE_MODULES para verificar que el módulo ssl esté debidamente definido (para las conexiones https) y para agregar al final los módulos dav y dav_svn:
    APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir php5 perl dav dav_svn"
    También, en el mismo archivo tenemos que asignar a la directiva APACHE_SERVER_FLAGS el valor SSL, quedando como se muestra a continuación:
    APACHE_SERVER_FLAGS="SSL"
  3. El siguiente paso consiste en verificar que Apache esté correctamente configurado para que escuche en los puertos indicados, tanto en el puerto por defecto que es el 80 como así también para las conexiones seguras que normalmente es el 443, para ello nos vamos al directorio /etc/apache2/ y ahí abrimos el archivo llamado listen.conf,
    testsrv:~ # vi /etc/apache2/listen.conf
    debiendo tener la siguiente sección similar a lo que sigue:
    Listen 80

    <IfDefine SSL>
    <IfDefine !NOSSL>
    <IfModule mod_ssl.c>

    Listen 443

    </IfModule>
    </IfDefine>
    </IfDefine>

  4. Generación de certificado no personalizado: Existen varias formas para generar un certificado para las conexiones https, una de ellas y el método más simple es generar un certificado sin información adicional, para ello hay que ejecutar el siguiente comando:
    testsrv:~ # gensslcert
    Este comando sobre-escribirá los siguientes archivos:
    /etc/apache2/ssl.crt/ca.crt
    /etc/apache2/ssl.key/server.key
    /etc/apache2/ssl.crt/server.crt
    /etc/apache2/ssl.csr/server.csr

    También creará un nuevo archivo CA.crt en el directorio /srv/www/htdocs/ para ser descargado por los clientes que se conectan bajo el protocolo https.

  5. Generación de certificado personalizado: Si queremos generar un certificado con información personalizada de nuestra organización podemos indicarle al comando gensslcert varios argumentos para enriquecer el contenido del certificado como se muestra a continuación:
    testsrv:~ # gensslcert -C "tormentadebits" -N "Este es un Certificado de Ejemplo" -c PY -s It -l BV -o "Gabriel-Corp." -u "Unidad Informatica" -n "www.tormentadebits.com" -e "contacto@tormentadebits.com" -y 60
    Al ejecutar el comando se crearán una serie de archivos inicialmente llamados con el nombre tormentadebits- en los siguientes directorios:
    /etc/apache2/ssl.crt/tormentadebits-ca.crt
    /etc/apache2/ssl.crt/tormentadebits-server.crt
    /etc/apache2/ssl.csr/tormentadebits-server.csr
    /etc/apache2/ssl.key/tormentadebits-ca.key
    /etc/apache2/ssl.key/tormentadebits-server.key
    /srv/www/htdocs/TORMENTADEBITS-CA.crt

  6. Luego hay que crear una copiar del archivo /etc/apache2/vhosts.d/vhost-ssl.template y renombrarlo a vhost-ssl.conf.
    testsrv:~ # cd /etc/apache2/vhosts.d
    testsrv:/etc/apache2/vhosts.d # cp vhost-ssl.template vhost-ssl.conf

    Si hemos creado un certificado personalizado y queremos que sea éste el certificado utilizado para la autenticación tendremos que editar el archivo vhost-ssl.conf en el directorio /etc/apache2/vhosts.d/,
    testsrv:~ # vi /etc/apache2/vhosts.d/vhost-ssl.conf
    y modificar las directivas que se citan a continuación con los nombres de los archivos (certificados) generados anteriormente:
    SSLCertificateFile /etc/apache2/ssl.crt/tormentadebits-server.crt
    SSLCertificateKeyFile /etc/apache2/ssl.key/tormentadebits-server.key

    Con esto hemos creado un host virtual exclusivo para las conexiones seguras, lo siguiente que resta es reiniciar el servicio apache y verificar que la configuración para conexiones seguras funcione correctamente:
    testsrv:~ # service apache2 restart
    testsrv:~ # httpd2 -S -DSSL

  7. El siguiente paso consiste en abrir los puertos HTTP (80) y HTTPS (443) en el firewall del servidor, para ello editamos el archivo SuSEfirewall2 del directorio /etc/sysconfig...
    testsrv:~ # vi /etc/sysconfig/SuSEfirewall2
    y le asignamos los servicios apache2 y apache2-ssl a la directiva FW_CONFIGURATIONS_EXT como se muestra a continuación:
    FW_CONFIGURATIONS_EXT="sshd apache2 apache2-ssl"
    Luego reiniciamos el cortafuegos para que la nueva configuración tome efecto, lo podemos hacer con el siguiente comando:
    testsrv:~ # rcSuSEfirewall2 restart
Con los pasos anteriores, tanto Apache como Subversion ya se encuentran configurados y listos para ser utilizados.
OBS: Cuando se trata de acceder a un repositorio de subversion a través de un servidor proxy es posible que se presenten inconvenientes, esto es a causa de que los servidores proxy no suelen interpretar o soportar todos los métodos que ofrece WebDAV, sobre este caso, en la página oficial de subversion tratan este tema en el siguiente enlace: http://subversion.apache.org/faq.html#proxy

USVN

USVN (UserFriendly SVN) es una herramienta que permite gestionar proyectos de Subversion. El sitio web de la herramienta es www.usvn.info de donde se la puede descargar y encontrar información acerca de la misma, los pasos detallados para instalar la herramienta se citan a continuación:
  1. El primer paso de esta sección consiste en dirigirnos al directorio raíz del Apache que como sabrán en openSUSE es el directorio /srv/www/htdocs, descargamos del sitio oficial de USVN la última versión de la herramienta y realizamos algunos ajustes, los comandos se detallan a continuación:
    testsrv:~ # cd /srv/www/htdocs/
    testsrv:/srv/www/htdocs # wget http://www.usvn.info/download/get/1.0.5+Boo/tgz.dl
    testsrv:/srv/www/htdocs # tar -xzf tgz.dl
    testsrv:/srv/www/htdocs # mv usvn-usvn-203660a usvn
    testsrv:/srv/www/htdocs # mkdir usvn/files
    testsrv:/srv/www/htdocs # chown -Rf wwwrun:www usvn
    testsrv:/srv/www/htdocs # rm tgz.dl

    OBS: Con el comando mkdir usvn/files se crea la carpeta files dentro del directorio usvn, que será utilizado para albergar los archivos de los proyectos subversion.
  2. Lo siguiente que tenemos que hacer es editar el archivo /etc/sysconfig/apache2,
    testsrv:~ # vi /etc/sysconfig/apache2
    y agregar a la directiva APACHE_MODULES los módulos authz_svn y rewrite como se muestra a continuación:
    APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir php5 perl dav dav_svn authz_svn rewrite"
  3. Luego debemos crear en el directorio /etc/apache2/conf.d un archivo de configuración llamado usvn.conf para que la herramienta USVN pueda ser publicada mediante Apache:
    testsrv:~ # cd /etc/apache2/conf.d/
    testsrv:/etc/apache2/conf.d # touch usvn.conf

    Editamos el archivo usvn.conf,
    testsrv:/etc/apache2/conf.d # vi usvn.conf
    y le agregamos el siguiente contenido al mismo:
    Alias /usvn /srv/www/htdocs/usvn/public
    <Directory /srv/www/htdocs/usvn/public>
    Options +SymLinksIfOwnerMatch
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>

  4. Para que los pasos anteriores tomen efecto necesitamos reiniciar el servicio Apache:
    testsrv:~ # service apache2 restart
  5. Ahora toca continuar la instalación/configuración de la herramienta USVN desde su interfaz web, para ello colocamos en la barra de direcciones del navegador de nuestra preferencia la URL: http://testsrv/usvn/install.php que desplegará un asistente de configuración. Colocada la URL nos deberá aparecer la página de bienvenida del asistente como se muestra a continuación:
    http://ip_o_nombre_del_servidor/usvn/install.php
  6. Verificaciones previas y selección de idioma: En el primer paso el asistente verifica de forma automática los requisitos para continuar con la configuración, ya en el segundo paso el asistente nos solicita indicar nuestro idioma y la zona horaria.
  7. Licencia y configuración del título y directorios: En el tercer paso debemos "leer" y aceptar las condiciones al final del texto de la licencia de uso del software, ya en el cuarto paso podemos definir un título y los directorios en donde se almacenarán las distintas configuraciones, yo solo he personalizado el título de la página.
  8. Creación de base de datos y administrador de USVN: En el quinto paso debemos seleccionar la base de datos que vamos a utilizar, si la demanda de usuarios no va a ser muy grande pueden utilizar sqlite que no requiere de mayores ajustes, también es posible utilizar MySQL si lo desean. En el sexto paso ingresamos los datos de quien será el usuario administrador de la herramienta USVN:
  9. Chequeo de nuevas versiones y finalización de la instalación: En el septimo paso podemos seleccionar que la herramienta busque o no nuevas actualizaciones del software. En el octavo paso se finaliza la configuración con una serie de instrucciones que podemos observar en la segunda captura de abajo:
    La configuración propuesta en el octavo paso fue generada mediante la información que fue recabando el asistente de instalación de la herramienta USVN, en la captura podemos observar que nos indica algunas líneas de configuración que debemos agregar al archivo httpd.conf de Apache, sin embargo, para que quede más ordenado, esas líneas las podemos agregar al final del archivo /etc/apache2/conf.d/usvn.conf, donde funcionará igual. Para ello editamos el archivo de configuración usvn.conf...
    testsrv:~ # vi /etc/apache2/conf.d/usvn.conf
    y le agregamos la configuración sugerida en el octavo paso del asistente.
    <Location /usvn/svn/>
    ErrorDocument 404 default
    DAV svn
    Require valid-user
    SVNParentPath /srv/www/htdocs/usvn/files/svn
    SVNListParentPath off
    AuthType Basic
    AuthName "TestSRV USVN"
    AuthUserFile /srv/www/htdocs/usvn/files/htpasswd
    AuthzSVNAccessFile /srv/www/htdocs/usvn/files/authz
    </Location>

  10. Para que la nueva configuración de la herramienta USVN tome efecto necesitamos reiniciar el servicio Apache:
    testsrv:~ # service apache2 restart
  11. Desde ahora ya deberíamos poder acceder sin problemas a la herramienta USVN desde nuestro navegador preferido colocando la URL http://nombre_o_ip_servidor/usvn. A continuación les dejo unas capturas de pantalla.

Como se puede observar en las capturas anteriores, la herramienta USVN ofrece todas las opciones para administrar nuestros proyectos subversion, entre ellos podemos destacar la creación de usuarios y su asociación a grupos, creación de varios proyectos, asignación de permisos de lectura/escritura a carpetas por grupos definidos, etc.


WebSVN

La herramienta WebSVN es una excelente alternativa a ViewVC, cumple con la misma función y desde mi punto de vista posee una interfaz muy interesante que define perfectamente la estructura de directorios que forman parte de nuestro repositorio Subversion, al menos en su tema por defecto llamado calm. También es importante destacar su soporte multi-lenguaje.
  1. Como primer paso para instalar la herramienta WebSVN tenemos que dirigirnos al directorio /srv/www/htdocs, descargar la última versión estable de la herramienta WebSVN directamente desde su sitio web, descomprimir el archivo, renombrar el nombre de la carpeta, aplicarle el dueño/grupo web y asignarle los permisos adecuados. Todos estos pasos se resumen en los siguientes comandos:
    testsrvr:~ # cd /srv/www/htdocs/
    testsrv:/srv/www/htdocs # wget http://websvn.tigris.org/files/documents/1380/49056/websvn-2.3.3.tar.gz
    testsrv:/srv/www/htdocs # tar -xzf websvn-2.3.3.tar.gz
    testsrv:/srv/www/htdocs # mv websvn-2.3.3 websvn
    testsrv:/srv/www/htdocs # chown -Rf wwwrun:www websvn
    testsrv:/srv/www/htdocs # rm websvn-2.3.3.tar.gz

  2. Pasamos al directorio /srv/www/htdocs/websvn/include y creamos una copia del archivo distconfig.php con el nombre config.php, el archivo debe llevar el nombre config.php porque es este el nombre del archivo de configuración que la herramienta WebSVN busca por defecto al arrancar.
    testsrv:~ # cd /srv/www/htdocs/websvn/include
    testsrv:/srv/www/htdocs/websvn/include # cp distconfig.php config.php

  3. El siguiente paso consiste en editar el nuevo archivo config.php,
    testsrv:~ # vi /srv/www/htdocs/websvn/include/config.php
    y en la sección REPOSITORY SETUP del mismo configuramos todos nuestros repositorios que tengamos, en este ejemplo voy a agregar un repositorio local llamado documentos, creado y administrado previamente con la herramienta USVN:
    $config->addRepository('Documentos', 'file:///srv/www/htdocs/usvn/files/svn/documentos/');
    En el mismo archivo buscamos la sección ACCESS RIGHTS y configuramos la directiva useAuthenticationFile con la ruta completa hacia el archivo authz perteneciente a la herramienta USVN, la definición debería quedar como sigue:
    $config->useAuthenticationFile('/srv/www/htdocs/usvn/files/authz');
    Salimos del archivo de configuración guardando los cambios para pasar al siguiente punto.

  4. Ahora necesitamos crear un archivo de configuración para la herramienta WebSVN en Apache para especificar en él el mecanismo de autenticación de la herramienta. Para cumplir con este requisito nos diriginos al directorio /etc/apache2/conf.d y creamos un archivo llamado websvn.conf.
    testsrv:~ # cd /etc/apache2/conf.d/
    testsrv:/etc/apache2/conf.d # touch websvn.conf

  5. Editamos el archivo creado en el paso anterior,
    testsrv:/etc/apache2/conf.d # vi websvn.conf
    y agregamos las siguientes lineas:
    <Location /websvn/>
    ErrorDocument 404 default
    Require valid-user
    AuthType Basic
    AuthName "WebSVN"
    AuthUserFile /srv/www/htdocs/usvn/files/htpasswd
    </Location>

    Como podrán observar en la configuración anterior, el archivo htpasswd especificado en la directiva AuthUserFile pertenece a la herramienta USVN, con lo cual utilizaremos su base de datos de usuarios para autenticar a los usuarios que se intenten conectar a la herramienta WebSVN. Finalmente, agregado el texto anterior guardamos los cambios y salimos del archivo websvn.conf.

  6. Reiniciamos el servicio apache:
    testsrv:~ # service apache2 restart
  7. Y por último accedemos a la herramienta colocando en nuestro navegador preferido la URL http://ip_o_nombre_servidor/websvn, donde para acceder tendremos que colocar el mismo usuario y contraseña que utilizamos para acceder a la herramienta USVN. A continuación les dejo con una captura de pantalla de la herramienta WebSVN.
Una aclaración importante es que aparte de validar el acceso a la herramienta WebSVN en base a los usuarios registrados con la herramienta USVN, también limita el acceso a los repositorios según los permisos de acceso otorgados a cada usuario también mediante la herramienta USVN, esto nos facilita el trabajo, ya que la gestión de usuarios, grupos y permisos de repositorios se centraliza en una sola herramienta que en este caso es USVN.


Clientes gráficos recomendados para Subversion

  • TortoiseSVN para Windows (muy bueno).
  • Kdesvn, excelente gestor recomendado para los usuarios de KDE 4, la funcionalidades de esta herramienta se integra completamente al escritorio (similar a TortoiseSVN).
  • Otros para openSUSE o tu distro favorita: qsvn y eSvn.


Enlaces externos

Los sitios oficiales de las herramientas mencionadas en este tutorial se presentan en los siguientes enlaces.

Comentarios