====== Utilisation de Trac ======
[[http://trac.edgewall.org/|Trac]] est un système complet de gestion de projet. Il est développé en Python tout comme Bazaar et intègre un wiki, une gestion des feuilles de route, un historique, un outil de rapport de bugs et un explorateur de code source. Trac est généralement utilisé en couple avec SVN mais des plugins existent pour le faire cohabiter avec d'autres gestionnaires de versions.
Note : Les commandes de cette page doivent être exécutées en **root**. Cet article est aussi intimement lié à celui concernant l'[[gnu_linux_server:code_versioning:bazaar:bzr_ssh_server|installation de Bazaar]].
===== Installation =====
Par défaut, Trac ne supporte pas les dépôts de code au format Bazaar, il va donc falloir installer un plugin pour que tout fonctionne. De plus, Trac est livré avec le démon **tracd** qui permet d'accéder via un navigateur web à l'interface. Cependant, si l'on fait tourner un serveur web sur la machine hébergeant le Trac (ce qui est souvent le cas), on ne peut donc pas lancer le démon sur le port 80. Il peut alors être utile de configurer le serveur web pour accéder au contenu de Trac sans passer par **tracd**. Ici, nous utiliserons Apache 2 comme serveur web. On installe donc les paquets nécessaires avec la commande suivante.
aptitude install trac trac-bzr trac-spamfilter libapache2-mod-python
Le paquet **trac-bzr** correspond au plugin Bazaar, **trac-spamfilter** permet d'éviter les spams sur les rapports de bugs et **libapache2-mod-python** est un module Apache pour pouvoir gérer les sites web codés en Python.
===== Configuration =====
Une fois installé, on va crée un répertoire qui va contenir dans le futur toutes les instances de Trac.
mkdir /var/trac
On peut ensuite initialiser une instance pour le projet Bazaar.
trac-admin /var/trac/mon_projet initenv
Une suite de questions est posée. Il faut y répondre correctement pour indiquer le chemin du projet, le type de dépôt, etc. Voici un exemple (limité au strict minimum) de ce qui doit s'afficher dans le terminal.
#Le nom du projet
Project Name [My Project]> Mon Projet
# Valider sans rien répondre
Database connection string [sqlite:db/trac.db]>
# Entrer "bzr" pour Bazaar
Repository type [svn]> bzr
# Chemin vers la racine de la branche
Path to repository [/path/to/repos]> /var/bzr/mon_projet/ma_branche
Après ceci, l'instance de Trac n'est ni fonctionnelle ni accessible. En effet, il faut d'abord activer les plugins installés afin que Trac ouisse prendre en compte le projet Bazaar. Pour cela, il faut éditer le fichier ///var/trac/mon_projet/conf/trac.ini// et ajouter à la fin les lignes suivantes.
[components]
tracbzr.* = enabled
tracspamfilter.* = enabled
Pour prendre en compte cette nouvelle configuration, il faut mettre à jour l'instance Trac.
trac-admin /var/trac/mon_projet upgrade
À ce stade, l'instance est fonctionnelle mais elle n'est pas encore accessible au travers du serveur web. De plus, aucun compte n'a été créé et donc Trac ne peut savoir si le visiteur est un administrateur, un développeur ou une personne anonyme. Pour y remédier, il faut créer un fichier qui va contenir toutes les personnes autorisées à se connecter sur l'instance de Trac.
htpasswd -c /var/trac/mon_projet/trac.htpasswd mon_utilisateur
L'option **-c** permet de créer le fichier. Après avoir validé, le mot de passe de l'utilisateur sera demandé. Il suffit de l'entrer et l'utilisateur sera ajouté. Pour en ajouter un autre par la suite, il faut veiller à ne pas utiliser l'option **-c**. Trac a sa propre gestion des groupes et des utilisateurs. La liste de ces derniers est enregistrée dans le fichier ///var/trac/mon_projet/trac.htpasswd// que nous avons créé précédemment. Pour davantage de sécurité, il est conseillé de retirer certaines permissions au personnes non autorisées et non connectées. Les anonymes ne doivent pas pouvoir modifier le wiki ni les tickets déjà créés.
trac-admin /var/trac/mon_projet permission remove anonymous WIKI_CREATE WIKI_MODIFY TICKET_MODIFY
En revanche, les développeurs doivent être capables de faire toutes ces actions. Il est alors possible de créer un groupe **developer** avec les droits qui vont bien et en y ajoutant les personnes concernées.
trac-admin /var/trac/mon_projet permission add developer WIKI_CREATE WIKI_MODIFY TICKET_MODIFY
trac-admin /var/trac/mon_projet permission add mon_utilisateur developer
Enfin, le mainteneur du projet doit obtenir tous les droits, y compris ceux qui lui permettront d'administrer le système pour modifier les types de rapport de bug, les feuilles de route, etc.
trac-admin /var/trac/mon_projet permission add mon_utilisateur TRAC_ADMIN
Une fois que l'instance Trac sera mise en ligne, les personnes enregistrées auparavant pourront se connecter et celles désignées comme administrateurs auront accès au bouton **ADMIN** pour configurer Trac plus facilement.
===== Accès par HTTP =====
L'instance Trac étant fonctionnelle, il faut désormais la rendre disponible via le web par le serveur Apache. Pour commencer au s'assure d'avoir activé le **mod_python** précédemment installé.
a2enmod python
Ensuite, il faut créer un nouveau site qui va pointer vers l'instance de Trac et qui va utiliser le bon fichier pour pouvoir se connecter avec un utilisateur enregistré. Pour cela, il faut éditer un fichier de **VirtualHost** comme ///etc/apache2/sites-available/mon_projet// et y mettre un code similaire à celui qui suit.
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonInterpreter main
PythonOption TracEnv /var/trac/mon_projet
PythonOption TracUriRoot /mon_projet
SetEnv PYTHON_EGG_CACHE /tmp
AuthType Basic
AuthName "mon_projet login"
AuthUserFile /var/trac/mon_projet/trac.htpasswd
Require valid-user
Il faut également penser à donner l'accès à Apache pour qu'il puisse accéder au contenu de l'instance Trac.
chown -R www-data:www-data /var/trac/mon_projet
Pour finir, le site doit être activé et la configuration de Apache rechargée.
a2ensite mon_projet
/etc/init.d/apache2 restart
Il est également conseillé de penser au [[gnu_linux_server:webserver_apache_2:mod_macro|mod_macro]] si les instances de Trac à gérer se multiplient et également au [[gnu_linux_server:webserver_apache_2:mod_ssl|mod_ssl]] pour mieux sécuriser la connexion des utilisateurs.