June 15, 2024

Subversion Howto

Subversion with mod_dav_svn allows you to keep track of different versions of your code (or whatever else) and roll back to earlier versions if you screw it up or someone overwrites it. I’ll also get into a web viewable code tool that allows you to look at your code on the web with a viewer

Setting up subversion

This is on CentOS, though it should work on Debian/Ubuntu with a few modifications.

yum install mod_dav_svn subversion
vi /etc/httpd/conf/httpd.conf
  ServerName www.yourserverurl.com (change to a real thing and delete the # in front of the line)
service httpd start
chkconfig httpd on
vi /etc/httpd/conf.d/subversion.conf (add/uncomment something like the following)
  <Location /repos>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "your favorite name for your repos"
   AuthUserFile /etc/svn-auth-conf
   Require valid-user
htpasswd -cm /etc/svn-auth-conf yourusername
New password:
Re-type password:
mkdir /var/www/svn
cd /var/www/svn
svnadmin create yourproject
chown -R apache.apache yourproject
vi /etc/sysconfig/iptables (add this next line after the port 22 one)
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service httpd restart

Debian Howto

apt-get install subversion libapache2-svn apache2
mkdir /var/svn
mkdir /var/secure
svnadmin create /var/svn/myrepository
chown -R www-data.www-data /var/svn
vi /etc/apache2/mods-available/dav_svn.conf (add following lines to end)
  <Location /svn>
      DAV svn
      SVNParentPath /var/svn
      AuthType Basic
      AuthName "Subversion Repository"
      AuthUserFile /var/secure/.htpasswd
      AuthzSVNAccessFile /var/svn/authz
      Require valid-user
a2enmod ssl
a2enmod dav
a2enmod dav_svn
htpasswd -cm /var/secure/.htpasswd username
cp /var/svn/yourprojectname/conf/authz /var/svn/
vi /var/svn/authz (add these lines to end)
  youruser = rw
mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
openssl req -new -x509 -days 365 -nodes -out apache.pem -keyout apache.key
vi /etc/apache2/sites-available/yourprojectname (add these lines)
  <VirtualHost *:443>
   ServerAdmin admin@server.name
   ServerName your.server.name
   DocumentRoot /usr/share/websvn
   <Directory /usr/share/websvn>
     Options -Indexes FollowSymLinks
     AllowOverride None
     Order deny,allow
     Allow from all
   ErrorLog ${APACHE_LOG_DIR}/error_ssl.log
   LogLevel warn
   CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/apache.pem
   SSLCertificateKeyFile /etc/apache2/ssl/apache.key
a2ensite yourprojectname
apt-get install websvn
(select config now)
(deselect all options besides apache2)
(update paths to /var/svn)

Now set up your LAPTOP. First set up automatic login via ssh so you don’t have to type your password every time.

ssh-keygen -t dsa -f ~/.ssh/id_dsa -C "yourusername@laptop's_IP_or_hostname.com"
cat ~/.ssh/id_dsa.pub | ssh yourusername@server.ip.or.hostname 'cat - >> ~/.ssh/authorized_keys'

Now set up subversion on your LAPTOP and check out some code from your svn server:

sudo apt-get install subversion