Trac
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