Recientemente me ha tocado realizar una instalación de un servidor destinado a bugtracking y control de versiones con múltiples proyectos (muchos) y agrupados en un árbol bastante extenso, esto es, se trata de una instalación un tanto atípica ya que, la mayoría de howto’s que he encontrado, sólo hacen la parte básica y me gustaria ir un poco más allá añadiendo unos cuantos detalles que seguro que a más de uno le sirve.
Para ello, me he decantado por mi preferida, Debian y su flamante nueva versión 6.0 (Squeeze), con los servicios de Subversion, Trac, acceso mediante DAV -SVN) , WebSVN, autentificación LDAP y un poco de restyling para los directorios de los repositorios de Subversion.
Empezamos…
Partiendo de la base con una Debian 6.0 netinst recién instalada, he creado una nueva partición para nuestros repositorios de subversion y los entornos de trac bajo /srv/desarrollo/
Una vez hecho esto pasamos a instalar los paquetes necesarios:
apt-get install subversion trac libapache2-svn libapache2-mod-python mkdir -p /srv/desarrollo/trac /srv/desarrollo/svn
Ahora creamos el árbol para los repositorios de subversion,:
mkdir -p /srv/desarrollo/svn/proyectos_1/proyecto_A1 \ /srv/desarrollo/svn/proyectos_1/proyecto_B1 \ /srv/desarrollo/svn/proyectos_2/proyecto_A2 \ /srv/desarrollo/svn/proyectos_2/proyecto_B2 svnadmin create /srv/desarrollo/svn/proyectos_A/proyecto_A1 --fs-type fsfs svnadmin create /srv/desarrollo/svn/proyectos_A/proyecto_A2 --fs-type fsfs svnadmin create /srv/desarrollo/svn/proyectos_B/proyecto_B1 --fs-type fsfs svnadmin create /srv/desarrollo/svn/proyectos_B/proyecto_B2 --fs-type fsfs chown -R www-data:www-data /srv/desarrollo/svn
Con esto hemos creado 4 proyectos en dos árboles diferentes. Se podrían crear todos en el mismo árbol pero para una mejor organización, los ubicamos así.
La creación de los entornos de Trac es bastante sencilla y solo basta con ejecutar lo siguiente:
mkdir /srv/desarrollo/trac/proyecto_A1 trac-admin /srv/desarrollo/trac/proyecto_A1 initenv chown www-data:www-data -R /srv/desarrollo/trac/proyecto_A1
En el asistente le indicamos el nombre del proyecto, la ruta al repositorio de subversion y lo demás por defecto.
La asignación de permisos sobre cada entorno también es sencilla:
# Creamos el grupo admins y le asignamos el rol de TRAC_ADMIN trac-admin /srv/desarrollo/trac/proyecto_A1 permission add admins TRAC_ADMIN # Unimos al usuario admin al grupo admins trac-admin /srv/desarrollo/trac/proyecto_A1 permission add admin admins
Ahora viene la parte tortuosa del asunto, la configuración de Apache. En primer lugar tenemos que decidir si vamos a crear un nuevo VirtualHost o agregamos la configuración al que viene por defecto. A mí personalmente me gusta separar cada entorno por lo que he optado por crear uno nuevo, así al servir varios portales no tenemos problemas de que se solapen las configuraciones.
Ahora vamos a crear el archivo de configuración en /etc(apache2/sites-available/001-svntrac
:
<VirtualHost *:80> # Nombre del VirtualHost ServerName svntrac.cygnux.org ServerAdmin webmaster@cygnux.org # Raíz del VirtualHost DocumentRoot /srv/desarrollo ErrorLog ${APACHE_LOG_DIR}/svntrac-error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/svntrac-access.log combined <Directory /> Options +Indexes +FollowSymLinks AllowOverride All DirectoryIndex index.php index.html </Directory> # Allias para acceso a WebSVN Alias /websvn /usr/share/websvn ...
Con esto definimos el VirtualHost, las opciones de logging, los permisos sobre el directorio raíz y el alias para WebSVN (tenemos que comentar dicho alias del archivo /etc/apache2/conf.d/websvn
)
Pasamos a definir la autentificación mixta (LDAP y htpasswd):
... # Autentificación sólo a subniveles de / <LocationMatch "/.+/"> Order deny,allow Deny from all AuthBasicProvider ldap file AuthType Basic AuthName "Acceso Repositorios Subversion" AuthLDAPURL ldap://ldap.cygnux.org/OU=USUARIOS,DC=CYGNUX,DC=ORG?uid?sub?(objectClass=inetOrgPerson) AuthzLDAPAuthoritative off AuthLDAPBindDN "CN=proxyuser,DC=CYGNUX,DC=ORG" AuthLDAPBindPassword clave_secreta AuthUserFile /usr/local/etc/apache/svn.htpasswd Satisfy any Require valid-user </LocationMatch> # No autentificamos el acceso a /autoindex <Location "/autoindex"> Options +FollowSymLinks +Indexes order allow,deny Allow from all </Location> ...
Con esto definimos la autentificación para todos los niveles que estén por debajo de http://svntrac.cygnux.org/, es decir, para el nivel raíz no la pide pero sí para /svn o /trac También excluimos el nivel /autoindex de la autentificación, que más adelante lo veremos…
La parte de LDAP indica que sólo autentificará a aquellos usuarios que estén dentro de la OU=USUARIOS mediante el usuario de conexión proxyuser y su clave_secreta.
Para la autentificación mediante archivo utilizamos el archivo /usr/local/etc/apache/svn.htpasswd
, que se crea así:
mkdir -p /usr/local/etc/apache/ htpasswd -c /usr/local/etc/apache/svn.htpasswd nombre_usuario
A continuación definimos la configuración para los entornos de trac y subversion:
... # Entornos de Trac <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /srv/desarrollo/trac PythonOption TracUriRoot /trac </Location> # Repositorios de Subversion <Location /svnrepo/proyectos_1> DAV svn SVNListParentPath on SVNParentPath /srv/desarrollo/svn/proyectos_1 </Location> <Location /svnrepo/proyectos_2> DAV svn SVNListParentPath on SVNParentPath /srv/desarrollo/svn/proyectos_2 </Location> </VirtualHost>
El módulo dav-svn con la opción SVNListParentPath, crea un listado de los repositorios que contiene la ubicación SVNParentPath.
Si habéis observado bien, la localización /svn la he cambiado por /svnrepo, esto es porque no es posible hacer un autoindex del directorio /svn con el módulo dav-svn activado, ya que al tratar de acceder a los repositorios con un cliente de Subversion, da el error "301 Moved Permanently"
(vaya dolores de cabeza que me ha dado el….). Si optáis por no hacer el autoindex (lo veo de gran utilidad cuando hay muchos repositorios en varios niveles), lo podéis dejar con /svn.
Es hora de instalar WebSVN…
apt-get install websvn
En el proceso de instalación nos pedirá la versión de apache a configurar, la ruta a la raíz de los repositorios (…svn/proyectos_1 y …svn/proyectos_2) separados por comas y la ruta a repositorios individuales (NO INDICAR). Para editar los repositorios basta con modificar el archivo /etc/websvn/svn_deb_conf.inc
Por último descomprimimos este zip en /srv/desarrollo y movemos el archivo .htaccess
a /srv/desarrollo/svn
Ahora nos toca activar los módulos de Apache y reiniciarlo:
a2enmod dav_svn authnz_ldap service apache2 restart
Con todo esto, y si todo ha ido bien, ya tenemos listo nuestro entorno TRAC-SVN en la siguiente URL: http://svntrac.cygnux.org/
Recuerda: para el acceso con un cliente de Subversion es necesario cambiar /svn por /svnrepo….
Muy interesante!!!! por cierto BOFH, en las entradas de reader no me sale titulo en los articulos, echale un vistazo y gracias por el curro!
lo miraré, pero es raro raro, porque a mí si me salen.
Gracias por nada, a compartir!!! ;))
ahhh a ver si te animas y te curras uno…jejeje
usted en uno de los apartes del documento dice:»Por último descomprimimos este zip en /srv/desarrollo y movemos el archivo .htaccess a /srv/desarrollo/svn»
El link no sirve…. Donde puedo descargar el zip al cual usted se refiere??
Hola Henry, ya está disponible el link. Con el cambio de hosting se me había pasado….