Trac

Aus schokokeks.org Wiki
Wechseln zu: Navigation, Suche

Einführung

Trac ist ein in Python geschriebenes, ausgesprochen populäres Projektmanagement-Tool. Es kombiniert Bugtracker, ein minimalistisches Wiki und einen Sourcecode-Browser für verschiedene Versionsmanagement-Systeme und eignet sich dadurch sehr gut für Open Source Projekte jeder Größe.

Die Installation von Trac unterscheidet sich prinzipiell von der Installation üblicher PHP/MySQL Applikationen, weshalb sie hier genauer ausgeführt wird.

Technische Vorraussetzungen

Wir gehen im Folgenden davon aus, dass trac.host.com über das Konfigurations-Interface konfiguriert ist und Das htdocs-Verzeichnis in /home/<user>/websites/trac.host.com/htdocs liegt.

Trac selbst ist bereits auf dem Server installiert. Derzeitig liegt es in der Version 0.11 vor.

Wenn MySQL als RDBMS verwendet werden soll, muss eine MySQL-Datenbank verfügbar sein. Diese lässt sich ebenso über die Konfigurations-Maske anlegen.

Trac installieren

Trac-Umgebung aufsetzen

Trac wird mit einem Kommandozeilen-Werkzeug trac-admin ausgeliefert. Mit trac-admin lassen sich alle administrativen Aufgaben auch von der Kommandozeile erledigen.

Verzeichnis auswählen

Die Trac-Umgebung kann vollständig getrennt vom eigentlichen htdocs-Verzeichnis installiert werden. Das ist aus Sicherheitsgründen eine sehr gute Idee. Wir entscheiden uns hier für /home/<user>/websites/trac.host.com/trac.

RDBMS auswählen

Trac unterstützt prinzipiell PostgreSQL, MySQL und Sqlite, wobei die letzte Variante am besten getestet ist. Trotzdem habe ich mehrfach Trac in Kombination mit MySQL eingesetzt und dabei bisher keine Probleme festgestellt.

Trac-Umgebung initialisieren

Um Trac zu initialisieren, verwenden wir das Kommandozeilen-Werkzeug und führen trac-admin /home/<user>/websites/trac.host.com/trac initenv aus. initenv führt uns interaktiv durch die Installation.

Projektname festlegen
$ trac-admin /home/<user>/websites/trac.host.com/trac initenv
Creating a new Trac environment at /home/<user>/websites/trac.host.com/trac

Trac will first ask a few questions about your environment 
in order to initalize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Project Name [My Project]> Mein Projektname

Der Projektname kann beliebig vergeben werden und kann später editiert werden. Geben Sie einen Projektname an und bestätigen diesen mit der Eingabetaste.

Datenbankverbindung angeben

Nach der Vergabe des Projektnames wird nach den Datenbank-Verbindungsinformationen gefragt. Als Standard wird sqlite vorgeschlagen, falls das verwendet werden soll, einfach die Eingabetaste betätigen.

 Please specify the connection string for the database to use.
 By default, a local SQLite database is created in the environment 
 directory. It is also possible to use an already existing 
 PostgreSQL database (check the Trac documentation for the exact 
 connection string syntax).

Database connection string [sqlite:db/trac.db]> 

Wenn MySQL verwendet werden soll, sehen die Verbindungsinformationen ähnlich aus wie diese:

mysql://<user>:<password>@localhost/<datenbank name>

Die Felder in spitzen Klammern sind natürlich durch die entsprechenden Werte zu ersetzen.

Wenn Trac die Datenbank-Verbindung akzeptiert und sich verbinden kann, wird das Trac-Schema angelegt.

VCS-Integration
Please specify the type of version control system,
 By default, it will be svn.

 If you don't want to use Trac with version control integration, 
 choose the default here and don't specify a repository directory. 
 in the next question.

Repository type [svn]> 

Wenn Sie Subversion verwenden wollen, bestätigen sie diese Voreinstellung einfach mit der Eingabetaste. Die VCS-Integration kann später auch noch angepasst werden.

Die nächste Frage bezieht sich auf die Position des Subversion-Repositories im Dateisystem. Trac kann nur mit Subversion integriert werden, wenn das Repository lokal verfügbar ist.

 Please specify the absolute path to the version control 
 repository, or leave it blank to use Trac without a repository.
 You can also set the repository location later.

Path to repository [/path/to/repos]> /home/<user>/subversion/svn.host.com/repositories/<project>

Das war's auch schon, nach der Bestätigung des Repository-Pfades sollten Sie eine Meldung ähnlich zu dieser erhalten:

Project environment for 'My Project' created.

