ViewVC, visor web de repositorios Subversion

Este artículo trata acerca de ViewVC, una herramienta web escrita en Python que permite controlar las operaciones realizadas en uno o varios repositorios de control de versiones. Es bastante simple y fácil de usar y permite controlar las revisiones, comparar documentos (diff), ver los logs de modificaciones, etc.

Esta herramienta está orientada específicamente al control, la misma no permite realizar modificación alguna en los repositorio de control de versiones disponibles desde su interfaz. Los tipos de servicios de control de versiones soportados son CVS y Subversion, siendo este último el utilizado en el artículo para realizar la demostración práctica del funcionamiento de la herramienta.

Para seguir esta guía se recomienda tener primeramente configurado un repositorio Subversion con Apache en base al artículo Configuración de Subversion con Apache en openSUSE. Los pasos para configurar de forma básica la herramienta en openSUSE se presentan a continuación:
  1. Lo primero que hay que hacer es instalar el paquete de viewvc con nuestro gestor de paquetes favorito, en mi caso zypper.
    testsrv:~ # zypper install viewvc
    Luego de instalar el paquete se crea la carpeta viewvc en el directorio /srv con todo el contenido del software, también el archivo viewvc.conf es creado en el directorio de configuraciones de Apache (/etc/apache2/conf.d) con las configuración del módulo Python.

  2. Para hacer funcionar el programa hay que editar el archivo /srv/viewvc/viewvc.conf
    testsrv:~ # vi /srv/viewvc/viewvc.conf
    y modificar las cuatro directivas que se muestran a continuación:
    # Comente estas líneas para que no tuvieran efecto.
    #svn_roots:
    # your_unnamed_project : /srv/svn/repos/<your_unnamed_project> ,
    # another_project : /srv/svn/repos/<another_project>


    # Definí la ruta raíz en donde se encuentran los repositorios
    # de subversion.

    root_parents = /srv/svn/repos : svn

    # Comente esta línea para que no tuvieran efecto.
    #default_root = your_unnamed_project

    # Personalicé la dirección de correo electrónico del administrador que
    # aparece en ViewVC.

    address = contacto@tormentadebits.com
    Como se puede ver, en la directiva root_parents se especifica el directorio raíz en donde se encuentran todos los repositorios subversion que hemos configurado mediante el artículo Configuración de Subversion con Apache en openSUSE.

  3. Con estas configuraciones ya podría funcionar, pero los repositorios quedarían disponibles para su acceso público. Para mejorar la seguridad, una de las opciones es crear un archivo con los usuarios autorizados para acceder a ViewVC, para ello en el directorio /etc/apache2 creamos una nueva carpeta llamada passwords y dentro de la misma el archivo de autorización que en este caso será llamado viewvcpasswd:
    testsrv:~ # cd /etc/apache2
    testsrv:/etc/apache2 # mkdir passwords
    testsrv:/etc/apache2 # cd passwords
    testsrv:/etc/apache2/passwords # touch viewvcpasswd

    Una vez creado el archivo, agregamos todos los usuarios autorizados con el comando htpasswd2.
    testsrv:/etc/apache2/passwords # htpasswd2 viewvcpasswd gabriel
    testsrv:/etc/apache2/passwords # htpasswd2 viewvcpasswd luis

  4. Ahora tenemos que realizar una serie de ajustes en el archivo /etc/apache2/conf.d/viewvc.conf. Creamos una copia de seguridad del mismo y luego pasamos a editarlo:
    testsrv:~ # cp /etc/apache2/conf.d/viewvc.conf /etc/apache2/conf.d/viewvc.conf.bkp
    testsrv:~ # vi /etc/apache2/conf.d/viewvc.conf

    Entre las configuraciones para Apache debemos agregar las directivas AuthUserFile, AuthName, AuthType y Require en la sección que se puede observar más abajo:
    # Example configuration for a subversion viewvc repository
    #
    # put the string SVN_VIEWCVS in /etc/sysconfig/apache2 APACHE_SERVER_FLAGS
    # to enable the URL
    # http://localhost/viewvc

    <IfDefine SVN_VIEWCVS>
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule /viewcvs(.*) /viewvc$1 [L,R]
    </IfModule>

    ScriptAlias /viewvc /srv/viewvc/bin/cgi/viewvc.cgi

    <Directory "/srv/viewvc/bin/cgi">
    AllowOverride None
    # Ruta y nombre del archivo con los usuarios autorizados.
    AuthUserFile /etc/apache2/passwords/viewvcpasswd
    # Mensaje de Conexión
    AuthName "Control de Acceso - Ingrese su Usuario y Clave"
    # Tipo de Autenticación
    AuthType Basic
    # Usuarios a ser autorizados
    Require valid-user

    Options +ExecCGI
    Order allow,deny
    Allow from all
    </Directory>
    ...
    OBS: La directiva Require valid-user permite especificar que todos los usuarios que agregamos al archivo /etc/apache2/passwords/viewvcpasswd sean considerados como válidos para la autorización de acceso.
    Con esta configuración ya solicitará que los usuarios se autentiquen a la hora de querer acceder a VievVC. Lo malo de todo esto es que para cada servicio que establecemos políticas de autenticación (ftp, Subversion, a carpetas web de Apache, servicio de correo con usuarios virtuales, etc.) estamos registrando de forma separada usuarios que probablemente sean siempre los mismos, así que debería verse la forma de administrar los usuarios en forma centralizada, quizás con OpenLDAP, pero eso lo dejaremos para otra ocasión.

  5. Pero esto aún no termina, para que la herramienta web funcione hay que agregar a la directiva APACHE_SERVER_FLAGS la opción SVN_VIEWCVS en el archivo /etc/sysconfig/apache2. Para realizar esto editamos el archivo...
    testsrv:~ # vi /etc/sysconfig/apache2
    Buscamos la directiva APACHE_SERVER_FLAGS y le agregamos la opción mencionada.
    APACHE_SERVER_FLAGS="SSL SVN_VIEWCVS"
  6. Por último solo es necesario reiniciar el servicio de Apache:
    testsrv:~ # service apache2 restart
Hechas las modificaciones a los archivos de configuración y reiniciado el servicio de Apache, el navegador de repositorios subversion ViewVC debería funcionar sin problemas, lo podemos probar introduciendo la URL http://ip_o dominio_del_servidor/viewvc en la barra de direcciones del navegador web de nuestra preferencia.

Para finalizar este artículo, a continuación les dejo algunas capturas de la herramienta en funcionamiento:


Comentarios