Table of Contents

Trac

Trac è un wiki, un sistema di ticketing e un'interfaccia a Subversion per lo sviluppo di software. Si appoggia a database SQLite, PostgreSQL, MySQL. Si sfrutta il modulo mod_python di Apache per avere un livello di efficienza accettabile.

In Debian si installano i pacchetti trac e libapache2-mod-python, eventualmente altri pacchetti accessori:

Creare un nuovo trac

Preparare una directory accessibile via web, eseguire il comando di preparazione e rendere scrivibile ad Apache la directory con il database:

trac-admin /var/www/www.faunalia.it/trac initenv
chown -R www-data /var/www/www.faunalia.it/trac/trac/db

Nella configurazione di Apache si aggiunge la sezione:

<Location /trac/>
   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonHandler trac.web.modpython_frontend
   PythonOption TracEnv /var/www/www.faunalia.it/trac
   PythonOption TracUriRoot /trac
</Location>

Per avere l'autenticazione si aggiunge alla configurazione di Apache:

<Location /trac/login>
    AuthType Basic
    AuthName "Trac Faunalia"
    AuthUserFile /var/www/www.faunalia.it/trac/.htpasswd
    Require valid-user
</Location>

L'autenticazione viene gestita da Apache, nell'esempio sopra tramite una autenticazione base e file .htpasswd. Per obbligare l'uso di https basta aggiungere la direttiva SSLRequireSSL.

Amministrazione

L'amministrazione si fa da riga di comando con il tool trac-admin. Se si esegue il comando passando come unico parametro la directory del Trac si entra in modalità interattiva. In particolare si può assegnare i privilegi agli utenti, come in questo esempio:

# trac-admin /var/www/www.faunalia.it/trac
Trac [/var/www/www.faunalia.it/trac]> help
Trac [/var/www/www.faunalia.it/trac]> permission list
Trac [/var/www/www.faunalia.it/trac]> permission add niccolo TICKET_CREATE TICKET_VIEW TICKET_MODIFY
Trac [/var/www/www.faunalia.it/trac]> exit

L'utente Unix che lancia il comando trac-admin deve avere i permessi di lettura e scrittura sul file db/trac.db e la directory che lo contiene.

Uno dei permessi fondamentali è SEARCH_VIEW, conviene darlo a tutti gli utenti autenticati.

Configurazione

Il file di configurazione trac/conf/trac.ini è documentato in questa pagina.

Configura notifiche email

Se si usa l'autenticazione Apache su Kerberos si incappa in alcuni problemi dovuti al fatto che il modulo Apache restituisce come utente autenticato la stringa completa username@EXAMPLE.REALM.

Ecco una configurazione abbastanza accettabile:

