Subversion with Apache, CentOS and Active Directory

I’m a big fan of the Collabnet implementation of Subversion.  They set you up with installable RPMs that handle but bulk of what you need to do to get subversion working.  They have the new Subversion Edge that is 100% Apache and will work with active directory, but if your team has hundreds of thousands of files using Apache to check out is going to be significantly slower than SVN+SSH. Edge cannot do svn+ssh, but it does have a nice web GUI.  If you aren’t worried about speed I 100% recommend using Edge.  You can then just skim this article because I do have some hints on properly setting up the LDAP connectivity that apply to a GUI or command line setup.  if you have a team like my team, then you need a faster transport method and that means svn+ssh

First, why is it faster?  Easy.  SSH opens a single connection an reuses it for all of the files.  Set your Apache  loglevel to debug sometime watch the logs when a user checks out files.  Sure, you can configure Apache to more efficiently spawn and destroy children, but I don’t think it’s worth the time.

UPDATE – With the release of Subversion 1.7, which is an awesome rewrite from the ground up, many of my concerns about speed have gone away.  SVN+SSH is still going to be faster than Apache, but you may be able okay.  I really like Subversion Edge and think you should consider installing it.

PREREQUISITES

CentOS /RedHat 5.x with the base default, but patched.

LET’S DO IT

Install CentOS5 (or Redhat).  Just do a default install and make sure it’s updates with yum.  Then get the CollabNet RPMS:

http://www.open.collab.net/downloads/subversion/linux1.5.html

Grab the Server, Client and Extras for your architecture and get them on your server.  Then install it with yum.

yum localinstall –nogpgcheck CollabNetSubversion-server-1.6.15-1.x86_64.rpm CollabNetSubversion-extras-1.6.15-1.x86_64.rpm CollabNetSubversion-client-1.6.15-1.x86_64.rpm

This sets you, but you will still need to configure things.  I like to keep my repos in a directory called /repos.  So, I’d make sure this exists now:

mkdir /repo; chown csvn:csvn /repo

Continue reading