Installation

Subversion

apt-get install trac

Create the following directory

/home/trac

Now all the subversion repositories will be in /home/svn and all trac projects in /home/trac

First trac project

Let say that we still have the test (/home/svn/test) repository from the previous article.

Any manipulations on Trac projects is made with the trac-admin command

trac-admin -h

Project creation

trac-admin /home/trac/test initenv


Creating a new Trac environment at /home/trac/test

Trac will first ask a few questions about your environment
in order to initalize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Project Name [My Project]> test

 Please specify the connection string for the database to use.
 By default, a local SQLite database is created in the environment
 directory. It is also possible to use an already existing
 PostgreSQL database (check the Trac documentation for the exact
 connection string syntax).

Database connection string [sqlite:db/trac.db]>

 Please specify the type of version control system,
 By default, it will be svn.

 If you don't want to use Trac with version control integration,
 choose the default here and don't specify a repository directory.
 in the next question.

Repository type [svn]>

 Please specify the absolute path to the version control
 repository, or leave it blank to use Trac without a repository.  You can also set the repository location later.

Path to repository [/path/to/repos]> /home/svn/test

 Please enter location of Trac page templates.
 Default is the location of the site-wide templates installed with Trac.

Templates directory [/usr/share/trac/templates]>

Creating and Initializing Project
 Installing default wiki pages
 /usr/share/trac/wiki-default/TracModPython => TracModPython
 /usr/share/trac/wiki-default/TracRss => TracRss
 /usr/share/trac/wiki-default/WikiRestructuredText => WikiRestructuredText
 /usr/share/trac/wiki-default/TracStandalone => TracStandalone  /usr/share/trac/wiki-default/TracReports => TracReports
 /usr/share/trac/wiki-default/TracPlugins => TracPlugins
 /usr/share/trac/wiki-default/InterWiki => InterWiki
 /usr/share/trac/wiki-default/TracTimeline => TracTimeline
 /usr/share/trac/wiki-default/TracLinks => TracLinks
 /usr/share/trac/wiki-default/WikiNewPage => WikiNewPage
 /usr/share/trac/wiki-default/TracFastCgi => TracFastCgi
 /usr/share/trac/wiki-default/TracSearch => TracSearch
 /usr/share/trac/wiki-default/TracBackup => TracBackup
 /usr/share/trac/wiki-default/TracGuide => TracGuide
 /usr/share/trac/wiki-default/TracSupport => TracSupport
 /usr/share/trac/wiki-default/TracPermissions => TracPermissions
 /usr/share/trac/wiki-default/WikiDeletePage => WikiDeletePage
 /usr/share/trac/wiki-default/TracTickets => TracTickets
 /usr/share/trac/wiki-default/TracCgi => TracCgi
 /usr/share/trac/wiki-default/TracWiki => TracWiki
 /usr/share/trac/wiki-default/TracInterfaceCustomization => TracInterfaceCustomization
 /usr/share/trac/wiki-default/TracImport => TracImport
 /usr/share/trac/wiki-default/InterMapTxt => InterMapTxt
 /usr/share/trac/wiki-default/TracEnvironment => TracEnvironment
 /usr/share/trac/wiki-default/TracInstall => TracInstall
 /usr/share/trac/wiki-default/WikiProcessors => WikiProcessors
 /usr/share/trac/wiki-default/TracAccessibility => TracAccessibility
 /usr/share/trac/wiki-default/RecentChanges => RecentChanges
 /usr/share/trac/wiki-default/TracChangeset => TracChangeset
 /usr/share/trac/wiki-default/WikiHtml => WikiHtml
 /usr/share/trac/wiki-default/TracLogging => TracLogging
 /usr/share/trac/wiki-default/WikiPageNames => WikiPageNames
 /usr/share/trac/wiki-default/TracRoadmap => TracRoadmap
 /usr/share/trac/wiki-default/TitleIndex => TitleIndex
 /usr/share/trac/wiki-default/WikiStart => WikiStart
 /usr/share/trac/wiki-default/TracQuery => TracQuery  /usr/share/trac/wiki-default/WikiMacros => WikiMacros
 /usr/share/trac/wiki-default/TracIni => TracIni
 /usr/share/trac/wiki-default/WikiRestructuredTextLinks => WikiRestructuredTextLinks
 /usr/share/trac/wiki-default/TracTicketsCustomFields => TracTicketsCustomFields
 /usr/share/trac/wiki-default/WikiFormatting => WikiFormatting
 /usr/share/trac/wiki-default/TracAdmin => TracAdmin
 /usr/share/trac/wiki-default/TracNotification => TracNotification
 /usr/share/trac/wiki-default/TracSyntaxColoring => TracSyntaxColoring
 /usr/share/trac/wiki-default/TracUpgrade => TracUpgrade
 /usr/share/trac/wiki-default/SandBox => SandBox
 /usr/share/trac/wiki-default/InterTrac => InterTrac
 /usr/share/trac/wiki-default/TracBrowser => TracBrowser
 /usr/share/trac/wiki-default/CamelCase => CamelCase
 /usr/share/trac/wiki-default/TracUnicode => TracUnicode
 /usr/share/trac/wiki-default/TracRevisionLog => TracRevisionLog 
