wiki:linux/trac/Plugins/mercurial

manpagerenderer, mercurial

See also:

Trac Installation Guide
modwsgi - Integration with Trac
Trac and modwsgi
Mercurial Plugin for Trac


  1. Apache-Server mit mod_wsgi-Modul installieren:
    • Webfaction Panel aufrufen
    • Application ‘mod_wsgi 3.3/Python 2.7′ mit Namen ‘apache’ installieren
    • Apache-Application an 'trac.mutetella.org'-Subdomain binden
  1. Falls nicht vorhanden, '/home/mutetella/lib/pythonX.X'-Verzeichnis erstellen. X.X durch die Pythonversion, die verwendet werden soll, ersetzen (im weiteren Verlauf 2.7):
mkdir /home/mutetella/lib/python2.7
  1. setuptools installieren:
    setuptools-egg von
    http://pypi.python.org/pypi/setuptools
    herunterladen und als Skript ausführen:
mkdir /home/mutetella/tmp
cd ~/tmp
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
sh ./setuptools-0.6c11-py2.7.egg

(Dafür wird '~/lib/python2.7'-Verzeichnis benötigt!)

  1. Genshi installieren
easy_install-2.7 Genshi
  1. Mercurial installieren
easy_install-2.7 Mercurial

n

  1. Trac installieren
easy_install-2.7 Trac
  1. Verzeichnis für trac-enviroments erstellen:
    • Webfaction Panel aufrufen
    • Application 'Static only (no .htaccess)' mit Namen 'trac' installieren
    • Die dabei angelegte 'index.html' kann gelöscht werden:
rm ~/webapps/trac/index.html
  1. trac-enviroment erstellen (hier am Beispiel 'wiki'):
trac-admin /home/mutetella/webapps/trac/wiki initenv
  1. '.cgi-bin'-Verzeichnis mit 'trac.wsgi' erstellen:
mkdir /home/mutetella/webapps/trac/.cgi-bin

Im '.cgi-bin'-Verzeichnis eine Datei 'trac.wsgi' mit folgendem Inhalt anlegen:

#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
#
# Copyright (C)2008-2009 Edgewall Software
# Copyright (C) 2008 Noah Kantrowitz
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Noah Kantrowitz
import os
import site

site.addsitedir('/home/mutetella/lib/python2.7')

os.environ['TRAC_ENV_PARENT_DIR'] = '/home/mutetella/webapps/trac'
os.environ['PYTHON_EGG_CACHE'] = '/home/mutetella/webapps/trac/.egg-cache'

import trac.web.main
application = trac.web.main.dispatch_request
  1. Passwortdatei erstellen:
htdigest -c /home/mutetella/webapps/trac/.htpasswd trac mutetella
  1. Trac-Admin erstellen (nur nötig, falls neue trac-enviroment erstellt bzw. eine trac.db verwendet wird, die noch keinen admin hat):
trac-admin /home/mutetella/webapps/trac/wiki permission add mutetella TRAC_ADMIN
  1. Apache konfigurieren:
    ‘~/webapps/apache/apache2/conf/httpd.conf’ durch folgendes ersetzen bzw. ergänzen:
ServerRoot /home/mutetella/webapps/apache/apache2

LoadModule alias_module       modules/mod_alias.so
LoadModule authz_host_module  modules/mod_authz_host.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authz_user_module  modules/mod_authz_user.so
LoadModule authn_file_module  modules/mod_authn_file.so
LoadModule dir_module         modules/mod_dir.so
LoadModule env_module         modules/mod_env.so
LoadModule log_config_module  modules/mod_log_config.so
LoadModule mime_module        modules/mod_mime.so
LoadModule rewrite_module     modules/mod_rewrite.so
LoadModule setenvif_module    modules/mod_setenvif.so
LoadModule wsgi_module        modules/mod_wsgi.so

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /home/mutetella/logs/user/access_apache.log combined
DirectoryIndex index.py
DocumentRoot /home/mutetella/webapps/apache/htdocs
ErrorLog /home/mutetella/logs/user/error_apache.log
KeepAlive Off
Listen 25482
MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
WSGIDaemonProcess apache processes=5 python-path=/home/mutetella/webapps/apache/lib/python2.7 threads=1
WSGIProcessGroup apache
WSGIRestrictEmbedded On
WSGILazyInitialization On