[notification]
ignore_domains = RIGACCI.ORG
smtp_default_domain =
use_short_addr = true
smtp_always_bcc = trac@rigacci.org
smtp_enabled = true
smtp_from = trac@rigacci.org
smtp_port = 25
smtp_server = localhost
  1. L'utente viene autenticato da Apache/Kerberos come username@RIGACCI.ORG, ma la direttiva ignore_domains consente a Trac di ignorare la parte realm e fare un corretto lookup dell'indirizzo email usando le sue preferenze dell'utente oppure il smtp_default_domain.
  2. Non usare smtp_default_domain se questo coincide con ignore_domains, piuttosto abilitare use_short_addr. In tal modo Trac userà per le notifiche un indirizzo non qualificato da dominio (a meno di preferenze impostate dall'utente). Lasciare al server SMTP l'incombenza di accettare e qualificare con un dominio gli indirizzi non qualificati.
  3. È possibile assegnare i ticket all'utente non qualificato username, ma in tal caso Trac non lo riconosce come utente proprio. Conviene pertanto usare sempre la forma username@RIGACCI.ORG sia quando si assegna il proprietario di una component sia quando si assegna un ticket, in tal modo le preferenze dell'utente (indirizzo email) e la visualizzazione dei ticket propri vengono rispettate.

Per istruire Exim (versione Debian) ad accettare destinatari non qualificati si aggiungono le direttive:

recipient_unqualified_hosts = 127.0.0.1
MAIN_QUALIFY_DOMAIN = rigacci.org

Logo e icona

Si mette logo e icona personalizzati nella directory htdocs/ e nel file di configurazione conf/trac.ini si indica:

[header_logo]
alt = Faunalia
src = site/faunalia_logo.jpg

[project]
icon = site/faunalia.ico

La parola chiave site è un riferimento alla directory htdocs/ del sito trac, mentre la parola chiave common è un riferimento alla directory condivisa da tutti i siti trac (in Debian è /usr/share/trac/htdocs).

SVN

Articoli correlati:

Installare i pacchetti Debian:

È possibile associare un repository SVN ad un Trac. In questo esempio si suppone che l'ambiente Trac sia stato già creato, quindi bisogna creare solo il repository SVN:

mkdir /var/lib/svn
mkdir /var/lib/svn/projectname
svnadmin create /var/lib/svn/projectname --fs-type fsfs
chown -R www-data:www-data /var/lib/svn/projectname

Si aggiunge la confgurazione necessaria di Apache in un file /etc/apache2/svn/projectname:

#
# Include this file from some VirtualHost config.
#
<Location /svn/projectname>
    DAV svn
    SVNPath /var/lib/svn/projectname

    AuthType Basic
    AuthName "Subversion Repository - Projectname"
    AuthUserFile /var/www/trac/projectname/.htpasswd

    # Authenticated read and write.
    #Require valid-user
    #SSLRequireSSL

    # Anonymous read, authenticated write.
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
        SSLRequireSSL
    </LimitExcept>

</Location>

Il file deve essere incluso nella configurazione generale di Apache o in quella di qualche VirtualHost.

Quindi si edita la configurazione del Trac /var/www/trac/projectname/conf/trac.ini e si impostano i seguenti parametri:

[trac]
repository_dir = /var/lib/svn/projectname
repository_type = svn

Per sicurezza si sincronizza il repository con il database di Trac:

trac-admin /var/www/trac/projectname resync

A questo punto tutti gli utenti che hanno l'autorizzazione BROWSER_VIEW vedranno il pulsante Browse Source nell'interfaccia di Trac.

Da remoto sarà possibile accedere al repository tramite l'URL http://host/svn/projectname, con tutti i controlli di accesso e impostazioni di Apache.

Commit hook

Installando gli opportuni script è possibile che ad ogni commit segua un'azione sul Trac. Ad esempio si può generare un commento o chiudere un ticket con un semplice commit, basta aggiungere l'opportuno testo nel commento stesso:

refs #n Aggiunge un commento al ticket.
closes #n Aggiunge un commento al ticket e lo chiude.
(spent x h) Indica il tempo usato x (h per ore, m per minuti).
(spent x h, rem y h) Indica il tempo usato x e il tempo rimanente y.

Installazione da sorgenti

Documentazione utile:

Come installare Trac 0.12 (include la traduzione in più lingue, richiede il modulo Python Babel) non pacchettizzato Debian. Su una Debian Squeeze con già Apache e PHP si installano i seguenti pacchetti:

Verificare che la directory di installazione sia /usr/local/ (prima riga dell'output):

python ./setup.py --dry-run install

Eventualmente si può aggiungere il parametro --prefix=/usr/local. Se tutto sembra a posto si esegue il comando senza --dry-run e con l'opzione --record files.txt per avere traccia di cosa viene installato, sono necessari i privilegi di root:

python ./setup.py install --record files.txt

Pare che non esista una opzione per la disinstallazione. Forse bisogna chiamare easy_install con l'opzione -m? Queste le directory e i file installati:

Gli eseguibili di easy_install sarebbero comunque già installati con il pacchetto python-setuptools.

Configurazione Apache

Si può utilizzare Apache in varie configurazioni, CGI, FastCGI, mod_python, mod_wsgi. Pare che il metodo consigliato sia mod_wsgi, molto più performante di CGI e mod_python.

La directory in cui risiede un progetto Trac (environment) non dovrebbe stare dentro la DocumentRoot. Si possono creare diversi progetti Trac che rispondono dallo stesso VirtualHost in sottodirectory differenti. L'istanza wsgi di Trac rimane una sola per ottimizzare l'utilizzo di memoria sul server. In pratica vogliamo che siano disponibili degli URL del tipo:

http://trac.site.org/ Indice dei progetti Trac creati nel VirtualHost.
http://trac.site.org/project/ Home page del singolo progetto.

Ecco una possibile organizzazione delle directory:

DocumentRoot /var/www/trac.site.org/ In pratica contiene solo uno script .wsgi.
TRAC_ENV_PARENT_DIR /home/trac.site.org/projects/ Contiene una sottodirectory per ogni progetto.
PYTHON_EGG_CACHE /home/trac.site.org/eggs/ Directory dove Python può scompattare temporaneamente degli egg Python.

Il file /etc/apache2/sites-available/trac.site.org, oltre alle consuete impostazioni contiene:

WSGIScriptAlias / /var/www/trac.site.org/trac.wsgi
<Directory /var/www/trac.site.org>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

Il file /var/www/trac.site.org/trac.wsgi contiene:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
sys.stdout = sys.stderr
import os
os.environ['TRAC_ENV_PARENT_DIR'] = '/home/trac.site.org/projects'
os.environ['PYTHON_EGG_CACHE'] = '/home/trac.site.org/eggs'
import trac.web.main
application = trac.web.main.dispatch_request

Inizializzazione di un progetto

Per inizializzare un progetto Trac:

trac-admin /home/trac.site.org/projects/<project> initenv
chown -R www-data:www-data /home/trac.site.org/projects/<project>

Pare che non basti dare i permessi ad Apache solo sulla directory db, come con l'installazione mod_python vista sopra.

Le impostazioni del progetto possono essere modificate editando il file conf/trac.ini contenuto nella directory stessa del progettto (environment).

Nella directory /home/trac.site.org/projects/<project>/htdocs si potranno mettere file da includere nelle pagine web, ad esempio il logo. I file saranno disponibili all'URL base http://trac.site.org/<project>/chrome/site/. Questo corrisponde al percorso relativo site/ usabile nel file di configurazione trac.ini.

Altri file - condivisi fra tutti i progetti - sono contenuti nella directory di installazione del Trac (dist-packages), sottodirectory trac/htdocs/. Questi sono accessibili all'URL base http://trac.site.org/<project>/chrome/common/.