Archive

Posts Tagged ‘httpd’

How-To Set Up SVN and Trac

February 2, 2010 16 comments

What are SVN and Trac?

SVN: is a free/open-source Version Control System. Subversion (SVN) manages files and directories over time. Files are placed into a central repository and every change every made to the files or directories are remembered.

Trac: is an enhanced wiki and issue tracking system for software development projects. It provides a Graphical front end to SVN where diffs in files can be obtained. It cannot update the SVN repository. It simply provides a Project Management interface, wiki, ticketing system, and SVN front end.

Installation

sudo apt-get install apache2
sudo apt-get install subversion
sudo apt-get install libapache2-svn
sudo apt-get install trac
sudo apt-get install libapache2-mod-fastcgi libapache2-mod-fcgid

Setting Up SVN and Trac

To make things simple and flexible in case you want to make some changes in the future, configurations will be set in individual files, i.e. as virtual sites, then they will be enabled/disabled when needed.

1-Creating SVN Repository:

cd /var
sudo mkdir MyProjects
cd MyProjects
sudo mkdir svn
cd svn
sudo svnadmin create SVN_Project_01
sudo chown -R www-data.www-data /var/MyProjects

2-Setting Up Trac

cd /var/MyProjects/
sudo mkdir trac
cd trac
sudo trac-admin Trac_Project_01 initenv
-->Project Name [My Project]>
-->Database connection string [sqlite:db/trac.db] (choose defaults)
-->Repository type [svn]>
-->Path to repository [/path/to/repos]> /var/MyProjects/svn/SVN_Project_01
sudo chown -R www-data.www-data /var/MyProjects
sudo trac-admin /var/MyProjects/trac/Trac_Project_01 permission add username MILESTONE_ADMIN REPORT_ADMIN ROADMAP_ADMIN TICKET_ADMIN TRAC_ADMIN

Setting Up Apache:

At this stage, we need to secure the web access to the repository so only authorized persons who can modify it, enable the SSL mode so connection is encrypted, and modify apache configurations accordingly:

Securing Web Access

  1. Enable the Authenticated Access by adding a username and password:
    sudo htpasswd -cb /etc/apache2/passwords username password
    
  2. Enabling the SSL Module:
    Refer to this blog: How-To Enable SSL on Apache2 Server

Trac Configurations

Note: You will need to download the Trac package and link to the cgi-bin/trac.cgi and cgi-bin/trac.fcgi in the configuration.
In my case, this the path to these files after extracting:

ls /usr/local/Trac-0.11.6/cgi-bin

Create the following files or you may create one of them:

Track through CGI
cd /etc/apache2/sites-available/
cat > svn.cgi
##SVN

<Location /MyProjects/svn/SVN_Project_01>
	DAV svn
	SVNPath /var/MyProjects/svn/SVN_Project_01

	AuthType Basic
	AuthName "Subversion Repository - SVN_Project_01"
	AuthUserFile /etc/apache2/.htpasswd

#	<LimitExcept GET PROPFIND OPTIONS REPORT>
		Require valid-user
		SSLRequireSSL
#	</LimitExcept>
</Location>


##Trac

ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.cgi
<Location /MyProjects/trac>
	SetEnv TRAC_ENV_PARENT_DIR /var/MyProjects/trac
</Location>

<Location "/MyProjects/trac">
        SSLRequireSSL
        AuthType Basic
        AuthName "Trac Login for Projectname Website"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
</Location>


<Location "/MyProjects/trac/Trac_Project_01/login">
	SSLRequireSSL
	AuthType Basic
	AuthName "Trac Login for Projectname Website"
	AuthUserFile /etc/apache2/.htpasswd
	Require valid-user
</Location>
Track through FCGI
cd /etc/apache2/sites-available/
cat > svn.fcgi
##SVN

<Location /MyProjects/svn/SVN_Project_01>
	DAV svn
	SVNPath /var/MyProjects/svn/SVN_Project_01

	AuthType Basic
	AuthName "Subversion Repository - SVN_Project_01"
	AuthUserFile /etc/apache2/.htpasswd

#	<LimitExcept GET PROPFIND OPTIONS REPORT>
		Require valid-user
		SSLRequireSSL
#	</LimitExcept>
</Location>



##Trac

ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.fcgi
##fastcgi
#FastCgiConfig -initial-env TRAC_ENV=/var/MyProjects/trac/Trac_Project_01
#FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/MyProjects/trac

##fcgi
DefaultInitEnv TRAC_ENV_PARENT_DIR /var/MyProjects/trac

