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.
