Ok, there’s probably a million Blog posts, tutorials and HowTos on how to do this already. Yet I still find it hard to find short instructions on how to set up a subversion server quickly. I just had to do it again, and it took me longer than expected, so here it goes.
My requirements are pretty basic:
- WebDAV so I can access the repository over HTTP.
- I don’t need too much security, so SSL won’t be needed.
- I want SVN:Web, a web front end to the repositories.
Here’s what I did for the Subversion+WebDAV part. Note that I’m currently on IBM’s OpenClient Linux Distribution which is based on RedHat.
- I made sure that the httpd package is installed. I didn’t have to install it, so I guess it’s installed by default.
- I had to install the mod_dav_svn package with yum:
$ sudo yum install mod_dav_svn
- The package installs a config file at /etc/httpd/conf.d/subversion.conf. By default, the <Location> tag is commented out. I just copied it, removed the comment signs and adjusted the values to my needs. This is what it now looks like:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /repos> DAV svn SVNParentPath /var/www/svn <LimitExcept GET PROPFIND OPTIONS REPORT> AuthType Basic AuthName "Authorization Realm" AuthUserFile /var/www/passwd Require valid-user </LimitExcept> </Location>
- Now the Apache HTTP Server will serve the contents of /var/www/svn via WebDAV (I think), but it will query for a valid user entry. The entry must be created as follows:
# cd /var/www # htpasswd -c passwd <username>
- Next, I created the direcories for the repositories. As root, I ran these commands:
# cd /var/www # mkdir svn # cd svn # svnadmin create <name of repository> # chown -R apache:apache <name of repository>
- I then activated the HTTP service so the Apache Web Server would be started at boot time. I did this using a GUI tool called system-config-services. I had to check the box next to the httpd entry. I didn’t want to reboot right aways, so I clicked Start in the toolbar. The tool told me that the service would now be running and I could verify this by going to http://localhost/. Testing the Subversion part was easy, too. Navigating to http://localhost/repos/example did the trick. Note that the actual repository name must be used instead of "example".
- Oh, and I want at least minimal security. That is, I want the HTTP Server to serve pages only to the local machine. Therefore, I changed the Listen directive in the server config uration file to this:
The second part was installing the SVN::Web CGI Script. Here’s what I did to do it.
- First, I had to install the subversion-perl package with yum. As root, I ran
# yum install subversion-perl
- Second, I installed the actuall SVN::Web script through CPAN. Again as root, I did
# cpan install SVN::Web
- I then created a directory that would hold all the SVN::Web files:
#cd /var/www #mkdir svnweb
- In that directory, I let the Perl script set itself up using default values:
# cd /var/www/svnweb # svnweb-install
- The last step created a file called config.yaml. It must be edited so the CGI script finds the repositories. Near the end, I edited the reposparent value:
- Now, as the final step, the script needs to be introduced to the Apache Server. I created a file svnweb.conf in /etc/httpd/conf.d with the following contents:
Alias /svnweb /var/www/svnweb AddHandler cgi-script .cgi <Directory /var/www/svnweb> Options All ExecCGI DirectoryIndex index.cgi </Directory>
After restarting the Apache HTTP Server, I could access http://localhost/svnweb and see the repositories.