Warning:

You should install the SVN bindings

---------------------------------------------------------------------
Project environment for 'test' created.

You may now configure the environment by editing the file:

  /home/trac/test/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /home/trac/test

Then point your browser to http://localhost:8000/test.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!

Quick test

  • Commit some files in the repository

;tracd --port 8000 /home/trac/test

  • Then point your browser to http://localhost:8000/test as described

Configuration

tracd

As shown above, tracd is a standalone server shipped with Trac.

Usage
tracd --help

It takes only few seconds to set up

tracd --port 8000 --hostname http://myserver.ltd --basic-auth /home/svn/test/myserverltd.htpasswd /home/trac/test

For basic-auth you give the path of your .htpasswd

Limitations
  • As svnserve, you can only run one instance of tracd at the time. It is not good enough if you have a server where you wish to host several project.
  • As svnserve, you will need to start tracd by hand and remember all parameters...

CGI and FastCGI

It is possible to use track by making a script alias on trac.cgi or trac.fcgi as described in the wiki

Prerequisite

Make sure to have CGI and FastCGI installed and configured for your apache distribution.

Configuration

Citation from TracFastCgi :

Configure ScriptAlias or similar options as described in TracCgi, but calling trac.fcgi instead of trac.cgi.

One little unclear point is that trac.cgi and trac.fcgi are shipped with the Trac installation

%updatedb <-- this might take a while (needs to be done to use locate)
%locate trac.cgi
/usr/share/trac/cgi-bin/trac.cgi
%locate trac.fcgi
/usr/share/trac/cgi-bin/trac.fcgi

test.cgi or test.fcgi configuration for our test repository

cp /usr/share/trac/cgi-bin/trac.fcgi /var/myserver.ltd/ftp/cgi-bin/test.fcgi
nano /var/myserver.ltd/ftp/cgi-bin/test.fcgi

To add one repository to the Trac project, add at the top of the file

import os
os.environ['TRAC_ENV'] = "/home/trac/myMRC"

To add multiple repository to the Trac project add, at the top of the file

import os
os.environ['TRAC_ENV_PARENT_DIR'] = "/home/trac/myMRC"

Here is a virtual host example

###myserver.ltd###
<VirtualHost xxx.xxx.xxx.xxx>
        DocumentRoot /var/myserver.ltd/ftp/www
        ServerName myserver.ltd
        ServerAlias *.myserver.ltd
        CustomLog /var/log/apache/access.myserver.ltd.log combined
        ErrorLog /var/log/apache/error.myserver.ltd.log

        # php
        php_admin_value session.save_path /var/myserver.ltd/sessions
        php_admin_value upload_tmp_dir /var/myserver.ltd/tmp
        php_admin_flag safe_mode on
        
        ScriptAlias /cgi-bin/ /var/myserver.ltd/ftp/cgi-bin/
        VirtualDocumentRoot /home/myserver.ltd/ftp/%1
        
        # Alias for trac
        ScriptAlias /trac /home/myserver.ltd/ftp/cgi-bin/trac.fcgi
        ScriptAlias /trac/ /home/myserver.ltd/ftp/cgi-bin/trac.fcgi

        # Trac authentication  
        <Location "/trac/login">
               AuthType Basic
               AuthName "Trac"
               AuthUserFile /home/trac/test/conf/test.htpasswd
               Require valid-user
        </Location>
