To setup svn 1.4 , we need to compile both apache 2.2 and svn 1.4 from source.
This how to has been tested under Ubuntu Dapper and Edgy.
sudo apt-get install build-essential libneon25-dev autoconf libtool -y --force-yes
Before starting make sure you have removed previous apache2 and subversion installation from your system.
To do this:
sudo apt-get --purge remove apache2 subversion
sudo mv /etc/init.d/apache2 $HOME/apache2_bak
cd $HOME
mkdir softwares
cd softwares
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xvfz zlib-1.2.3.tar.gz
cd zlib-1.2.3/
./configure --prefix=/usr/local
make
sudo make install
cd ..
wget http://apache.forbigweb.com/httpd/httpd-2.2.3.tar.gz
tar xvfz httpd-2.2.3.tar.gz
cd httpd-2.2.3/
./buildconf
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http --enable-dav --enable-so --enable-maintainer-mode
make
sudo make install
sudo /usr/local/apache2/bin/apachectl start
Now test your apache2! goto browser and type http://localhost, you should see it works!!
sudo /usr/local/apache2/bin/apachectl stop
sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apachectl
sudo chmod +x /etc/init.d/apachectl
We just need to add a few lines to the file for it to work nicely:
sudo vi /etc/init.d/apachectl
Add the followinig, so the top of the file looks like:
#!/bin/sh
#
# chkconfig: - 85 15
# description: Apache is a web server.
Save the file.
sudo /usr/sbin/update-rc.d apachectl defaults
Securing Apache
It?s also a good idea to create a dedicate Apache system user account. It?ll make your install much more secure.
sudo adduser --system apache
Now we just need to make sure that Apache runs under this user. We do that by editting the configuration file:
sudo vi /usr/local/apache2/conf/httpd.conf
You need to find the lines that say:
User daemon
Group daemon
And change them so they look like:
User apache
Group nogroup
sudo /usr/local/apache2/bin/apachectl start
Installing Subversion 1.4
As we have built Apache from source, we’ll need to do the same for Subversion in order to get the Apache 2 modules mod_dav_svn and mod_authz_svn.
# rm -f /usr/local/lib/libsvn*
# rm -f /usr/local/lib/libapr*
# rm -f /usr/local/lib/libexpat*
# rm -f /usr/local/lib/libneon*
#Get the latest svn tar ball
wget http://subversion.tigris.org/downloads/subversion-1.4.2.tar.gz
tar xvfz subversion-1.4.2.tar.gz
cd subversion-1.4.2/
sh autogen.sh
./configure --prefix=/usr/local --with-apxs=/usr/local/apache2/bin/apxs --with-httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr
make
sudo make install
This will also add the relevant LoadModule directives into your Apache 2 configuration for you.
Creating your repository
Now, create your Subversion repository:
svnadmin create /home/yourusername/subversion/repos
We have to make that repository owned by Apache so that it can be accessed via the web:
sudo chown -R apache /home/yourusername/subversion/repos
Authentication File
Now create a user/password file for authentication:
/usr/local/apache2/bin/htpasswd -cm /home/yourusername/subversion/dav_svn.passwd yourusername
When prompted, enter your password.
Configuring Apache
Edit your /usr/local/apache2/conf/httpd.conf
file with the following placed at the end:
<Location /svn>
DAV svn
SVNPath /home/yourusername/subversion/repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/yourusername/subversion/dav_svn.passwd
Require valid-user
</Location>
If you want access control based on different users, add the following line after the Require valid-user line:
AuthzSVNAccessFile /home/yourusername/subversion/svn_access_control
To setup a local mirror using svnsync
To have a mirror setup first ensure that the local repo you are going to use as the mirror should have the same uuid as that of the master.
To get uuid of a repo, go to its working copy and type
svn info
now make the mirror svn’s uuid same as masters uuid, you can get the uuid by typing
svn info URL/PATH
cat – <<EOF | sudo svnadmin load –force-uuid dest
SVN-fs-dump-format-version: 2
UUID: d48dd586-eb1d-0410-b581-e6e13afcedeb
EOF
cd /home/ajopaul/subversion/repos/hooks/
vi pre-revprop-change
sudo vi pre-revprop-change
Add the following lines
#!/bin/sh
USER="3"
if [ "USER" = "svnsync" ]; then exit 0; fi
echo "Only svnsync user can change revprops" >&2
exit 1
sudo chmod +x pre-revprop-change
sudo svnsync init --username your_master_svn_username file:///home/ajopaul/subversion/repos http://xxx.xxx.xxx.xxx/svn
sudo svn proplist --revprop -r 0 http://xxx.xxx.xxx.xxx/svn
sudo svn propget file:///home/yourusername/subversion/repos --revprop -r 0 http://xxx.xxx.xxx.xxx/svn
time sudo svnsync sync file:///home/yourusername/subversion/repos
Remember! local mirrors is/should be read only
To ensure no commits happen on the local mirror add the following lines to hooks/pre-commit script
#!/bin/sh
SVNLOOK=/usr/local/bin/svnlook
USER=`SVNLOOK author -t $3 $1`
if [ "$USER" = "svnsync" ]; then
exit 0;
fi
echo "Sorry no commit allowed on mirror! use 'svn switch' to point to master repo and then point back to local mirror after the commit" >&2
exit 1
If by any chance your svnsync locks ur mirror repo or if you recieve a message such as:
Failed to get lock on destination repos, currently held by ….
Type this
svn propdel svn:sync-lock --revprop -r 0 file:///home/ajopaul/subversion/repos/
References:
Source
svnsync.txt









