Heads-up! You're reading an old post and the information in it is quite probably outdated.
Today I was messing around with Trac, installing it and doing some basic configuration. While my dev machine gets updated, I want to share my process of installing Trac.
What is Trac?
As said on the Trac homepage:
Trac is an enhanced wiki and issue tracking system for software development projects.
It’s free, it’s open source, it comes under the BSD license and it’s really awesome. You can write a wiki with it, have a ticket system, connect it with SVN, so you can browse the sources from the browser and see all the commit messages, when was something changed, added… It can support one project, it can support multiple projects. It can be viewable/editable by anyone, or you can close it down for your little team…
Trac is big. It has lots of plug-ins, so you can extend and customize your Trac. I haven’t played with them yet, but as soon as I will, you’ll get notified ;)
It’s written in Python. It can run on it’s own server, or it can run under Apache (where there are also several options). It can use SQlite, PostrgeSQL or MySQL databases. Currently it can connect only to SVN.
I’ll show you how to setup a basic Trac 0.11-dot-something-dot-something. It will run under Apache with mod_wsgi, use a SQlite database, connect to the SVN repository and require user authentication.
Before anything, I want to say that my machine where I installed Trac has LAMP and SVN configured like this. So, this post is kinda the next part of that post.
First, I installed a Python tool, called Easy Install. It’s here to make our installation process easier. Lovely. Go to http://pypi.python.org/pypi/setuptools/, scroll down to the downloads section and choose a Python egg to download (match it to your currently installed Python version I have Python 2.5 so I downloaded setuptools-0.6c9-py2.5.egg).
Fire up a console and type:
sudo sh setuptools-0.6c9-py2.5.egg
Of course, you need to match this to your own setuptools file.
EasyInstall will now locate Trac and it’s dependencies, download and install them.
Download the mod_wsgi:
sudo apt-get install libapache2-mod-wsgi
It will install and enable mod_wsgi. And, in my case, it only tried to restart Apache, but for an unknown reason it fails to do so. If that happens, just do a quick:
sudo /etc/init.d/apache2 restart
If you want Subversion with your Trac, you’ll need the python-subversion package:
sudo apt-get install python-subversion
If you have it already, it’ll just skip it. If you want SVN, but you don’t have this package, later on it will show an error message like: Unsupported version control system “svn”.
Now to make a folder for Trac, where it will keep all the Trac projects and stuff.
sudo mkdir /var/trac /var/trac/sites /var/trac/eggs /var/trac/apache
sudo chown -R www-data /var/trac
/var/trac/sites will be the files for Trac projects. The
/var/trac/eggs folder will be used as a cache folder for Python eggs.
/var/trac/apache will hold a wsgi script file.
The wsgi script is actually a Python script, but with the .wsgi extension, used by mod_wsgi. With this script, Trac will be able to run as a WSGI application.
sys.stdout = sys.stderr
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac/sites'
os.environ['PYTHON_EGG_CACHE'] = '/var/trac/eggs'
application = trac.web.main.dispatch_request
With this kind of script, one single Trac installation will be able to manage multiple projects (you can see here some other scripts).
Configure Apache, add this to your
WSGIScriptAlias /trac /var/trac/apache/trac.wsgi
Allow from all
sudo /etc/init.d/apache2 restart
If you go to http://localhost/trac/ in your browser, you should see an empty list of Available Projects. It’s empty, cause we haven’t added any project yet.
Now, let’s asume that we have a project called testProject with it’s source located in
/var/www/testProject and a SVN repo located in
/var/svn/repos/testProject. I’ll show how to add that project to Trac.
In console type:
sudo trac-admin /var/trac/sites/testProject initenv
Note that you need to provide the full path to
/var/trac/sites, cause it will create a Trac project in the current folder you’re in.
It will ask you now a few things:
- Project Name the name of the project, e.g. Trac testing project
- Database connection string leave it empty, and it will use SQlite
- Repository type leave it empty, and it will use SVN
- Path to repository path to the project repo, e.g.
It will start to print out a bunch of lines, about what is it doing. In the end you’ll get a message like Project environment for ‘testProject’ created. and a few more lines. One more thing. We need to add the whole project to www-data user, so it can manage the files:
sudo chown -R www-data /var/trac/sites/testProject
If you direct your browser again to http://localhost/trac/, you will now see a link for the
testProject. Click it. There, a fully working basic Trac environment for your project. A wiki, a ticket/bug tracking system, a repo browser in only a few minutes. How cool is that? Very.
This Trac environment can now be accessible by everyone. If we do not want that, we need to add this to the
AuthName "Trac login"
sudo htpasswd -bcm /var/trac/.htpasswd your_username your_password
All set. You’ll now have to login to Trac to be able to work on it. As I’m the big boss on my localhost, I gave myself some super-power privileges for Trac: TRAC_ADMIN. It’s like root on *NIX.
sudo trac-admin /var/trac/sites/testProject permission add robert TRAC_ADMIN
Read more about privileges.
That would be it. With this kind of setup, for now, it’s working perfectly for me. For Trac that’s available from the whole Internet, more security measures are needed, but this is only on localhost, so this is enough for me.
Comments, thoughts, ideas?