Vistas

Mejora G-Forge 1: Incluir otros sistemas de control de versiones

De MorfeoWiki

En este caso la configuración es algo más complicada que en el caso del CVS a través de cvsd-pserver, dado que es necesario configurar los módulos dav y dav_svn de Apache2 para proporcionar acceso seguro al SVN a través del puerto habitual de https.

Una vez más, la información de usuarios y accesos a los repositorios SVN también se recoge en la base de datos PostgreSQL que utiliza la forja, de manera que lo que se hará serán unos scripts en Python que a partir de la base de datos, generen archivos de configuración para SVN.

Tabla de contenidos

PostgreSQL

Crearemos unas vistas para que el script acceda más fácilmente a los datos:

  • svn_usergroups contiene pares del tipo usuario, grupo. El significado es los grupos a los que pertenece un usuario:
CREATE  VIEW svn_usergroups (user_name, group_name) AS
      SELECT 
            user_name, 
            unix_group_name 
      FROM nss_usergroups 
      WHERE unix_group_name like 'scm_%';
GRANT SELECT ON svn_usergroups TO gforge;
  • svn_groups es una relación de los proyectos que utilizan SVN indicando también si permite acceso anónimo.
CREATE VIEW svn_groups (group_name, anon) AS 
      SELECT 
            unix_group_name, 
            enable_anonscm 
      FROM groups 
      WHERE 
            status='A' AND 
            scm_box like 'svn.%';
  • svn_users son pares del tipo usuario, contraseña.
create view svn_users(user_name,pass) as select user_name, unix_pw from users;

Apache2

Como hemos dicho anteriormente, vamos a usar la extensíon dav de HTTP y el módulo dav_svn. Es necesario crear enlaces simbólico en /etc/apache2/mods-enabled de los archivos de configuración y de los que cargan cada módulo, que se encuentran en /etc/apache2/mods-available:


ln -s /etc/apache2/mods-available/<archivo_origen> /etc/apache2/mods-enabled

quedando así el directorio /etc/apache2/mods-enabled en cuanto a lo que SVN y dav se refiere:


/etc/apache2/mods-enabled# ls -la | grep dav
total 1
drwxr-xr-x  2 root root 496 2006-04-12 14:42 .
drwxr-xr-x  8 root root 488 2006-04-12 12:07 ..
lrwxrwxrwx  1 root root  29 2006-01-02 13:27 dav_fs.conf -> ../mods-available/dav_fs.conf
lrwxrwxrwx  1 root root  29 2006-01-02 13:27 dav_fs.load -> ../mods-available/dav_fs.load
lrwxrwxrwx  1 root root  26 2006-01-02 13:27 dav.load -> ../mods-available/dav.load
lrwxrwxrwx  1 root root  30 2006-01-02 13:27 dav_svn.load -> ../mods-available/dav_svn.load
  • dav_fs.conf:
DAVLockDB /var/lock/apache2/DAVLock
  • dav_fs.conf:
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so
  • dav.load:
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
  • dav_svn:
LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so

Para un intercambio seguro de los archivos, se implementará HTTPS. Lo primero es generar un certificado. Para esto, se usará el script incluido al instalar Apache2 en Debian:

 # apache2-ssl-certificate
 

Una vez completada la información pedida por el script, se habrá creado un certificado, que se guardará en /etc/apache2/ssl/apache.pem

También será necesario crear un nuevo archivo en /etc/apache2/sites-available llamado ssl en el que se irán incluyendo las páginas que se servirán a través de HTTPS, entre las que estarán las de SVN y enlazarlo en /etc/apache2/sites-enabled:

 # touch /etc/apache2/sites-available/ssl
 # ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl
 
  • /etc/apache2/sites-enabled/ssl
NameVirtualHost *:443
<VirtualHost *:443>
        ServerName svn.forge.morfeo-project.org
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        ServerAdmin amartin@gsyc.es
        DocumentRoot /var/www/morfeo
        <Location /svn>
                DAV svn
                SVNParentPath /var/lib/gforge/chroot/svnroot
                AuthType Basic
                AuthName "Morfeo Project SVN Repositories Authentication"
                # Access policy:
                AuthzSVNAccessFile /etc/myaccessfile
                # File containing crypt-encoded user,password pairs: 
                AuthUserFile /etc/mypassfile
                # No authenticated users allowed:
                Require valid-user
        </Location>
</VirtualHost>

Cron jobs

En la sección anterior se explica como configurar Apache2. Como puede verse, usa dos archivos para autenticar usuarios y para sus permisos en cada repositorio. Estos archivos se crean mediante unos scripts[#foot122 1] en Python que conectan a la base de datos y obtienen de ella la información necesaria. Estos scripts han de ser añadidos al cron para ser invocados cada cierto tiempo, lo que conlleva que los repositorios no están disponibles inmediatamente después de ser creados en el interfaz web. Se decide incluirlos en el directorio /etc/cron.hourly, para que se invoquen cada hora. Los scripts residirán en el directorio /sbin con permisos 740 para evitar que un usuario normal pueda ver la clave de la base de datos, y se enlazarán en el directorio /etc/cron.hourly

 # ln -s /sbin/crea-*.py /etc/croun.hourly
 # chmod 740 /sbin/crea-*.py
 # ls -la /etc/cron.hourly/
 total 9
 drwxr-xr-x   2 root root  144 2006-04-24 17:03 .
 drwxr-xr-x  70 root root 4824 2006-04-20 16:55 ..
 lrwxrwxrwx   1 root root   18 2006-04-24 17:03 crea-cvsd.py -> /sbin/crea-cvsd.py
 lrwxrwxrwx   1 root root   22 2006-04-24 17:03 crea-svnfiles.py -> /sbin/crea-svnfiles.py
 


Resultados

Integración de SVN, puesto que en la forja recién instalada no estaba operativo.