Despite I’ve worked before with Trac (a well-known bug tracking system), this is the first time I’ve been in the need for installing it. This post covers in a few steps what I’ve done. Maybe in your particular case it would be helpful, maybe not. So, these are the steps…
1. Install Trac
To install trac, all the detailed information is available here:
http://trac.edgewall.org/wiki/TracInstall
First of all, I needed to install the ‘easy_install tool’. I had already Python installed, because it runs over this language (http://python.org/).
To get ‘easy_install’, ‘setuptools’ package for Python must be installed. Can be downloaded from here http://pypi.python.org/pypi/setuptools#downloads and is auto-executable. Just run
sudo sh setuptools-0.6c9-py2.4.egg
To install then Trac:
sudo easy_install Trac
Note that you would need root permissions. And it was easy!
2. Create a Project
Trac runs with several database engines. In my case I’ve chosen SQLite for simplicity. This engine must be installed before configuring Trac. To install SQLite:
sudo apt-get install sqlite
And we’ll need also SQLite packages for Python. Well, perhaps this is the only mandatory step about SQLite, but I’m writing down what I did and I had no chance to check again without the main SQLite engine.
sudo apt-get install python-sqlite
Now we are ready to create a project, let’s create the folder first:
sudo mkdir /var/lib/trac
sudo chown www-data:www-data /var/lib/trac
And now the project can be initialized
sudo trac-admin /var/lib/trac/myproject initenv
We need to provide the project name, and as the default database engine is SQLite and we are not going to use a svn repository right now, the other questions at the installation time can be avoided.
Don’t forget to assign the project to user www-data recursively with
sudo chown www-data:www-data -R /var/lib/trac/myproject
At this point we can start testing the server with the standalone daemon:
sudo tracd --port 8000 /var/lib/trac/myproject
More info: http://trac.edgewall.org/wiki/TracInstall
3. Configuring Apache
We need to embed Python in Apache by installing mod_python.
sudo apt-get install libapache2-mod-python
And now we are about to configure Apache to use this module. We can use Publisher Handler to run .py scripts, or Python Server Pages to run .psp html files with python embedded code.
In our case I’m installing the Publisher Handler.
Let’s edit the Apache configuration for this virtual host, on file /etc/apache2/sites-available/default
And in the directory definition, add the bold lines.
;
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
Then, restart Apache
sudo /etc/init.d/apache2 restart
More info:
http://www.howtoforge.com/embedding-python-in-apache2-with-mod_python-debian-etch
With the virtual host configured to run Python scripts, we need to add a location (virtual path) in our Apache server. To do so, edit apache configuration file, in my case on:
/etc/apache2/apache2.conf
And add the following location definition:
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/lib/trac/myproject
PythonOption TracUriRoot /projects/myproject
Where /projects/myproject will become your virtual url on the http server for trac system. This configuration sets up a unique project but other options can be chosen:
# For a single project
PythonOption TracEnv /var/lib/trac/myproject
# For multiple projects
PythonOption TracEnvParentDir /var/lib/trac
# For the index of multiple projects
PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html
More info: http://trac.edgewall.org/wiki/TracModPython
4. Adding permissions
Is preferable to have server authentication to avoid not allowed visitors. For this purpose, we should update Apache configuration file to stablish that Trac virtual location will require an authenticated user. To do so, we add these lines:
AuthType Basic
AuthName "My Project"
AuthUserFile /var/lib/trac/.htpasswd
Require valid-user
We only need else to create the user and password definition:
htpasswd -nb user password
And add the resulting line to the passwords file mentioned above.We also need to set users in trac and assign them permissions. At least one of them should be administrator, and having different logins they are allowed to manage their own content.First of all, we need to create a new group which will have administrator permissions. In my case, I’ll call it ‘admin’
sudo trac-admin /var/lib/trac/climaps/ permission add admin MILESTONE_ADMIN
sudo trac-admin /var/lib/trac/climaps/ permission add admin PERMISSION_ADMIN
sudo trac-admin /var/lib/trac/climaps/ permission add admin ROADMAP_ADMIN
sudo trac-admin /var/lib/trac/climaps/ permission add admin TRAC_ADMIN
sudo trac-admin /var/lib/trac/climaps/ permission add admin TICKET_ADMIN
sudo trac-admin /var/lib/trac/climaps/ permission add admin REPORT_ADMIN
As I’ve activated server authentication, user name is caught from Apache, so that all I only need to do is to add the already created users in .htpasswd file to the trac group admin.
sudo trac-admin /var/lib/trac/climaps/ permission add jorge admin
After that, other users and permissions can be managed from the web interface.
More info: http://trac.edgewall.org/wiki/TracPermissions