WSGIScriptAlias / /home/mutetella/webapps/trac/.cgi-bin/trac.wsgi

<Directory /home/mutetella/webapps/trac/.cgi-bin>
    WSGIApplicationGroup %{GLOBAL}
    Order allow,deny
    Allow from all
</Directory>

<LocationMatch "/[^/]+/login">
    AuthType Digest
    AuthName "trac"
    AuthDigestDomain /
    AuthUserFile /home/mutetella/webapps/trac/.htpasswd
    Require valid-user
</LocationMatch>

<Directory /home/mutetella/webapps/apache/htdocs>
    AddHandler wsgi-script .py
</Directory>

Apache neu starten:

~/webapps/apache/apache2/bin/restart
  1. Mercurial-Plugin installieren:
    Mercurial-Plugin downloaden und daraus egg-Datei erstellen:
cd ~/tmp
#Ab Trac Version 0.13/1.0:
hg clone https://hg.edgewall.org/trac/mercurial-plugin
#Trac Version 0.12:
svn co http://svn.edgewall.com/repos/trac/plugins/0.12/mercurial-plugin
cd mercurial-plugin
python2.7 setup.py bdist_egg

Damit liegt eine 'TracMercurial-xxx-py2.7.egg'-Datei im '~/tmp/mercurial-plugin/dist'-Verzeichnis. Diese Datei ins 'plugin'-Verzeichnis der Trac-enviroments kopieren, die Repositories verwenden sollen.

  1. '~/tmp' kann nun gelöscht werden:
rm -r ~/tmp


In der Trac Installations Dokumentation wird beschrieben, dass statische Ressourcen wie css- oder Bilddateien via Apache-Aliases gehandelt werden sollen.
Nachdem ich aber verschiedene Trac-enviroments habe, funktioniert die beschriebene Methode

Alias /chrome/common /home/mutetella/webapps/trac/.htdocs/common

<Directory /home/mutetella/webapps/trac/.htodcs>
    Order allow,deny
    Allow from all
</Directory>

nicht, da in meinem Fall die Url nicht '/chrome/common' sondern '/enviroment/chrome/common' lautet.
Auch ein

AliasMatch /([a-z]+)/chrome/common /home/mutetella/webapps/trac/.htdocs/common

hat nicht funktioniert. Das Problem habe ich unter anderem hier
Trac ignores Apache-alias to static files
und hier
Apache don't use .htdocs-directory...
beschrieben, aber noch keine Lösung gefunden.

Das Mappen von statischen Ressourcen habe ich daher wie folgt gelöst:
Zuerst das 'htdocs'-Verzeichnis aus dem '.egg-cache'-Verzeichnis ins neu erstellte '.htdocs'-Verzeichnis im trac-Wurzelverzeichnis kopieren:

mkdir /home/mutetella/webapps/trac/.htdocs
cp -r /home/mutetella/webapps/trac/.egg-cache/Trac-0.12.3-py2.7.egg-tmp/trac/htdocs/* /home/mutetella/webapps/trac/.htdocs

Auf das nun vorhandene '.htdocs'-Verzeichnis einen Apache Alias anlegen. Dazu in der Apache 'httpd.conf'-Datei folgenden Eintrag vor das WSGIScripAlias einfügen:

Alias /htdocs /home/mutetella/webapps/trac/.htdocs

<Directory /home/mutetella/webapps/trac/.htdocs>
    Order allow,deny
    Allow from all
</Directory>

Dieses Alias '/htdocs' kann nun in der 'trac.ini' als Eintrag 'htdocs_location' im '[trac]' Bereich verwendet werden:

[trac]
htdocs_location = /htdocs
Last modified 6 years ago Last modified on Oct 16, 2013, 1:42:52 PM