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:
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.
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.
Il file di configurazione trac/conf/trac.ini
è documentato in questa pagina.
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
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
.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.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
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
).
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.
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. |
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:
/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/
/usr/local/bin/trac-admin
/usr/local/bin/tracd
/usr/local/bin/easy_install
/usr/local/bin/easy_install-2.5
/usr/local/bin/easy_install-2.6
Gli eseguibili di easy_install
sarebbero comunque già installati con il pacchetto python-setuptools.
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
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/
.