| Software Liste | Dokumentationen | Demos | Artikel |
Trac mit SVN
Nun haben wir SVN am Laufen: Unsere Anwender können Code auschecken, unsere Entwickler auch noch einchecken, die Repositories können per Web eingesehen werden – was wollen wir mehr? Klar doch, ein nettes Projekt-Management! Mit Trac gibt es da etwas feines, was wir uns näher ansehen sollten.
Interessiert? Dann schauen wir mal, dass wir das auch noch installiert und angepasst bekommen. Ein paar PlugIns packen wir auch gleich noch drauf – wenn schon, denn schon. Und natürlich bringen wir auch unsere Projekte wieder automatisiert auf Trab – wie wir das bereits bei SVN gemacht haben. Folgendes steht uns dann schließlich für jedes Projekt u. a. zur Verfügung:
- Ein Wiki u. a. für Dokumentation
- Eine Timeline (um interessierten Anwendern zu zeigen, was gerade abgeht)
- Eine Roadmap (was eigentlich abgehen soll)
- Eine weitere Möglichkeit, unsere SVN Repositories per Web-Browser zu betrachten
- Ein Ticket-System, um unsere Bugs und "Feature-Requests" zu verfolgen
- Zu guter letzt auch noch ein PlugIn, um das alles bequem per Web-Browser zu administrieren – ohne jedesmal nach den passenden Dateien zu suchen
Das soll nur eine grobe Übersicht geben. Alles im Einzelnen zu erklären, würde dieses Dokument sprengen …
Inhalt
- Software installieren
- Projekte initialisieren
- Troubleshooting
- Benutzte Skripte
- Nützliche Trac Ressourcen
Software installieren
War ja wieder einmal klar: Software muss zunächst installiert werden. Wie üblich, gibt es die aktuelle Trac-Version natürlich auch nicht als fertiges Paket - aber auch damit werden wir locker fertig. Die Abhängigkeiten lassen sich nun aber leichter erfüllen als seinerzeit mit der Vorgängerversion.
Voraussetzungen
- Ubuntu (zum Zeitpunkt dieses Artikels: 8.04 Hardy Heron)
- Apache2 (aus den Standard-Repositories)
- ModWSGI (z. B. aus den IzzySoft Repositories, s. u.)
- Python2.5, python-support, python-clearsilver, python-pysqlite2, python-subversion, python-imaging aus den Standard-Repositories
- Genshi (via python-support)
- Trac (aus dem SVN)
Installation
Als Webserver setzen wir wieder auf den Apachen,
verwenden aber aus Performance-Gründen statt mod_python lieber
mod_wsgi. Dies findet sich u. a. im Repository von
IzzySoft (für Hardy Heron; mittlerweile aber sicher
auch in den offiziellen Repos), eine Installation ist daher einfach mit
apt-get install apache2-mod-wsgi möglich.
Ubuntu und Apache wird hier als bereits installiert und konfiguriert vorausgesetzt, ModWSGI haben wir im vorigen Absatz abgehandelt – kümmern wir uns also um die anderen Abhängigkeiten:
#!/bin/bash # Trac Installation. Adapt this to your needs before running # Install dependencies sudo apt-get install python2.5 python-support python-clearsilver python-pysqlite2 python-subversion python-imaging sudo easy_install Genshi # this one needs the Repo of IzzySoft (http://apt.izzysoft.de/) sudo apt-get install apache2-mod-wsgi # some directory to place sources in - you may chose any cd /usr/local/src # checkout the latest stable Trac from SVN svn co http://svn.edgewall.org/repos/trac/branches/0.11-stable trac11-stable cd trac11-stable # obtain and apply a patch for better table-header formatting ( ||= HeaderCol1 =||= HeaderCol2 =|| ) wget http://trac.edgewall.org/raw-attachment/ticket/3347/3347_TableHeaders_NicerFormat.diff patch -p0 -i 3347_TableHeaders_NicerFormat.diff # and finally install Trac sudo easy_install . |
Apache konfigurieren
Als nächstes konfigurieren wir den Apachen. Hier brauchen wir einen zusätzlichen Block für unsere Trac Installation. Dieser kann entweder in die globale Konfiguration oder aber in einen virtuellen Server eingefügt werden - je nach Bedarf – und eine detaillierte Beschreibung findet sich here. Wir gehen nun davon aus, dass wir mehrere Trac-Instanzen (je eine pro Projekt) nutzen wollen (für die andere Varianten bitte an erwähnter Stelle nachlesen).
WSGIScriptAlias /trac /usr/local/trac-apache/trac.wsgi
<Directory /usr/local/trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
# <Location "/trac/*/login">
# AuthType Basic
# AuthName "Trac Repositories"
# AuthUserFile /etc/apache2/.trac
# Require valid-user
# </Location>
Ein Teil der Konfiguration ist absichtlich auskommentiert: Die Authentifizierung erledigen wir wieder über das AccountManager PlugIn, weshalb wir das hier eigentlich gar nicht brauchen. Kann aber nicht schaden, es für den Fall des Falles parat zu haben, und einfach aktivieren zu können.
Nun brauchen wir noch das als WSGIScriptAlias angegebene Skript an der ebenfalls angegebenen Stelle:
import sys
sys.stdout = sys.stderr
import os
os.environ['TRAC_ENV_PARENT_DIR'] = '/usr/local/trac'
os.environ['PYTHON_EGG_CACHE'] = '/usr/local/trac/.egg-cache'
import trac.web.main
application = trac.web.main.dispatch_request
PlugIns installieren
Wir können den Hals halt nicht voll genug kriegen – also erweitern wir unsere Installation schon, bevor wir sie überhaupt angeschaut haben … Bei den PlugIns ist hier darauf zu achten, dass sie zur installierten Trac Version passen müssen. Wir haben hier eine v0.11.x – also wählen wir auch die passenden PlugIns aus. Dank "Easy Install" geht die Installation auch recht flott über die Bühne. Wer das eine oder andere PlugIn nicht mag: Einfach auskommentieren bzw. überspringen. Auf jeden Fall installiert werden sollten jedoch: AccountManager und WebAdmin. Letzterer ist zwar bereits in Trac 0.11 integriert, wird aber von einigen Plugins nach wie vor als Abhängigkeit gefordert.
#!/bin/bash # Install some useful Trac plugins (simply comment out those you don't want) # # The WebAdmin (is already integrated in 0.11+ - but some plugins need it) easy_install http://svn.edgewall.com/repos/trac/sandbox/webadmin/ # The AccountManager easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk/ # Not good enough? Make it nicer? easy_install http://trac-hacks.org/svn/usermanagerplugin/0.11/ # IniAdmin easy_install http://trac-hacks.org/svn/iniadminplugin/0.11/ # And we HATE SPAMMERS! easy_install http://svn.edgewall.com/repos/trac/sandbox/spam-filter/ # MediaWikiPluginMacro - turn your wiki to support MediaWiki syntax easy_install http://trac-hacks.org/svn/mediawikipluginmacro/ # TOC PlugIn (auto-generate table of contents) easy_install http://trac-hacks.org/svn/tocmacro/0.11/ # Acronyms support for the Wiki easy_install http://trac-hacks.org/svn/acronymsplugin/0.11/ # If you want to include external pages into your Wiki [Include(http://www.domain.com/page)] easy_install http://trac-hacks.org/svn/includemacro/0.11/ # MultiLang support - and nicer indexes (yes, it is 0.10 - but works on 0.11) easy_install http://trac-hacks.org/svn/tracwikinegotiatorplugin/0.10/ # TicketDelete PlugIn (get rid of spam tickets) easy_install http://trac-hacks.org/svn/ticketdeleteplugin/0.11/ # TracWysiwygPlugin - for better Wiki editing easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.11/ # Graphical Statistics Plugin easy_install http://trac-hacks.org/svn/stractisticsplugin/0.10/tags/0.4.2/ # Tags PlugIn (needed for ScreenshotsPlugin - and either useful itself) easy_install http://trac-hacks.org/svn/tagsplugin/trunk/ # ScreenshotsPlugin - Maintain and use screenshots easy_install http://trac-hacks.org/svn/screenshotsplugin/0.11/ # TracDownloaderPlugin to manage Downloads easy_install http://trac-hacks.org/svn/tracdownloaderplugin/0.11/ # Now, having quite a bunch of PlugIns installed, you may need to cleanup your navbar: easy_install http://trac-hacks.org/svn/navcontrolplugin/0.11/ |
Damit wäre das globale Setup beendet, und nur mal so zum Spaß lassen wir es krachen, indem wir dem Apachen einen Schuss verpassen (ja, das muss sein):
/etc/init.d/apache2 restart
Einige PlugIns erfordern nach ihrer Installation (bzw. Aktivierung für ein Projekt) ein Upgrade der betreffenden Projekte - siehe unten.
Mehr PlugIns gefällig? Die längsten Listings finden sich hier:
Spamschutz
Spam in der Mailbox ist mittlerweile alltäglich. Aber die "bösen Jungs" haben
längst auch Foren u.ä. im Visier – also kann es früher oder später auch unsere
Trac-Installation erwischen. Dagegen können wir uns zum einen mit dem
SpamFilter Plugin (siehe PlugIns) schützen. Der muss dann aber
auch für jedes Projekt explizit konfiguriert werden. Etwas einfacher geht es,
sofern Apache mit mod_security installiert ist. In diesem Fall kann uns
bereits einiges an Arbeit abgenommen werden – indem bereits der Webserver
einiges ausfiltert. Eine Beispiel-Konfiguration findet sich unter
Skripte. Hier muss auf jeden Fall noch die URI in jeder Regel
angepasst werden – sofern sie von /trac/<Projektname>/ abweicht.
Leider reicht diese Lösung heutzutage nicht mehr – daher sei das Spam-Filter Plugin wärmstens empfohlen. Auch wenn es zunächst einiger Konfiguration bedarf: Spätestens wenn die ersten Spammer die neue Trac-Installation entdeckt haben, bedauert man diesen Aufwand keinesfalls mehr!
Projekte initialisieren
Trac personalisieren
Wer neben vielen anderen Plugins auch das NavControl PlugIn installiert hat, kann die überladene Haupt-Navigation damit ein wenig aufräumen, und "überflüssige" bzw. "unpassende" Elemente entweder verbergen, oder in die Kontext-Navigation verschieben.
Projekt Defaults definieren
Jetzt wollen wir das Skript vorbereiten, mit dem wir schließlich unsere Projekte in Trac anlegen. Also selbiges bitte herunterladen, und mit dem Lieblings-Editor öffnen. Der wichtigste Teil für uns findet sich am Anfang der Datei, im Abschnitt "Configuration". Die meisten Einstellungen (Pfade etc.) sollten bereits korrekt sein, sofern die bisherige Installation gemäß diesem kleinen Tutorial durchgeführt wurde - es sind also nur noch "Kleinigkeiten" anzupassen:
Die HomePage sollte natürlich die eigene Website sein - und muss
ohne Protokoll (also kein "http://" am Anfang) angegeben werden. Da diese Variable
in einem regulären Ausdruck verwendet wird, müssen einige Zeichen "escaped"
werden. Für http://server.example.com/my/projects sähe das dann z.B.
so aus: HomePage="server.example.com\/my\/projects".
admin bezeichnet den Web-User mit vollem Zugriff auf die Projekte. Es muss
kein gleichnamiger Account im Betriebssystem vorhanden sein - aber der User
muss in der oben definierten htpassword Datei vorhanden sein.
Nebenbei ist dies der Ort, an dem (projektübergreifend) alle User und ihre
Passworte abgelegt/verwaltet werden - während ihre Zugriffsrechte
projektgebunden über das WebAdmin Web-Interface gepflegt
werden.
projects ist eine mit Leerzeichen getrennte Auflistung der Projekte, die in
Trac eingerichtet werden sollen – jedes Projekt ein Wort (d. h. Projektnamen
dürfen z.B. hier keine Leerzeichen enthalten - was aber später per WebAdmin
jederzeit angepasst werden kann). Groß- und Kleinbuchstaben können gEMiSchT
werden (für die Anzeige) – für Verzeichnisnamen etc. wird alles automatisch in
Kleinbuchstaben umgewandelt. Die SVN Repositories werden im Verzeichnis
RepoParentPath/project (Projektname in Kleinbuchstaben) erwartet, und die
zugehörigen Trac Repositories in TracEnvParentDir/project (Projektname
wiederum in Kleinbuchstaben) angelegt.
WikiReplace und ForumCreate sollten hier deaktiviert werden (zumindest
ersteres) – die Manipulation der Wiki-Seiten und Templates können wir uns Dank
des TracWikiNegotiatorPlugins sparen.
Im Grunde genommen war's das dann auch. Wer möchte, kann das Skript natürlich
noch beliebig Anpassen bzw. Verfeinern - z.B. was die Zugriffsrechte (function
set_perms) oder die per Default aktivierten PlugIns (function conf_activate)
betrifft.
Das Skript starten
Nachdem die Vorbereitungen alle (hoffentlich erfolgreich) abgeschlossen wurden, kann das Skript nunmehr gestartet werden. Parameter erwartet es keine – wichtig ist nur, dass auch die zugehörigen Dateien im richtigen (i. d. R. also im gleichen) Verzeichnis liegen.
Abschließende Projekt-Konfiguration
Nachdem das Skript erfolgreich durchgelaufen ist, können die Projekte nunmehr abschließend konfiguriert werden. Dazu nehmen wir uns einen Web-Browser, gehen auf die Projektseite, melden uns als Administrator an, und wählen den "Admin" Tab aus. Zuerst konzentrieren wir uns auf die Abschnitte "General::Basic Settings" und "trac.ini::notification" (SMTP Einstellungen) – also die Sachen, wo auf jeden Fall noch Anpassungen nötig sind.
Noch ein paar weitere Einstellungen, die sicher angepasst werden sollen, finden sich in der Sektion "Ticket System": "Components" (Komponenten – also z.B. die Benutzer-Schnittstelle, Konfiguration, einzelne Module der Software), "Milestones" (Meilensteine – z.B. geplante wichtige Releases) und "Versions" (Versionen) wären da zu nennen (wobei man letztere sicher zugunsten der Milestones gleich ganz abschaltet) – die anderen drei Elemente sollten in den meisten Fällen passen. Dann will man vielleicht auch noch das Logging (zu finden unter "General::Logging") aktivieren: Einfach als "Type" File auswählen, und den "Log Level" nicht unbedingt auf "DEBUG" belassen.
Dann schauen wir uns noch ein wenig um, was noch alles konfiguriert werden kann – vielleicht noch ein paar PlugIns aktivieren? Abschließend zur Sicherheit noch einmal den WebServer neu starten – zumindest bei Änderungen am Logging ist dies leider erforderlich.
Wenn wir schon einmal hier sind, sollten wir auch gleich auf den "Settings" Link (oberhalb der "Navigation Bar") klicken, und Namen sowie EMail Adresse eintragen - damit wir auch Benachrichtigungen empfangen können.
Troubleshooting
Internal Server Error
Das passiert ab und an – kein Grund zur Panik. Und ja nicht behaupten, man hätte doch gar nix gemacht – hat man mit Sicherheit! Also, was tun? Zuerst schauen wir ins ErrorLog des Web-Servers. Höchstwahrscheinlich finden wir hier am Ende einen Eintrag wie
PythonHandler trac.web.modpython_frontend: TracError: The Trac Environment needs to be upgraded. Run trac-admin /usr/local/trac/project upgrade", referer: http://server.example.com/trac/project/
Der Grund ist in den meisten Fällen, dass man ein neues PlugIn installiert bzw.
im entsprechenden Projekt aktiviert hat. Was zu tun ist, hat die Fehlermeldung
uns ja netterweise bereits verraten: trac-admin /usr/local/trac/project
upgrade.
Der Eintrag im ErrorLog könnte natürlich auch anders aussehen – vielleicht so:
PythonHandler trac.web.modpython_frontend: IOError: zipimport: can not open file /usr/lib/python2.4/site-packages/TracProjectMenu-1.0-py2.4.egg, referer: http://server.example.com/trac/project/settings
Tja, das ist gaaanz was anderes – nämlich das genaue Gegenteil: Ein global
installiertes PlugIn wurde einfach mal eben entfernt. Wer macht denn sowas?!?
Nungut, was ist zu tun? Zunächst einmal gilt es, die trac.ini aller Projekte
zu inspizieren, ob das PlugIn dort noch aktiviert ist. Ist dem so, muss die
entsprechende Zeile aus der [components] Sektion entfernt werden. Anschließend
ist der Webserver neu zu starten: /etc/init.d/apache restart. Was übrigens
auch dann eine gute Idee ist, wenn man keinen anderen Fehler finden kann. Echt.
[text] Einen haben wir noch:
PythonHandler trac.web.modpython_frontend: IOError: [Errno 13] Permission denied: u'/usr/local/trac/project/log/trac.log'
Das passiert z.B. dann, wenn man (als root) trac-admin <Pfad> permission add
… zu einem Zeitpunkt laufen lässt, zu dem für das betreffende Projekt noch
kein Logfile existiert. Das wird dann u. U. angelegt (nämlich dann, wenn man
gerade zuvor das Logging für das Projekt aktiviert hat) – und zwar im Kontext
des aufrufenden Benutzers. Das wäre in diesem Fall root. Der User, unter dem
Trac eigentlich läuft (i. d. R. www-data), kann dann nicht mehr schreibend
darauf zugreifen.
Beheben lässt sich das ganz einfach: chmod -R www-data:www-data
/usr/share/trac. Wer weiß, wo noch was liegt – und schließlich sollte alles
unterhalb von /usr/share/trac dem Trac gehören. Wer will, kann daher auch
gleich einen Cron-Job dafür einrichten, damit sich dieses Problem täglich von
selbst löst … Achja: Diesmal ist ausnahmsweise einmal kein Neustart des
Apachen nötig.
Globale PlugIns entfernen
Das globale Installieren eines PlugIns ist dank easy_install ja wirklich
einfach. Nur leider hat der Hersteller hier wohl ein easy_uninstall
vergessen. Wie ist das also nun zu bewerkstelligen? Jaja, schongut:
Um keinen internal server error zu provozieren, stellen wir
zunächst sicher, dass das betreffende PlugIn auch in keinem Projekt mehr aktiv
ist. Solange wir ihn noch nicht entfernt haben, können wir dies mit Hilfe des
WebAdmin PlugIns bewerkstelligen. Andernfalls bzw. alternativ
bleibt uns noch die oben beschriebene Methode über die
trac.ini.
Alles klar soweit? Dann wenden wir uns dem Verzeichnis
/usr/lib/python2.4/site-packages zu – natürlich wieder einmal als root. Hier
suchen wir nach einer Datei namens easy-install.pth. In selbige schauen wir
zunächst hinein, um den Dateinamen unseres Oster-Eis (*.egg) – hoppla,
PlugIns, zu finden. Diese Datei wird gelöscht, und ihr Eintrag in der
easy-install.pth ebenso.
Ebenfalls nachschauen sollte man noch im Cache von Python. Dieser ist entweder
im Home-Verzeichnis des Users zu finden, unter dem der Apache läuft - oder aber
dort, wo er in der Apache Konfiguration mit SetEnv PYTHON_EGG_CACHE
<directory> festgelegt wurde. Findet sich dort ein zum fraglichen Plugin
gehörendes Verzeichnis, so kann es einfach gelöscht werden. Achja, und nicht
vergessen, den Web-Server neu zu starten - sonst gibt's u.U. gleich wieder
einen internal server error …
Benutzte Skripte
Initialisieren der Trac Umgebung
#!/bin/bash ############################################################################### # Setting up Trac projects (c) 2007 by Izzy and IzzySoft #------------------------------------------------------------------------------ # This script will help you to setup your trac projects without having to type # too much (or to fiddle around with the commands and their syntax). Check the # [ Configuration ] section first and adapt it to your settings and needs. You # may (or may not) want to change the permissions (found in function set_perms) # and/or the default configuration (in function conf_activate). Moreover, you # for sure want to check the default wiki pages in the tracwiki.tgz (in case # you don't want to stay with the default wikis shipped with trac). If you # don't want to have all the help wikis in each project, you can take this # replacement: Instead of installing them all everywhere, it replaces the links # in the templates to point to the trac project wiki directly. ############################################################################### #==========================================================[ Configuration ]=== # Where the trac shared files are TracShared=/usr/share/trac # Base directory for your Trac repositories TracEnvParentDir=/usr/local/trac # Where to link the logos to. Remember to escape slashes ("/" must be "\/") HomePage="www.example.com" # Who will be the admin (full access permissions) for the projects? admin=john # Space separated list of projects to establish. For path names etc., these will # be converted to lowercase. For display, they will be used as-is. Each project # name must be a single word projects="MyProject OtherProject" # DB to use for Trac DBFile="db/trac.db" TracDB="sqlite:$DBFile" # Repository Type RepoType=svn # Base Repository for your SVN repositories. Project name (lowercase) will be # added here, and the result should be the projects SVN Repo Path RepoParentPath=/usr/local/svn/public # Default Template path TracTemplatePath=$TracShared/templates # Replace default wiki pages by those from tracwiki.tgz ? WikiReplace=1 # Create default forums ("Help" and "Common Discussion")? You can change the # forums/descriptions in "function forum" below. ForumCreate=1 #-----------------------------------------------------------------[ Colors ]--- red='\e[0;31m' blue='\e[0;34m' NC='\e[0m' # No Color #==============================================================[ Functions ]=== #-------------------------------------------------------=[ Progress Output ]=-- function say { echo -e "${blue}$1${NC}" } function alert { echo -e "${red}$1${NC}" } #--------------------------------------------=[ Replace default Wiki pages ]=-- function wiki_default { if [ -e $TracShared/wiki-default.ori ]; then say "Looks like the default wiki pages already have been replaced - skipping this step." else say "Replacing default wiki pages..." mv $TracShared/wiki-default $TracShared/wiki-default.ori cp $TracShared/templates $TracShared/templates.ori mkdir $TracShared/wiki-default tar xzf tracwiki.tgz -C "$TracShared" fi } #-------------------------------------------------=[ Activate some PlugIns ]=-- function conf_activate { local project="$1" say "Updating trac.ini ..." local conffile=${TracEnvParentDir}/$project/conf/trac.ini cp $conffile ${conffile}.$$ cat ${conffile}.$$|sed "s/example\.org/$HomePage/g">${conffile} cat <<EndConf >>$conffile [components] acct_mgr.admin.accountmanageradminpage = enabled acct_mgr.api.accountmanager = enabled acct_mgr.htfile.htpasswdstore = enabled acct_mgr.web_ui.accountmodule = enabled acct_mgr.web_ui.loginmodule = enabled acct_mgr.web_ui.registrationmodule = enabled iniadmin.iniadmin.iniadminplugin = enabled trac.web.auth.loginmodule = disabled tracdiscussion.admin.discussionwebadmin = enabled tracdiscussion.core.discussioncore = enabled tracdiscussion.init.discussioninit = enabled tracdiscussion.search.discussionsearch = enabled tracdiscussion.wiki.discussionwiki = enabled tracemoticons.emoticonssupport = enabled webadmin.* = enabled [account-manager] password_file = /etc/httpd/.trac password_format = htpasswd EndConf } #-----------------------------------------------------=[ SetUp Permissions ]=-- function set_perms { local project="$1" say "Setting permissions ..." # The big boss aka admin trac-admin ${TracEnvParentDir}/${project} permission add ${admin} TRAC_ADMIN # SVN Repo trac-admin ${TracEnvParentDir}/${project} permission add visitor BROWSER_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor LOG_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor FILE_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor CHANGESET_VIEW # Tickets, MileStones, etc.: trac-admin ${TracEnvParentDir}/${project} permission add visitor TICKET_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor MILESTONE_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor ROADMAP_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor WIKI_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor TIMELINE_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor SEARCH_VIEW trac-admin ${TracEnvParentDir}/${project} permission add visitor REPORT_VIEW # Users who registered with our site get additional permissions: trac-admin ${TracEnvParentDir}/${project} permission add authenticated TICKET_CREATE trac-admin ${TracEnvParentDir}/${project} permission add authenticated TICKET_APPEND # Next comes a group for our testers, who inherit all from the r/o group: trac-admin ${TracEnvParentDir}/${project} permission add tester visitor trac-admin ${TracEnvParentDir}/${project} permission add tester WIKI_CREATE trac-admin ${TracEnvParentDir}/${project} permission add tester WIKI_MODIFY # Now for our developers (inheriting all from testers) trac-admin ${TracEnvParentDir}/${project} permission add developer tester trac-admin ${TracEnvParentDir}/${project} permission add developer TICKET_MODIFY # Forum trac-admin ${TracEnvParentDir}/${project} permission add visitor DISCUSSION_VIEW trac-admin ${TracEnvParentDir}/${project} permission add authenticated DISCUSSION_APPEND trac-admin ${TracEnvParentDir}/${project} permission add tester DISCUSSION_APPEND # Rewrite permissions for anonymous (not-logged-in) users trac-admin ${TracEnvParentDir}/${project} permission remove anonymous '*' trac-admin ${TracEnvParentDir}/${project} permission add anonymous visitor } #---------------------------------------------------------[ Forum creation ]--- function forum { local db=$1/$DBFile local project=$2 local now=`date +%s` say "Creating forums for $project in database $db..." # forum(id,name,create_timestamp,forum_group,author,moderators,subject,description) # Since no forum_group exists, leave that column to 0. sqlite3 $db <<EndSQL INSERT INTO forum VALUES(1,'Help',$now,0,'$admin','$admin','Help with $project','If you have problems with $project and need help, this is the right place to ask for'); INSERT INTO forum VALUES(2,'Common Discussion',$now,0,'$admin','$admin','All about $project','Feature requests, recent development...'); EndSQL } #====================================================[ Initialize projects ]=== [ $WikiReplace -eq 1 ] && wiki_default for pname in $projects; do say "Initializing Environment for $pname ..." proj=`echo $pname|tr [:upper:] [:lower:]` trac-admin $TracEnvParentDir/$proj initenv $pname $TracDB $RepoType $RepoParentPath/$proj $TracTemplatePath chown -R www-data:www-data $TracEnvParentDir/$proj conf_activate $proj set_perms $proj say "Upgrading environment..." trac-admin ${TracEnvParentDir}/$proj upgrade [ $ForumCreate -eq 1 ] && forum $TracEnvParentDir/$proj $pname done |
Spamschutz mit mod_security
############################################################################### # Protect TRAC against spammers # Track rules have id:7701xx # idea taken from http://madwifi.org/wiki/FightingTracSpam (where some comments # also refer to - e.g. "spam type x") ############################################################################### #==================================================================[ Rules ]=== #--------------------------------------------------------------[ Whitelist ]--- # allow all POST requests that are not directed to one of the handlers we take # into account below SecFilterSelective REQUEST_URI "!(/trac/.+/(wiki|newticket|ticket).*$)" "nolog,allow,id:770100" #---------------------------------------------[ Spam Type 1: #preview spam ]--- # block POSTs to /ticket/<number>#preview and /newticket#preview SecFilterSelective REQUEST_URI "^/trac/.+/(newticket|ticket/[0-9]+).*\#preview" "id:770101" #--------------------------------------------[ Spam Type 2: no cookie spam ]--- # block POSTs to /wiki, /ticket and /newticket from users who don't have a trac # cookie # # CAUTION: these rules likely cause false positives, as some users tend to turn # off cookie support in their browser. Don't activate them unless you're sure # that this won't offend your visitors, or at least warn visitors. #SecFilterSelective REQUEST_URI "^/trac/.+/(wiki/|newticket|ticket/).*$" "chain,id:770102" #SecFilterSelective HTTP_COOKIE "!(trac_auth|trac_session)" #---------------------------------------[ Spam Type 3: html processor spam ]--- # don't accept usage of HTML processor in tickets / ticket comments SecFilterSelective REQUEST_URI "^/trac/.+/(newticket|ticket/).*$" "chain,id:770103" SecFilterSelective "ARG_description|ARG_comment" "#!html" #-----------------------------------------------[ Spam Type 4: markup spam ]--- # block new ticket and ticket comment POSTs if they contain more than one URL SecFilterSelective "REQUEST_URI" "^/trac/.+/(newticket|ticket/).*$" "chain,id:770104" SecFilterSelective "ARGS" "http\:/.*http\:/" #--------------------------------------------------[ Spam Type 5: LED spam ]--- # block LED spammer; his spam is not blocked by the previous rule, since he only # includes only one URL to the spamvertised website last but not least SecFilterSelective REQUEST_URI "^/trac/.+/(newticket|ticket/).*$" "chain,id:770105" SecFilterSelective "ARG_description|ARG_comment" "www.tideled.com" #-------------------------------[ Spam Type 6: attachment description spam ]--- # block tickets or comments with an http://-URL in it, if user is not properly # authenticated; throw a 403 that allows to present users with a custom error # page which explains what is going on (see below) # this rule is used on tickets as well as attachment descriptions and therefore # also catches spam type 6 # Since this prevents all not-logged-in users from refering to any URL (even # if it is pointing to something needed in the context), you may want to # disable this rule #SecFilterSelective "REQUEST_URI" "/trac/.+/(newticket|ticket/|attachment/).*$" "chain,id:770106" #SecFilterSelective HTTP_COOKIE "!trac_auth" chain #SecFilterSelective HTTP_Authorization "!Basic" chain #SecFilterSelective "ARGS" "(http|https):/" "deny,log,status:403" #==============================================[ Customized Error Messages ]=== # See the article on http://madwifi.org/wiki/FightingTracSpam for more details #----------------------------------[ Error 402: "You have to pay for ads!" ]--- # Apache allows to present users with customized error pages, and we can make # use of that feature to let spammers know what we think of 'em. Tell Apache # what file to use as error page for 402, and let it know that requests to this # file should not be handled by Trac. # # Uncomment the following lines if you want to make use of this # feature (see also step 3 of the recipe): #ErrorDocument 402 /error402.html #<Location /error402.html> # SetHandler None #</Location> # #--------------------------[ Error 403: "URLs are not allowed in tickets!" ]--- # Another use for customized error pages is, as mentioned above, to let users # know why they are not allowed to give URLs in their tickets and what they # can do to circumvent this limitation. #ErrorDocument 403 /error403.html #<Location /error403.html> # XBitHack On # SetHandler None #</Location> |
Nützliche Trac Ressourcen
Handbücher, Tutorials und HowTos
| URL | Beschreibung |
|---|---|
| Trac Home | The official Trac homepage |
| Linux Subversion Server and Trac Server | YoLinux tutorial on configuration of a Linux Subversion Server and Trac server. |
| Trac on Ubuntu | Other how-tos to get Trac on your Ubuntu machine (for multiple versions) |
| Egg Cooking Tutorial | How to cook python eggs (e.g. to develop your own Trac plugin) |
| Egg Cooking Tutorial for Trac 0.11+ | How to cook python eggs (e.g. to develop your own Trac plugin) |
PlugIns
| URL | Beschreibung |
|---|---|
| Trac Hacks | Macros, patches, plugins … Track Hacks ist das größte mir bekannte Repository. Von dort geht es direkt zum HackIndex. |
| Trac PluginList | Eine Plugin-Liste auf der Hauptseite |

Das Inoffizielle Android-Handbuch
Das Inoffizielle Android Systemhandbuch
Die besten Android-Apps