#<Location "/MyProjects/trac">
	##fastcgi
	#SetEnv TRAC_ENV_PARENT_DIR "/var/MyProjects/trac"
	#SetEnv TRAC_ENV "/var/MyProjects/trac/Trac_Project_01"
	#AddHandler fastcgi-script .fcgi

	#AuthType Basic
        #AuthName "Trac Repository - Trac_Project_01"
        #AuthUserFile /etc/apache2/.htpasswd
	#Require valid-user
	#SSLRequireSSL
#</Location>

<Location "/MyProjects/trac/Trac_Project_01/login">
	SSLRequireSSL
	AuthType Basic
	AuthName "Trac Login for Projectname Website"
	AuthUserFile /etc/apache2/.htpasswd
	Require valid-user
</Location>

Track through FastCGI
cd /etc/apache2/sites-available/
cat > svn.fastcgi
##SVN

<Location /MyProjects/svn/SVN_Project_01>
	DAV svn
	SVNPath /var/MyProjects/svn/SVN_Project_01

	AuthType Basic
	AuthName "Subversion Repository - SVN_Project_01"
	AuthUserFile /etc/apache2/.htpasswd

#	<LimitExcept GET PROPFIND OPTIONS REPORT>
		Require valid-user
		SSLRequireSSL
#	</LimitExcept>
</Location>



##Trac

ScriptAlias /MyProjects/trac /usr/local/Trac-0.11.6/cgi-bin/trac.fcgi
#FastCgiConfig -initial-env TRAC_ENV=/var/MyProjects/trac/Trac_Project_01
FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/MyProjects/trac

#DefaultInitEnv TRAC_ENV /var/MyProjects/trac/Trac_Project_01

<Location "/MyProjects/trac">
	#SetEnv TRAC_ENV_PARENT_DIR "/var/MyProjects/trac"
	#SetEnv TRAC_ENV "/var/MyProjects/trac/Trac_Project_01"
	AddHandler fastcgi-script .fcgi

	#AuthType Basic
        #AuthName "Subversion Repository - SVN_Project_01"
        #AuthUserFile /etc/apache2/.htpasswd
	#Require valid-user
	#SSLRequireSSL
</Location>

<Location "/MyProjects/trac/Trac_Project_01/login">
	SSLRequireSSL
	AuthType Basic
	AuthName "Trac Login for Projectname Website"
	AuthUserFile /etc/apache2/.htpasswd
	Require valid-user
</Location>
Track through Python
cd /etc/apache2/sites-available/
cat > svn.python
##SVN

<Location /MyProjects/svn/SVN_Project_01>
	DAV svn
	SVNPath /var/MyProjects/svn/SVN_Project_01
	
	AuthType Basic
	AuthName "Subversion Repository - SVN_Project_01"
	AuthUserFile /etc/apache2/.htpasswd
	
#	<LimitExcept GET PROPFIND OPTIONS REPORT>
		Require valid-user
		SSLRequireSSL
#	</LimitExcept>
</Location>


##Trac

<Location /MyProjects/trac>
	SetHandler mod_python
	PythonInterpreter main_interpreter
	PythonHandler trac.web.modpython_frontend
	PythonOption TracEnvParentDir /var/MyProjects/trac
	PythonOption TracUriRoot /MyProjects/trac
	
	#SSLRequireSSL
	#AuthType Basic
	#AuthName "Trac Login for Projectname Website"
	#AuthUserFile /etc/apache2/.htpasswd
	#Require valid-user
</Location>

<Location "/MyProjects/trac/Trac_Project_01/login">
	SSLRequireSSL
	AuthType Basic
	AuthName "Trac Login for Projectname Website"
	AuthUserFile /etc/apache2/.htpasswd
	Require valid-user
</Location>

After that, you will need to enable ONLY one of them:

sudo a2ensite svn.cgi

Or

sudo a2ensite svn.fcgi

Or

sudo a2ensite svn.fastcgi

Or

sudo a2ensite svn.python

Finally, reload apache server:

sudo /etc/init.d/apache2 reload

Try to open these links:
https://localhost/MyProjects/svn/SVN_Project_01
https://localhost/MyProjects/trac

Next

You will need to configure your prefered IDE with the created SVN repository if it supports the synchronization with SVN repositories. In my case as a Java/Java EE Developer, I’ ll refer to the most known open IDEs which are: NetBeans and Eclipse. SVN is just a little part of them to control versioning!

Hence, this would help you get a well managed and organized development environment!

___________________

References

https://help.ubuntu.com/community/UbuntuTracHowto
http://wiki.kartbuilding.net/index.php/Trac_and_SVN
http://trac.edgewall.org/wiki/TracGuide