Installation et mise en place de trac

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.

Trac est un système de tracking pour le développement d'applications. Il se compose d'une interface web, d'un wiki, et permet d'intégrer facilement un dépôt SubVersion.

Ce howto va vous montrer comment mettre en place ce système de tracking. Le domaine utilisé est trac.pfoo.domain.tld qui est un alias pour srv.domain.tld.
srv.domain.tld est le domaine identifiant le serveur sur lequel se trouvera le trac. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::110.

Ce howto est construit de manière à respecter mon howto sur apache 2 ainsi que celui sur svn. Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027

Champs dns

Éditez le fichier de la zone dns de votre domaine (/srv/bind/domain.tld.hosts dans mon cas) et ajoutez les lignes suivantes si elles ne sont pas présentent :

srv.domain.tld.  IN      A       213.186.47.110
srv.domain.tld.  IN      AAAA    2001:41d0:1:d6e::110
trac.pfoo       IN      CNAME   srv.domain.tld.

Bien-sur si vous ne disposez pas d'ipv6 vous n'avez pas besoin du champs AAAA.

Installation

On va commencer par installer trac à partir des dépôts debian :

aptitude install trac

Trac nécessite un gestionnaire de base de donnée. Le support MySQL n'était encore qu'en test au moment où j'écris ces lignes, nous allons plutôt utiliser sqlite.

aptitude install sqlite

Création de l'environnement trac

Nous allons créer un environnement trac nommé "trac" dans /srv/http/domain.tld/pfoo.domain.tld/trac/ :

trac-admin /srv/http/domain.tld/pfoo.domain.tld/trac initenv

Il va falloir répondre à une série de questions:

Project Name [My Project]> myproject
Database connection string [sqlite:db/trac.db]> appuyez sur enter
Repository type [svn]> appuyez sur enter
Path to repository [/var/svn/test]> /srv/http/domain.tld/pfoo.domain.tld/svn/
Templates directory [/usr/share/trac/templates]> appuyez sur enter

Comme vous pouvez le voir, je couple trac avec mon dépôt subversion situé dans /srv/http/domain.tld/pfoo.domain.tld/svn/.

Pour fonctionner, il faut que l'environnement trac soit accessible en lecture et en écriture par apache. Modifiez donc les droits d'accès :

chown -R root:www-data /srv/http/domain.tld/pfoo.domain.tld/trac/
chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/trac/

Création de deux utilisateurs

Nous allons maintenant créer deux utilisateurs ayant accès à trac. On préfèrera crypter les mots-de-passes en SHA (option -s)

htpasswd -cs /srv/http/domain.tld/pfoo.domain.tld/trac.htpasswd pfoo
htpasswd -s /srv/http/domain.tld/pfoo.domain.tld/trac.htpasswd jonass

Bien-sur, il faut que ce fichier soit accessible par apache :

chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/trac.htpasswd

Configuration de apache2

Créez le fichier /etc/apache2/vhosts/trac.pfoo.domain.tld.conf et ajoutez y les lignes suivantes :

<VirtualHost 213.186.47.110:80>
        ServerName trac.pfoo.domain.tld
        Include sites/trac.pfoo.domain.tld.conf
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
        ServerName trac.pfoo.domain.tld
        Include sites/trac.pfoo.domain.tld.conf
</VirtualHost>

Si vous voulez une vhost sécurisée en ssl, je vous renvois à mon howto sur apache2.

Maintenant, deux choix s'offrent à nous pour l'accès web au déport trac. On peut soit utiliser CGI, soit utiliser mod-python. Personnellement, je préfère mod-python.

Avec CGI

Créez le fichier /etc/apache2/sites/trac.pfoo.domain.tld.conf et ajoutez y les lignes suivantes :

ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
  SetEnv TRAC_ENV "/srv/http/domain.tld/pfoo.domain.tld/trac/"
</Location>
<Location "/trac/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /srv/http/domain.tld/pfoo.domain.tld/trac.htpasswd
  Require valid-user
</Location>
RedirectMatch ^/$ /trac/

Il ne reste plus qu'à reloader apache :

/etc/init.d/apache2 reload

Avec mod-python

Pour commencer, il faut installer mod-python et le loader :

aptitude install libapache2-mod-python libapache2-mod-python-doc
a2enmod python

Créez le fichier /etc/apache2/sites/trac.pfoo.domain.tld.conf et ajoutez y les lignes suivantes :

<Location /trac>
   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonHandler trac.web.modpython_frontend 
   PythonOption TracEnv /srv/http/domain.tld/pfoo.domain.tld/trac/
   PythonOption TracUriRoot /trac
   SetEnv PYTHON_EGG_CACHE /srv/http/domain.tld/pfoo.domain.tld/trac/cache/
</Location>
<Location "/trac/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /srv/http/domain.tld/pfoo.domain.tld/trac.htpasswd
  Require valid-user
</Location>
RedirectMatch ^/$ /trac/

Il ne reste plus qu'à reloader apache :

/etc/init.d/apache2 reload

Configuration de trac.ini

Le fichier de configuration de votre trac est /srv/http/domain.tld/pfoo.domain.tld/trac/conf/trac.ini. Vous pouvez le modifier à votre guise. Si vous souhaitez coupler votre trac avec un dépôt svn, il faut modifier la directive repository_dir afin qu'elle corresponde au chemin de votre dépôt subersion. Normalement, ceci est déjà fait étant donné que vous avez entré le chemin de votre dépôt lors de la création de l'environnement trac.

Trac Webadmin

Depuis Trac 0.11 le plugin Webadmin est inclut par défaut avec Trac. Pour qu'un utilisateur puisse y accéder il suffit de lui ajouter la permission TRAC_ADMIN. Par exemple :

trac-admin /srv/http/domain.tld/pfoo.domain.tld/trac/ permission add pfoo TRAC_ADMIN

En rechargeant la page de Trac vous verrez apparaître un bouton admin.

Ajouter une feuille de style CSS

Vous pouvez embellir votre page trac avec une feuille de style CSS. Pour cela, rendez dans votre dossier trac (/srv/http/domain.tld/pfoo.domain.tld/trac/ dans mon cas) et modifiez le fichier templates/site.html :

  <head py:match="head" py:attrs="select('@*')">
    ${select('*|comment()|text()')}
        <link rel="stylesheet" type="text/css" href="${href.chrome('site/style.css')}" />
  </head>

  <div py:match="div[@id='banner']" py:attrs="select('@*')">
    <div id="innerbanner">
      ${select('*|text()')}
    </div>
  </div>

Ensuite ajoutez votre css dans le répertoire site/ de votre trac sous le nom style.css