This article describes the installation of a subversion Repository server including Trac Project Managment on a openSUSE 11.0 Server.
What is Trac?
- Trac is an enhanced wiki and issue tracking system for software development projects.
- An integrated system for managing software projects.
- An enhanced wiki.
- A flexible web-based issue tracker.
- An interface to the Subversion revision control system.
Have a look at their homepage:Trac Project Managment.
Normally any linux distribution comes with precompiled packages. But if we want to use the Trac Project Managment we must compile the whole thing ourself.
Standard openSUSE 11.0 Server, runlevel3.
No graphical system is required because it is a Repository server and nothing more ;-)
Install the follwing packages via openSUSE "YaST"
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://gd.tuwien.ac.at/infosys/servers/http/apache/dist/httpd/httpd-2.2.9.tar.gz
...
$>tar xzvf httpd-2.2.9.tar.gz
$>cd httpd-2.2.9
$>./configure --prefix=/usr/local/apache2 --enable-mods-shared="all ssl dav_lock" --enable-maintainer-mode --enable-dav --enable-dav-fs --enable-dav-lock --enable-cgi --enable-deflate --enable-auth-digest --enable-rewrite --enable-actions --enable-so --enable-ssl=/usr/ssl
...
$>make
$>make install
$>cd /usr/local/apache2/conf<!-- ------------------------------------------------------------------------- //-->
$>mkdir ssl.crt ssl.key
$>openssl req -new -x509 -days 3650 -keyout ./ssl.key/server.key -out ./ssl.crt/server.crt -subj '/CN=host.domain Certificate'
...
$>cp ssl.key/server.key ssl.key/server.key.org
$>openssl rsa -in ssl.key/server.key.org -out ssl.key/server.key
...
$>chmod 400 ssl.key/server.key
$>chmod 400 ssl.key/server.key.org
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://mirror.deri.at/apache/httpd/modpython/mod_python-3.3.1.tgz
...
$>tar xzvf mod_python-3.3.1.tar.gz
$>cd mod_python-3.3.1
$>./configure --with-apxs=/usr/local/apache2/bin/apxs
...
$>make
$>make install
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
...
$>tar xzvf ruby-1.8.7.tar.gz
$>cd ruby-1.8.7
$>./configure
...
$>make
$>make install
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://downloads.sourceforge.net/swig/swig-1.3.36.tar.gz?modtime=1214350580&big_mirror=0
...
$>tar xzvf swig-1.3.36.tar.gz
$>cd swig-1.3.36
$>./configure --with-python=/usr/bin/python --with-perl=/usr/bin/perl --with-ruby=/usr/local/bin/ruby --without-php4
...
$>make
$>make check
$>make install
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://www.webdav.org/neon/neon-0.28.3.tar.gz
...
$>tar xzvf neon-0.28.3.tar.gz
$>cd neon-0.28.3
$>./configure --with-expat --with-libxml2 --with-ssl --with-libs=/usr/ssl --enable-shared=yes
...
$>make
$>make install
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://initd.org/pub/software/pysqlite/releases/2.4/2.4.1/pysqlite-2.4.1.tar.gz
...
$>tar xzvf pysqlite-2.4.1.tar.gz
$>cd pysqlite-2.4.1
$>python setup.py build
$>python setup.py install
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://subversion.tigris.org/downloads/subversion-1.5.2.tar.gz
...
$>tar xzvf subversion-1.5.2.tar.gz
$>cd subversion-1.5.2
$>rm -rf /usr/local/lib/libsvn*
$>rm -rf /usr/local/lib/svn-python/*
$>rm -rf /usr/local/lib/libexpat* /lib/libexpat* /usr/lib/libexpat*
$>sh ./autogen.sh
$>./configure --with-ssl=/usr/ssl --with-neon=/usr/local --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-apxs=/usr/local/apache2/bin/apxs --with-zlib=/usr/lib --with-swig=/usr/local/bin/swig PYTHON2=/usr/bin/python PERL=/usr/bin/perl --without-jdk --without-jikes --without-junit
...
$>make
$>make install
$>make swig-py
$>make install-swig-py
$>make swig-pl
$>make install-swig-pl
$>echo /usr/local/lib/svn-python > /usr/lib/python/site-packages/svn-python.pth
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://www.clearsilver.net/downloads/clearsilver-0.10.5.tar.gz
...
$>tar xzvf clearsilver-0.10.5
$>cd clearsilver-0.10.5
$>vi scripts/document.py (change the first line to "/usr/bin/python" instead of /bin/env python)
...
$>./configure --with-apache=/usr/local/apache2 --with-python=/usr/bin/python --with-ruby=/usr/local/bin/ruby --with-perl=/usr/bin/perl --disable-csharp --disable-java --enable-gettext
...
$>make
$>make install
$>cd python
$>make install #(That should install the Python bindings for ClearSilver)
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //-->
$>wget http://prdownloads.sourceforge.net/docutils/docutils-0.5.tar.gz?download
...
$>tar xzvf docutils-0.5.tgz
$>cd docutils-0.5
$>python setup.py build
$>python setup.py install
$>cd /tools
$>./buildhtml.py ../
$>cd /usr/local/src<!-- ------------------------------------------------------------------------- //--> This will byte-compile the python source code and install it in the site-packages directory of your python installation. The directories cgi-bin, templates, htdocs, wiki-default are all copied to $prefix/share/trac. The script will also install the trac-admin command-line tool, used to create and maintain project environments. " trac-admin" is the command center of Trac. <!-- ------------------------------------------------------------------------- //-->
$>wget http://ftp.edgewall.com/pub/trac/Trac-0.11.1.tar.gz
...
$>tar xzvf Trac-0.11.1.tar.gz
$>cd Trac-0.11.1.tar.gz
$>python ./setup.py install
...
$>cd /usr/local/apache2/htdocs
$>ln -s /usr/local/share/trac/htdocs trac (we link the trac stuff to apache2 htdocs)
$>groupadd svn-grp<!-- ------------------------------------------------------------------------- //-->
$>useradd svn -G svn-grp -s /bin/bash
$>passwd svn (some password for user svn)
$>mkdir /data<!-- ------------------------------------------------------------------------- //-->
$>mkdir /data/repos-new
$>chown -R svn.svn-grp /data/*
...
$>now login as user "svn" !!! (you are now user svn) !!!
$>svnadmin create /data/repos-new/MyProject --fs-type fsfs
$>svn mkdir file:///data/repos-new/MyProject/trunk -m "trunk"
...
$>su root (type password for root, you are now user root) !!!
$>trac-admin /data/repos-new/MyProjectTrac initenv<!-- ------------------------------------------------------------------------- //-->
change: Project Name [My Project]> to MyProject,
change: Path to Repository [/var/svn/test] to /data/repos-new/MyProject
$>chgrp -R svn-grp /data/repos-new/
$>chmod -R 770 /data/repos-new/
$>vi /usr/local/apache2/conf/httpd.confOpen your webbrowser and type "http://yourip-or-domain/trac". If everything is perfect you can see the welcome message. Also have a look at the "Browse Source" button, there you can see the added subversion "trunk" directory. <!-- ------------------------------------------------------------------------- //-->
(change the Apache user to "svn")
(change the Apache group to "svn-grp")
...
add the following lines to point to your project:
------------------
SetEnv PYTHON_EGG_CACHE /home/svn
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
SetEnv TRAC_ENV "/data/repos-new/MyProject"
</Location>
------------------
(save the configuration and start Apache2 like)
$>/usr/local/apache2/bin/apachectl start
$>cd /data/repos-newDon`t forget to change "ssl.conf" and "httpd.conf" if you use ssl!
$>touch svn-auth-file
$>chown svn.svn-grp svn-auth-file
$>chmod 440 svn-auth-file
...
add all user who should have access to the Repository via:
$>htpasswd2 -cb /data/repos-new/svn-auth-file user password
and change the Location settings in httpd.conf:
------------------
<Location /trac>
DAV svn
SVNPath /data/repos-new/MyProject
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /data/repos-new/svn-auth-file
Require valid-user
</Location>
------------------
(save the configuration and restart Apache2)
$>/usr/local/apache2/bin/apachectl stop
$>/usr/local/apache2/bin/apachectl startssl
SSLRandomSeed startup builtin<!-- ------------------------------------------------------------------------- //-->
SSLRandomSeed connect builtin
<IfDefine SSL>
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex
<VirtualHost _default_:443>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName server.domain:443
ServerAdmin [email protected]
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache2/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</VirtualHost>
</IfDefine>
* If you get the following:And start Apache2 now.
Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server...
Add to /usr/local/apache2/httpd.conf "LoadModule" lines:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
. And add "/usr/local/lib" to /etc/ld.so.conf and then run /etc/ldconfig.
...
* If you get the following:
ExtractionError: Can't extract file(s) to egg cache\n\nThe following error
occurred while trying to extract file(s) to the Python egg\ncache:\n\n
[Errno 13] Permission denied: '/root/.python-eggs'\n\nThe Python egg cache
directory is currently set to:\n\n /root/.python-eggs\n\nPerhaps your
account does not have write access to this directory?
You can\nchange the cache directory by setting the PYTHON_EGG_CACHE environment\nvariable
to point to an accessible directory.\n.
Add following line to /usr/local/apache2/bin/envvars:
export PYTHON_EGG_CACHE=/home/svn