====== Trac ====== **[[http://trac.edgewall.org/|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: * libneon26 * python-clearsilver * python-pysqlite2 * python-setuptools * python-subversion * subversion ===== 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: SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /var/www/www.faunalia.it/trac PythonOption TracUriRoot /trac Per avere l'**autenticazione** si aggiunge alla configurazione di Apache: AuthType Basic AuthName "Trac Faunalia" AuthUserFile /var/www/www.faunalia.it/trac/.htpasswd Require valid-user 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 **[[http://trac.edgewall.org/wiki/TracIni|questa pagina]]**. ==== Configura notifiche email ==== Se si usa l'autenticazione [[kerberos_apache|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 - 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''. - 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. - È 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: * **[[http://wiki.kartbuilding.net/index.php/Trac_and_SVN|Trac and SVN]]** * **[[http://trac.edgewall.org/wiki/TracEnvironment|The Trac Environment]]** Installare i pacchetti Debian: * **apache2** * **subversion** * **libapache2-svn** * **trac** È 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. # 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. Require valid-user SSLRequireSSL 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 [[http://trac.edgewall.org/wiki/TimeTracking#UsingaSubversioncommithookoptional|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: * [[http://trac.edgewall.org/wiki/TracInstall|Trac Installation Guide for 0.12]] * [[http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac|modwsgi, Integration With Trac]] 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: * **python-setuptools** * **python-genshi** * **libapache2-mod-wsgi** * **python-pybabel** 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. ==== Configurazione Apache ==== Si può utilizzare Apache in varie configurazioni, **CGI**, **FastCGI**, **mod_python**, **mod_wsgi**. Pare che il metodo consigliato sia **[[http://trac.edgewall.org/wiki/TracModWSGI|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 WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all 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/ initenv chown -R www-data:www-data /home/trac.site.org/projects/ 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//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//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//chrome/common/%%''**.