</VirtualHost>
###<myserver.ltd>###

With this example you access Trac via http://www.myserver.ltd/trac.

/trac/login path needs a valid authentication file. For this example it is put in /home/trac/test/conf/test.htpasswd

htpasswd -c /home/trac/test/conf/test.htpasswd myuser
htpasswd /home/trac/test/conf/test.htpasswd myuser2
...

I haven't been able to make a script alias on the root folder

ScriptAlias / /home/myserver.ltd/ftp/cgi-bin/trac.fcgi

It gives some location complications.

To fix this I added a redirection for the root folder (/) to /trac.

  • Create
nano /var/myserver.ltd/ftp/www/.htaccess
  • Add
Redirect Permanent / http://mymrc.org/trac/

Remember to restart apache

/etc/init.d/apache restart

or

/etc/init.d/apache2 restart

Mod Python

I have been able to set up the Trac environments only on Apache 2.2. There are some difficulties again with Apache 1.3.

Prerequisite

Make sure to install and enable mod_python

apt-get install libapache2-mod-python2.x
Configuration
Here is a virtual host example
###myserver.ltd###
<VirtualHost *>
    ServerAdmin admin@myserver.ltd
    ServerName  myserver.ltd

    <Location />
        SetHandler mod_python
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnv /home/trac/test
        PythonOption TracUriRoot /
    </Location>

    <Location /login>
        AuthType Basic
        AuthName "Test - Trac Server"
        AuthUserFile /home/trac/test/conf/test.htpasswd
        Require valid-user
    </Location>

    # Logs:
    LogLevel warn
    ErrorLog /var/log/apache2/error.myserver.ltd.log
    CustomLog /var/log/apache2/access.myserver.ltd.log combined
    ServerSignature On
</VirtualHost>
###<myserver.ltd>###

Remember to restart apache

/etc/init.d/apache2 restart

Configure trac.ini

Edit

/home/trac/myMRC/conf/trac.ini

There's not much configuration to make, just make sure to set 'link' in header and 'base_url' in trac. You can customize the rest later.

[header_logo]
alt =
height = -1
link = http://myserver.ltd/trac/
src = common/trac_banner.png
width = -1

[trac]
authz_file =
authz_module_name =
base_url = http://myserver.ltd/trac/
check_auth_ip = true
database = sqlite:db/trac.db
default_charset = iso-8859-15
default_handler = WikiModule
htdocs_location =
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
metanav = login,logout,settings,help,about
permission_store = DefaultPermissionStore
repository_dir = /home/svn/test
repository_type = svn
# request_filters = <set in global trac.ini>
# templates_dir = <set in global trac.ini>
timeout = 20

Brief trac-admin overview

Backups

trac-admin /home/trac/test/hotcopy /home/backup/trac

Milestones

You can start by cleaning adding, modifying... the milestones.

milestone list
trac-admin /home/trac/test/ milestone remove milestone4
trac-admin /home/trac/test/ milestone remove milestone3
trac-admin /home/trac/test/ milestone remove milestone2
trac-admin /home/trac/test/ milestone rename milestone1 "First beta version"
trac-admin /home/trac/test/ milestone due "First beta version" "2007-07-02"
trac-admin /home/trac/test/ milestone add "Estimated alpha release" "2007-12-31"

resync

You need to resync if you, for example, change the subversion repository

trac-admin /home/trac/test/ resync

...

Conclusion

Trac is a good project management environment that deserve some attention. The documentation is very well done and you should find everything you need in the help (Wiki syntax...).

I hope this will help some of you for your projects.