Trac

De Javi Sanromán wiki

Tabla de contenidos

[ocultar]

¿Que es trac?

Trac es una herramienta con interfaz web para la gestión de proyectos de software. Trac integra un wiki, un sistema de tickets (bugs, incidencias, mejoras, etc), integración con svn e integración entre el módulo de tickets y svn (pudiendo cerrar, añadir comentarios a un ticket a través de un commit de svn), y unas útiles vistas sobre la actividad del proyecto que reune los últimos commits svn, ultimas paginas modificadas del wiki, ultimos tickets.

A diferencia de otros sistemas parecidos y mas completos como puede ser gforge, trac es ligero y sencillo de instalar y mantener.


Instalación básica

En ubuntu ya lo tenemos en los repositorios oficiales por lo que simplemente debemos hacer:

sudo apt-get install trac
sudo easy_install Trac

Necesitamos un directorio para almacenar los proyectos trac:

sudo mkdir /var/lib/trac
sudo chown www-data:www-data /var/lib/trac

Utilizaremos /var/lib/trac y este debe ser accesible por el usuario de apache.

Y ahora solo tenemos que crearnos nuestro proyecto trac:

sudo trac-admin /var/lib/trac/ProyectoPrueba initenv

Al ejecutar este comando se nos pedirá el nombre del proyecto, el tipo de repositorio de versiones que utilizamos (svn por defecto) y el path absoluto a dicho repositorio.

Ahora podemos ejecutar la siguiente linea con un usuario que tenga permisos sobre /var/lib/trac:

tracd --port 8000 /var/lib/trac/prueba

y abrir el navegador en http://localhost:8000/prueba

Ya tenemos nuestro primer proyecto trac!


Trac, Apache y mod_python

Podemos configurar un host virtual para servir el proyecto trac que necesitemos haciendo uso de mod_python. Debemos tener instalado apache2, libapache2-mod-python, como siempre en debian y derivadas un simple apt-get install ... bastará. Activamos mod_python

a2enmod mod_python

Y creamos nuestro virtual host en apache. Creamos un fichero, en mi caso pruebastrac, en /etc/apache2/sites-available:

NameVirtualHost *
<VirtualHost *>
      ServerAdmin tu_email
      ServerName pruebastrac.net
      ServerAlias pruebastrac.net
      DocumentRoot /var/lib/trac


      ErrorLog /var/log/apache2/error.trac.log
      CustomLog /var/log/apache2/access.trac.log combined

      Alias / "/var/lib/trac/prueba/"
      <Directory "/var/lib/trac/prueba/">
               SetHandler mod_python
               PythonInterpreter main_interpreter
               PythonHandler trac.web.modpython_frontend
               PythonOption TracEnv /var/lib/trac/prueba
               PythonOption TracUriRoot /
               SetEnv PYTHON_EGG_CACHE /tmp
               PythonOption PYTHON_EGG_CACHE /tmp
      </Directory>
</VirtualHost>

y creamos el enlace simbólico en /etc/apache2/sites-enabled:

sudo ln -s ../sites-available/pruebastrac ./pruebastrac

Ahora procedemos a instalar genshi (motor de plantillas escrito en python y del que trac hace uso):

apt-get install python-genshi
sudo easy_install -Z Genshi==0.5

Apuntamos en nuestro fichero de hosts pruebastrac.net a 127.0.0.1 y reiniciamos apache, deberiamos acceder al trac de nuestro proyecto de prueba.


Autentificación

Para activar el login en nuestro entorno trac debemos añadir estas lineas al fichero de configuración de nuestro virtual host, en nuestro caso /etc/apache2/sites-available/pruebastrac

<Location /login>
    AuthType Basic
    AuthName "MyCompany Trac Server"
    AuthUserFile /var/lib/trac/prueba/.htpasswd
    Require valid-user
</Location>

Como estamos autentificando contra los usuarios que tenemos en un fichero htpasswd debemos crearlo y añadir los usuarios deseados. También tendriamos la posibilidad de autentificación contra un servidor ldap pero de momento no es necesario:

#La primera vez para crear el fichero añadimos la opción -c
htpasswd -c .htpasswd javi

Ahora ya podemos autentificarnos con nuestros usuarios y editar el wiki o añadir nuestros primeros tickets.


Integración Tickets & SVN

Podemos añadir un nivel de integración mayor entre nuestro repositorio de svn y nuestro trac para añadir comentario o cerrar un ticket cuando commiteamos cualquier cambio svn.

La idea general: consiste en invocar desde el post-commit del repositorio svn indicado al script trac-post-commit-hook que recibirá el nombre del repositorio y el número de versión, y este haciendo uso de svnlook obtendrá usuario, mensaje, etc, procesará el mensaje y si este contiene los caracteres correspondientes realizará una llamada por url para realizar la acción correspondiente sobre el ticket deseado.

Requisitos

Necesitamos tener instalados svnlook y svnnotify (este último lo obtenemos mediante el paquete libsvn-notify-perl).

Descargamos el script trac-post-commit-hook.

Descargamos el plugin SVNPolicies directamente desde el repositorio:

svn export http://code.optaros.com/svn/oforge/trunk/plugins/svnpoliciesplugin/ 

Instalando plugin SVNPolicies

Descomprimimos el fichero descargado y ejecutamos sobre el directorio:

sudo python setup.py bdist_egg

El cual nos genera un fichero .egg en el directorio dist, este fichero debemos copiarlo al directorio de plugins de nuestro entorno trac. Añadimos a nuestro trac.ini las siguientes lineas para activar el plugin:

[components]
svnpolicies.* = enabled
svnpolicies.admin.* = enabled
svnpolicies.plugins.* = enabled

[svnpolicies]
commands.enabled = true
svnlook = /usr/bin/svnlook
svnnotify = /usr/bin/svnnotify
svnpolicies_enabled = true
trac_post_hook = /usr/local/bin/trac-post-commit-hook

Si tenemos el plugin WebAdmin podemos activarlo desde la interfaz web.

Tenemos mas información sobre la instalación de plugins en el manual del trac.

Configuramos hook svn

Copiamos el script trac-post-commit-hook a /usr/local/bin/. En nuestro directorio hooks del repositorio svn creamos el fichero post-commit si no lo tenemos ya y añadimos lo siguiente:

REPOS="$1"
REV="$2"

TRAC_ENV="path a nuestro proyecto trac"
/usr/bin/python /usr/local/bin/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"

Con esto cada vez que hagamos un commit sobre este repositorio svn ejecutamos esta orden.

Sintaxis en comentarios svn

Ahora podemos dejar simplemente un comentario o cerrar un ticket si incluimos en el comentario de un commit las siguientes palabras mágicas:

Dejar comentario en ticket numero 1:

  • addresses #1
  • re #1
  • references #1
  • refs #1
  • see #1

Cerrar ticket numero 2:

  • close #2
  • closed #2
  • closes #2
  • fix #2
  • fixed #2
  • fixes #2

Por supuesto esta sintaxis podemos cambiar simplemente editando el script trac-post-commit-hook para poner por ejemplo cerrar #1.


Configuración

Tenemos un fichero de configuración en /directorio_de_proyecto/conf/trac.ini donde podremos configurar aspectos como: envío de correos, nombre proyecto, icono e imagen de cabecera, componente milestone prioridad resolucion y versión por defecto, etc.