Wie bereits angekündigt folgt nun die Beschreibung der Installation von Trac 0.10.4 unter OpenSUSE 10.1. Es hat gute zwei Tage gedauert, das Teil ans Laufen zu bekommen, aber nun funktioniert alles wunderbar (inkl. LDAP-Authentifizierung). Version 0.11 habe ich aber leider nicht installieren können, was mehrere Gründe hat (z.B. fehlende 64Bit-Pakete etc.).
Python und mod_python installieren
Zunächst einmal galt es Python und das Apache-Modul mod_python zu installieren, da ich Trac als VirtualHost in meiner vorhandenen Apache-Installation laufen lassen möchte, und nicht als eigenständigen Server. Nach einigem Hin und Her habe ich mich entschieden, die Pakete selbst zu kompilieren (alle Versuche mit vorkompilierten Paketen schlugen aus den unterschiedlichsten Gründen fehl). Also zunächst mal die Quellen besorgen: Python Sources (ich verwende Version 2.5.1), mod_python Sources (ich verwende Version 3.3.1).
Nach einigen Problem beim Kompilieren bin ich auf diesen sehr guten Artikel zum Thema gestoßen: Compiling mod_python on RHEL 64 bit. Dort ist z.B. die Behebung des Fehlers
/usr/local/lib/python2.5/config/libpython2.5.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
beschrieben. Im Weiteren bin ich der dortigen Anleitung gefolgt und alles hat wie beschrieben funktioniert.
ClearSilver installieren
Als nächstes habe ich ClearSilver installiert. Auch dieses Paket habe ich manuell kompiliert: ClearSilver Sources (ich verwende Version 0.10.5).
Der configure-Befehl dazu sieht so aus:
./configure --with-python=/usr/local/bin/python --prefix=/opt/clearsilver-0.10.5 --disable-ruby --disable-java --disable-perl --disable-apache --disable-csharp --disable-compression
Das --disable-compression behebt den später beim Aufruf von Trac aufgetretenen Fehler: neo_cgi.so: undefined symbol: deflate
SQLite und PySQLite installieren
Auch SQLite und PySQLite habe ich selbst kompiliert. Die Sourcen gibt es hier: SQLite Sources (ich verwende Version 3.5.3), PySQLite Sources (ich verwende Version xxx).
Der configure-Befehl für SQLite sieht (einer Empfehlung von der Trac-Seite zufolge) so aus:
./configure --enable-threadsafe --prefix=/opt/sqlite
Die Lösung des dabei aufgetretenen Fehlers (sqlite3.h: No such file or directory) kann man hier nachlesen: installing “pysqlite” (include_dirs in der setup.cfg anpassen).
Für die Installation von PySQLite gibt es eine gute Anleitung auf der eigenen Seite: Installationsanleitung PySQLite. Die habe ich Schritt für Schritt durchgearbeitet und letztlich hat alles geklappt. Der einzige Fehler war der folgende:
ImportError: /usr/local/lib/python2.5/site-packages/pysqlite2/_sqlite.so: undefined symbol: sqlite3_enable_shared_cache
Dieser ließ sich jedoch wie hier beschrieben beheben: [pysqlite] Getting Error: undefined symbol: sqlite3_enable_shared_cache
Ich habe den entsprechenden Inlcude-Path (/opt/sqlite-3.5.3/lib) in die /etc/ld.so.conf eingetragen und es läuft.
Subversion installieren
Auch Subversion habe ich selbst kompiliert. Die Sourcen gibt es hier: Subversion Sources (ich verwende Version 1.4.5). Wichtig ist, auch das Paket subversion-deps-1.4.5.tar.bz2 herunterzuladen und in das Verzeichnis der Subversion-Quellen zu entpacken, da sonst einige Abhängigkeiten nicht aufgelöst werden können (Fehler: subversion cannot find -lldap).
Ein weiterer Fehler war der folgende:
libneon.a: could not read symbols: Bad value
Dieser ließ sich jedoch leicht wie hier beschrieben beheben: make error: libneon.a: could not read symbols: Bad value (neon separat kompilieren).
SWIG 1.3.27 installieren
Zusätzlich zu Subversion werden noch die Python-Bindings SWIG benötigt. Die Trac-Website rät zu Version 1.3.27 (mit höheren habe ich es daher erst gar nicht probiert): SWIG Sources.
Nachdem SWIG kompiliert wurde, muss noch im Subversion-Quellenverzeichnis ein make swig-py; make install-swig-py ausgeführt werden (wie auf der Trac-Seite beschrieben).
Trac installieren
Die Installation von Trac verlief vergleichsweise einfach: Die Sourcen downloaden (Trac Sources) und mittels python ./setup.py install installieren (wie auf der Trac-Seite beschrieben).
Beim Aufruf von trac-admin /srv/www/trac initenv kam dann allerdings die folgende Fehlermeldung:
Failed to create environment. database parameter must be string or APSW Connection object
Dies ist wohl ein Bug von PySQLite, der sich durch folgenden Patch beheben ließ: PySqlite 2.4.0 doesn’t accept an unicode object for the connection string anymore.
Nachdem ich die 4 Zeilen im Quelltext geändert hatte, konnte ich Trac installieren und es läuft (bisher) ohne Probleme.
LDAP-Authentifizierung
Die LDAP-Authentifizierung der Trac-Benutzer habe ich anhand der Anleitung auf der Trac-Seite (Configuring Authentication) unter Zuhilfenahme dieser wirklich guten Beschreibung umgesetzt: Apache and Subversion authentication with Microsoft Active Directory
Syntax-Highlighting
Anhand dieser Anleitung habe ich Trac dann abschließend noch das farbige Auszeichnen von C#-Quelltexten beigebracht: Csharp.st. Und die Datei habe ich dann gleich als Vorlage für eine Syntax-Highlighting-Definition für Natural-Sourcecode verwendet, die im Folgenden dargestellt ist. Damit kann man nun mittels enscript Natural-Quellen auszeichnen.
/*
* States definitions file for Natural.
* Author: Stefan Macke (me@this-domain)
*/
state natural extends HighlightEntry
{
/* Comments. */
/\/\*/ {
comment_face (true);
language_print ($0);
call(eat_one_line);
comment_face (false);
}
/^\*/ {
comment_face (true);
language_print ($0);
call (eat_one_line);
comment_face (false);
}
/* Escaped strings */
/\@\"[^"]+\"/ {
string_face(true);
language_print($0);
string_face(false);
}
/* String constants. */
/\"/ {
string_face (true);
language_print ($0);
call (c_string);
string_face (false);
}
/'[^']+'/ {
string_face (true);
language_print ($0);
string_face (false);
}
/* Character constants. */
/'.'|'\\\\.'/ {
string_face (true);
language_print ($0);
string_face (false);
}
/* Keywords */
/\b(REDEFINE|DATA|USING|END-DEFINE|INCLUDE|END-READ|END-FIND|END-SUBROUTINE|END-IF|IF|DEFINE|LOCAL|END-WORK|WORK FILE|CLOSE WORK|BREAK|CONTINUE|END|CONTROL|FOR|CALLNAT|PERFORM|END-DECIDE|DECIDE|PARAMETER|GLOBAL|TRUE|FALSE|LT|GT|EQ|LE|GE|NE|SUBROUTINE|BY|STARTING FROM|WITH|TOP|BOTTOM|TO|FROM|(AD=MI)|(AD=IO)|OR|AND|(SV15)|(0)|LS|IN|FULL|GIVING INDEX|REJECT|KEY|ALL|ON|FIRST|VALUE|OF|NONE|IGNORE|READ|FIND|ESCAPE|SET|WRITE|INPUT|ADD|SUBTRACT|DISPLAY|FORMAT|RESET|ASSIGN|EXAMINE|COMPUTE|VAL|BACKOUT|TRANSACTION|STORE|UPDATE|DELETE|WORK|VARIABLE|COMPRESS|MOVE|EDITED|INTO|LEAVING|NO|VIEW)\b/ {
keyword_face (true);
language_print ($0);
keyword_face (false);
}
}
/*
Local variables:
mode: c
End:
*/