Trac 0.12.3 + MySQL + Apache + Subversion on CentOS 5.5

The documentation for Trac is decent, but it isn’t super clear what to do, especially if you aren’t familiar with python. Some quick random info:

  • For this example we are going to be hosting a Trac server using a vhost in Apache via mod_python
  • Download Trac from http://download.edgewall.org/trac/Trac-0.12.3.tar.gz
  • PYTHON_EGG_CACHE on my system is set to /tmp. It has temp files and whatnot.
  • Subversion repository is install in /var/svn, but we’ll assume there is already a repository there called repository.
  • Trac projects are going to be in /var/trac, go ahead and create it.
  • Everywhere you see PROJECT replace it with your project name

First install the prerequisites using yum, then make sure you have everything with easy_setup

yum install python MySQL-python mod_fastcgi mod_python subversion
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
easy_install Genshi

Now to install Trac, we must first get the source and then run the installer. Note that you will need root or sudo access to install.

cd ~
wget http://download.edgewall.org/trac/Trac-0.12.3.tar.gz
tar -xzvf Trac-0.12.3.tar.gz
cd Trac-0.12.3
sudo python ./setup.py install

Now let’s create the Trac project. It will ask you for a project name and a database connection – I’m using Mysql and already created a project schema called trac_PROJECT and user that has full access to it. My connection string looks like mysql://user:password@host/trac_PROJECT,

mkdir /var/trac
trac-admin /var/trac/PROJECT initenv

Now edit the trac.ini file for your project, located at /var/trac/PROJECT/conf/trac.ini. We want to set the properties “repository_dir = /var/svn/repository” and “repository_sync_per_request = ” – remove (default).

Next we need to create an htpasswd file, as this is what Trac uses for authentication. Enter a password for the admin user. If you want to create more users, leave out the -c since this creates a new file every time and will overwrite your first entries if it’s present. The next line gives this user TRAC_ADMIN rights to your project

sudo htpasswd -c /var/trac/.htpasswd admin 
trac-admin /var/trac/PROJECT permission add admin TRAC_ADMIN

Create the commit hook in your Subversion repository.

/var/svn/repository/hooks/post-commit

#!/bin/sh
export PYTHON_EGG_CACHE="/tmp"
/usr/bin/trac-admin /var/trac/PROJECT changeset added "$1" "$2"

Make it executable

chmod 755 /var/svn/repository/hooks/post-commit

Configure Apache to use mod_fastcgi and not mod_php to serve PHP files – this is the first step to serving up Trac pages.

First we need to create the FastCGI wrappers that we will use to execute requests. We are going to need two, one for PHP and one for Trac. Both will go in /var/www/cgi-bin and it’s important to make sure that they are executable.

/var/www/cgi-bin/php.fcgi

#!/bin/sh
export PHP_FCGI_CHILDREN=4
exec /usr/bin/php-cgi -c /etc/php.ini

The second file is named trac.fcgi and will contain the following – note that this is one place where PYTHON_EGG_CACHE is set, and that we have to include the parent path to our Trac environment. You can also serve a single project by just setting TRAC_ENV instead of TRAC_ENV_PARENT_DIR.

/var/www/cgi-bin/trac.fcgi

#!/usr/bin/env python
import os

from trac.web.main import dispatch_request
try:
    from flup.server.fcgi import WSGIServer
except ImportError:
    from trac.web._fcgi import WSGIServer

if __name__ == '__main__':
    os.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac'
    os.environ['PYTHON_EGG_CACHE'] = '/tmp'
    WSGIServer(dispatch_request).run()

Make both executable:

chmod 755 /var/www/cgi-bin/*.fcgi

Now we need to tell Apache to use these FastCGI wrappers. In /etc/httpd/conf.d/ you will need rename php.conf to php.conf.off and edit fastcgi.conf.

mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf.off

Now create the FastCGI wrapper for PHP.

/etc/httpd/conf.d/fastcgi.conf

LoadModule fastcgi_module modules/mod_fastcgi.so

FastCgiServer /var/www/cgi-bin/php.fcgi
AddHandler php-fastcgi .php

SetHandler fastcgi-script
Action php-fastcgi /cgi-bin/php.fcgi
DirectoryIndex index.html index.shtml index.cgi index.php
AddType application/x-httpd-php .php

Create a VirtualHost in Apache that will serve Trac.

<VirtualHost *:80>
        ServerName trac.DOMAIN.com
	DocumentRoot /var/trac
	<Directory /var/trac>
	        Order allow,deny
	        Allow from all
	</Directory>
	ScriptAlias / /var/www/cgi-bin/trac.fcgi/
	<LocationMatch "/[^/]+/login">
		AuthType Basic
		AuthName "Trac"
		AuthUserFile /var/trac/.htpasswd
		Require valid-user
	</LocationMatch>
</VirtualHost>

Restart Apache by running

service httpd restart

You should be able to visit http://trac.DOMAIN.com/PROJECT/login in your browser and log on using admin and the password you selected. All you have left to do is enable the plugins to tie Trac and Subversion commits together.

Choose Admin on the top right, then Plugins on the left. You will need to click the arrow to expand the list of plugins and go to the bottom. You should see CommitTicketReferenceMacro and CommitTicketUpdater – check the box next to them to enable both.

Should be good to go!

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *