Trac, gestión documental e incidencias/mejoras con repositorio Git

Trac es un sistema de gestión documental (wiki), incidencias/mejoras (issue tracking system) para proyecto de desarrollo de Software.

Actualmente, en su especialidad es uno de los sistemas más utilizados. La versión original se encuentra diseñada para ser integrada con repositorios de control de versiones Subversion, pero existen diversos plugins que nos permiten utilizar otros backends… como por ejemplo Git.

Veamos como podemos instalar y poner en marcha el sistema Trac con un repositorio Git…

Instalación en Ubuntu GNU/Linux

La versión de Trac disponible en los repositorios de Ubuntu es la 0.10 actualmente y personalmente, prefiero instalar de forma manual Trac para así utilizar la última versión. Para ello, primero tendremos que instalar varias dependencias:

$ sudo aptitude install python-setuptools
$ sudo aptitude install python-pysqlite2

Acto seguido, bajamos la versión que nos interese de Trac, descomprimimos e instalamos:

$ cd Trac-0.11rc1/
$ sudo python setup.py install

A continuación, descargamos Git Plugin y descomprimimos. En mi caso particular me he encontrado con un pequeño bug en el plugin que me impedía visualizar versiones antiguas del repositorio Git desde Trac, para arreglarlo simplemente tuve que modificar el fichero ‘gitplugin/0.11/tracext/git/git_fs.py’, línea 252:

def previous_rev(self, rev, path='');

La modificación consiste en añadir el tercer argumento ‘path’. El bug lo he reportado e imagino que el autor lo validará y corregirá (si aplica) en algun momento.

Es posible que cuando leáis este artículo, ya se encuentre corregido y por tanto podemos olvidarnos y pasar directamente a instalar el plugin:

$ cd gitplugin/0.11
$ sudo python setup.py install

Instalación en Microsoft Windows XP

En Windows me gusta trabajar directamente desde la terminal Cygwin y por tanto, doy por supuesto que tenemos instalada esa herramienta con los paquetes que listo en este artículo sobre Cygwin más el paquete para soportar Python.

Para instalar Trac, previamente necesitaremos instalar varias dependencias: setuptools y Genshi. Descargaremos los “.egg” y los instalaremos mediante los siguientes comandos:

sh setuptools-0.6c8-py2.5.egg 
easy_install Genshi-0.4.4-py2.5.egg 

Por otra parte, también necesitaremos descargar PySQLite, descomprimir e instalar:

cd pysqlite-2.4.1/
python setup.py install

Finalmente, bajamos la versión que nos interese de Trac, descomprimimos e instalamos:

cd Trac-0.11rc1/
python setup.py install

Configuración básica

Trac funciona de forma que necesitamos generar una instancia para cada proyecto, imaginemos que ya tenemos un repositorio Git en el directorio ‘/home/usuario/repo/’ y queremos generar la interfaz web Trac.

En primer lugar generaremos una instancia de Trac en el directorio que nos interese:

mkdir test
trac-admin test/ initenv

Trac-admin nos realizará diversas preguntas, en general podemos dejar todo por defecto excepto el sistema de control de versiones que será ‘git’ y el path del repositorio, el cual debe apuntar al directorio ‘.git/’, por ejemplo: ‘/home/usuario/repo/.git’.

A continuación, editamos el fichero ‘test/conf/trac.ini’ y validamos que el archivo incluye la siguiente información (en caso de que haya algo diferente o ausente, deberemos modificarlo o añadirlo):

[git]
cached_repository = true
git_bin = /usr/bin/git
persistent_cache = true
shortrev_len = 7

[components]
# for plugin version 0.11.0.1+
tracext.git.* = enabled

A continuación, crearemos un usuario con su respectivo password. Para ello necesitamos primer generar un script que nos ayude, creamos el fichero ‘trac-digest.py’ con el siguiente contenido:

from optparse import OptionParser
import md5

# build the options
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage)
parser.add_option("-u", "--username",action="store", dest="username", type = "string",
                  help="the username for whom to generate a password")
parser.add_option("-p", "--password",action="store", dest="password", type = "string",
                  help="the password to use")
(options, args) = parser.parse_args()

# check options
if (options.username is None) or (options.password is None):
   parser.error("You must supply both the username and password")
   
# Generate the string to enter into the htdigest file
realm = 'trac'
kd = lambda x: md5.md5(':'.join(x)).hexdigest()
print ':'.join((options.username, realm, kd([options.username, realm, options.password])))

A continuación generamos el usuario y lo guardamos en el fichero ‘digest.txt’:

$ python trac-digest.py -u usuario -p password > digest.txt

Al usuario generado, le daremos permisos de administración total:

$ trac-admin test/ permission add usuario TRAC_ADMIN

Y finalmente, ejecutaremos el servidor web integrado Tracd para que escuche por el puerto 8080, utilice nuestro fichero de usuarios y permita acceso a la instancia de Trac que acabamos de generar:

$ tracd --port 8080 --auth=test,digest.txt,trac test/

Para acceder a Trac simplemente tendremos que visitar la URL http://127.0.0.1:8080/test/, identifiarnos y empezar a jugar con el 😉

Para entornos estables lo ideal es configurar un servidor web Apache, para esto lo mejor es consultar directamente la documentación de Trac.

2 thoughts on “Trac, gestión documental e incidencias/mejoras con repositorio Git

  1. Uolas
    Otra vez yo…;)
    Tambien en su dia me estuvo mirando, pero lo descarte por otro alternativa mejor:
    redmine (www.redmine.org)
    Esta hecho en rails y soporte de serie varios sistemas de control de versiones (git,svn,mercurial, bazaar) sin tener que instalar ningun plugin.
    Pero lo mas importante… es que una unica instalacion permite gestionar infinidad de proyectos y subproyectos…
    Mejor mira aqui las features
    http://www.redmine.org/wiki/redmine/Features

    El proyecto es bastante joven 0.71, pero tiene un potencial enorme.

  2. Hola Gerard 😉

    Tiene muy buena pinta redmine, sobretodo si tal y como indicas quieres gestionar varios proyectos desde un mismo lugar. Queda pendiente probarlo!

Leave a Reply

Your email address will not be published. Required fields are marked *