You may now configure the environment by editing the file:

  /home/lars/websites/projects.usrportage.de/trac/portage-mod-jabber/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /home/lars/websites/projects.usrportage.de/trac/portage-mod-jabber

Then point your browser to http://localhost:8000/portage-mod-jabber.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!

Trac im Web verfügbar machen

Ihre Trac-Umgebung ist nun initialisiert, allerdings noch nicht im Web verfügbar. Wir wollen, dass Trac unter http://trac.host.com erreichbar wird. Deshalb machen wir unsere Trac-Installation in /home/<user>/websites/trac.host.com/htdocs verfügbar. Wir kopieren dazu /usr/share/webapps/trac/0.11/hostroot/cgi-bin/trac.fcgi nach /home/<user>/websites/trac.host.com/htdocs/index.fcgi.

cp /usr/share/webapps/trac/0.12.2/hostroot/cgi-bin/trac.fcgi /home/<user>/websites/trac.host.com/htdocs/index.fcgi
TRAC_ENV path

Nun muss dem FastCGI-Endpoint noch bekannt gegeben werden, welche Trac-Umgebung der ausliefern soll. Dazu müssen wir die Datei /home/<user>/websites/trac.<host.com>/htdocs/index.fcgi editieren.

$ nano /home/<user>/websites/trac.<host.com>/htdocs/index.fcgi

Diese sieht so aus:

try:
    from trac.web import fcgi_frontend
    fcgi_frontend.run()
except SystemExit:
    raise
except Exception, e:
    print 'Content-Type: text/plain\r\n\r\n',
    print 'Oops...'
    print
    print 'Trac detected an internal error:'
    print
    print e
    print
    import traceback
    import StringIO
    tb = StringIO.StringIO()
    traceback.print_exc(file=tb)
    print tb.getvalue()

Wir interessieren uns für den oberen Teil, vor dem import-Statement. Wir importieren das Python-Modul os, um die Environment-Variable TRAC_ENV setzen zu können. Der obere Teil muss also so aussehen:

try:
    import os
    os.environ['TRAC_ENV'] = '/home/<user>/websites/trac.host.com/trac/'
    from trac.web import fcgi_frontend
    fcgi_frontend.run()
except SystemExit:
    raise
except Exception, e:
    print 'Content-Type: text/plain\r\n\r\n',
    print 'Oops...'
    print
    print 'Trac detected an internal error:'
    print
    print e
    print
    import traceback
    import StringIO
    tb = StringIO.StringIO()
    traceback.print_exc(file=tb)
    print tb.getvalue()
.htaccess

Neben der Anpassung der index.fcgi benötigen wir noch eine .htaccess-Datei um das Verhalten des Webservers zu beeinflussen.

$ nano /home/<user>/websites/trac.<host.com>/htdocs/.htaccess

Erstmal müssen wir dafür sorgen, dass CGIs ausgeführt werden. Außerdem sorgt dafür, dass alle Anfragen auf das Script index.fcgi laufen:

Options +ExecCGI

RewriteEngine On RewriteRule ^$ %{REQUEST_URI}index.fcgi [L] RewriteCond %{REQUEST_FILENAME} !\.(png|css|fcgi|txt|jpe?g|gif|pdf|svg)$ RewriteRule ^(.*)$ index.fcgi/$1 [L,QSA]

Nach diesen letzten Anpassungung können Sie erstmals Trac unter http://trac.host.com/ aufrufen. Als nächster Schritt folgt nun die Anpassung der frisch installierten Trac-Instanz, speziell die Einrichtung des Logins.

Trac konfigurieren

Login einrichten

Der letzte fehlende Punkt um Trac nutzen zu können, ist der fehlende Login. Trac authentifiziert normalerweise über HTTP Authentication. Allerdings wäre dafür eine spezielle Apache-Konfiguration notwendig, was wir aber vermeiden möchten. Deshalb verwenden wir das AccountManager-plugin.

Exkurs: Eigene Plugins installieren und verwenden

Um eigene Plugins installieren zu können, müssen wir die Direktive plugins_dir in der Sektion inherit in der conf/trac.ini anpassen:

$ nano /home/<user>/websites/trac.<host.com>/trac/conf/trac.ini

Nehmen wir an, dass wir Plugins nach /home/<user>/websites/trac.<host.com>/trac/plugins installieren wollen.

[inherit]
plugins_dir = /home/<user>/websites/trac.<host.com>/trac/plugins

Trac-Plugins werden mithilfe der Python Setuptools installiert. Damit das funktioniert, muss noch die Umgebungsvariable PYTHONPATH angepasst werden.

nano /home/<user>/.bashrc

Hier muss am Ende folgendes eingefügt werden:

