====== Subversion ======
Subversion is definitely one of the best revision control systems out there.
===== Server Setup =====
You can run a Subversion server several ways:
- plain svnserve, optionally via (x)inetd
- via Apache using WebDAV
- tunneled via SSH
This Howto describes only the last method mentioned, as the first one is simply insecure and the second one too bloaty.
==== Setup A Dedicated User ====
This setup makes use of a single user account for all subversion users. So create one:
useradd -b /var/svn -c "dedicated SVN+SSH account" -n svn
the newly created user won't get his own home, but his basedir is ///var/svn// which is the
base directory of all subversion repositories.
I don't trust in users setting up their own accepted_keys files, so I configured OpenSSH to use
a dedicated directory for all accepted_keys files which is only writable by root:
AuthorizedKeysFile /etc/ssh/authorized_keys_files/%u
the following instructions assume this setup.
Next, edit ///etc/ssh/authorized_keys_files/svn// and add lines of the following syntax:
command="/usr/local/bin/svnserve -t --tunnel-user=",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty TYPE KEY COMMENT
replace **** with the name of the user owning the **KEY**. **TYPE**, **KEY** and **COMMENT** are the same as the fields found in regular authorized_keys files.
==== Create A Wrapper-Script for svnserve ====
The big problem when using ''svnserve'' via SSH is setting the umask correctly. Therefore create a wrapper at the path referenced in
svn's authorized_keys file:
#!/bin/sh
umask 002
. /etc/conf.d/svnserve
/usr/bin/svnserve $SVNSERVE_OPTS "$@"
parsing ///etc/conf.d/svnserve// is just for getting the content of **SVNSERVE_OPTS**. On my system the file looks like:
SVNSERVE_OPTS="--root=/var/svn"
which prevents users from having to use the full path of the filesystem to access the repositories.
==== Fix Access Rights Of Your Repositories ====
All repositories have to be:
* kept within ///var/svn//
* owned by the group ''svn''
* group-writable
===== Client Setup =====
So far there is nothing more to do than checking out the desired repository,
specifying **svn** as username:
svn co svn+ssh://svn@/