PYTHONPATH=${PYTHONPATH}:/home/<user>/websites/trac.<host.com>/trac/plugins

Danach muss man sich aus und neu einloggen!

Danach können Plugins mit dem folgendem Kommando installiert werden:

easy_install --install-dir /home/<user>/websites/trac.<host.com>/trac/plugins <plugin>

Wobei <plugin> die URL des Plugins sein muss.

AccountManager-Plugin installieren

Mit folgendem Kommando wird das AccountManager-Plugin installiert.

easy_install --install-dir /home/<user>/websites/trac.<host.com>/trac/plugins/ <Repository des AccountManager-PlugIns>

Welchen Link Ihr zum Repository braucht, erfahrt ihr auf der Projektseite zum PlugIn. Im trunk des Repository erhaltet ihr immer die aktuellste Version, die sich in der Entwicklung befindet. Hierbei ist allerdings zu beachten, dass diese Version nicht unbedingt zu jedem Zeitpunkt funktioniert. Daher wir empfohlen, die letzte stabile Version zu nutzen.

AccountManager-Plugin konfigurieren

Um dass AccountManager-Plugin zu verwenden, muss es noch konfiguriert werden.

Als erstens müssen wir dem benutzer ein Passwort zuweisen. das machen wir damit indem wir eine Passwd-Date anlegen:

 /usr/sbin/htpasswd2 -c /home/<user>/websites/trac.<host.com>/users <user>

Jetzt öffnen wir die Trac-Konfigurationsdatei:

 nano /home/<user>/websites/trac.<host.com>/trac/conf/trac.ini

Danach muss folgendes muss daher an die Trac-Konfigurationsdatei angefügt werden:

[components]

Default-Login-Komponente deaktivieren

trac.web.auth.loginmodule = disabled

AccountManager Login-Komponente aktivieren

acct_mgr.web_ui.loginmodule = enabled

Passwörter werden im htpasswd-Format abgelegt

acct_mgr.htfile.htpasswdstore = enabled

Administrations-Seite aktivieren

acct_mgr.admin.accountmanageradminpage = enabled
[account-manager]

Passwörter liegen im htpasswd-Format vor

password_store = HtPasswdStore

Pfad zur htpasswd-Datei

password_file = /home/<user>/websites/trac.<host.com>/users

Danach sieht die Konfiguration folgendermaßen aus:

[components]
trac.web.auth.loginmodule = disabled
acct_mgr.web_ui.loginmodule = enabled
acct_mgr.htfile.htpasswdstore = enabled
acct_mgr.admin.accountmanageradminpage = enabled

[account-manager]
password_store = HtPasswdStore
password_file = /home/<user>/websites/trac.<host.com>/users

Nun kann man sich mit einem Benutzer anmelden, der in /home/<user>/websites/trac.<host.com>/users definiert ist, anmelden.

Um einen neuen benutzer anzulagen verwendet man:

/usr/sbin/htpasswd2 /home/<user>/websites/trac.<host.com>/users <new user>

Benutzer zum Administrator machen

Damit ein Benutzer zum Administrator wird, müssen er die Rolle TRAC_ADMIN haben. Dazu verwenden wir wieder das trac-admin Kommandozeilen-Werkzeug:

trac-admin /home/<user>/websites/trac.<host.com>/trac permission add <username> TRAC_ADMIN

Mail-Konfiguration

Trac versendet Emails über neue und geänderte Tickets. Damit das funktioniert, müssen in der notification-Sektion einige Einstellungen gemacht werden:

[notification]
smtp_port = 25
smtp_server = localhost
smtp_from = no-reply@trac.host.com
smtp_always_bcc = owner@project.com
smtp_enabled = true
smtp_replyto = email@trac.host.com

Die meisten der Optionen sind selbsterklärend, smtp_always_bcc sendet standardmäßig eine Benachrichtigung über jede Ticket-Änderung an eine Standard-Adresse. Dies ist z.B. hilfreich, wenn der Projektbesitzer alles mitbekommen möchte und sich der Ticket-Traffic in Grenzen hält.

HTTP-Authentication

Für einige Plugins und Zusatzfunktionen benötigt man HTTP-Authentication. Dazu muss das Plugin HttpAuthPlugin installiert werden. Unser Setup erlaubt zwar indirekt das Auswerten der passenden Header-Daten, diese kommen aber auf unüblichem Wege zum Trac. (Direkter Zugang zu den Headern ist bei CGI-Aufruf nicht vorgesehen.)

Eine Lösung ist hier beschrieben: http://trac-hacks.org/ticket/1169#comment:14

VCS Integration

Subversion

siehe Subversion