How to Set up a Subversion (SVN) Server in Linux

This guide details the steps taken to create a proper SVN server, as opposed to using a not-recommended network share, as means of creating and accessing repositories.

These steps detail the steps that were needed to (eventually) get the thing working, enabling you to check out source code, projects etc remotely and is hopefully much simpler to follow than a lot of the stuff that is currently already out there. If it saves you the faffs and headaches I encountered as a Linux non-expert, then all the better.

1. Download the Subversion tarball

Download the software to a chosen location on your Linux hard drive. At present the latest version is 1.6.17 and you can get the tarball (my preference) from here or get the complete install package from here.

2. Install Subversion

Once downloaded, open up a command prompt, cd to the directory where it was downloaded and extract:

$gunzip subversion-1.6.17.tar.gz
$tar -xvf subversion-1.6.17.tar

Then cd to the subversion-1.6.17/ directory and run the following commands:

$./configure
$make
$make install

3. Deal with install problems, if any

If you get problems when running ./configure, just follow the instructions given from the command line. See example screenshot below. Depending what prerequisites you already have installed, you may get the following install error when attempting to run ./configure, that complains of a missing sqlite3.c file:

If this is the case, download the sqlite-amalgamation-3.6.13 as suggested in the install error message from the following location…

http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz

… and unzip it as before:

$gunzip sqlite-amalgamation-3.6.13.tar.gz
$tar -xvf sqlite-amalgamation-3.6.13.tar

Then copy the sqlite3.c file contained in the resulting sqlite-amalgamation-3.6.13 directory into your subversion-1.6.17/sqlite-amalgamation folder. The sqlite-amalgamation directory will not yet be present so cd into the subversion-1.6.17 directory and create it:

$mkdir sqlite-amalgamation

Then copy the sqlite3.c file into it:

$cp sqlite-3.16.13/sqlite3.c subversion-1.6.17/sqlite-amalgamtion/

Then cd into the subversion-1.6.17/ directory and try running the ‘./configure’ command again, followed by the ‘make’ and ‘make install’ commands if this is successful.

4. Create a Subversion Repository

Use svnadmin to create a repository of your choice eg “MyRepos” located at the path of your choice:

$svnadmin create /MyPath/MyRepos

5. Edit the repository configuration file

Using your Linux-based text editor of choice (eg vi, emacs, kate etc) open up the svnserve file so that we can modify it’s access settings for authenticated/non-authenticated users:

$vi /MyPath/MyRepos/conf/svnserve.conf

In that file, add the following three lines:

anon-access = none
auth-access = write
password-db = passwd

Please note: don’t just insert these three lines at the very end, like I did. They need to go in the [general] section, not the [sasl] section, otherwise “Authorization failed” type errors will occur whenever you try to check in any new stuff.

6. Modify the password file

Again using your text editor, open the password file so that we can add users. You will probably need to login with root privileges in order to do tasks like these:

$vi /MyPath/MyRepos/conf/passwd

In that file add the users:

# add users in the format : user = password
andy = mypassword

7. Import your project

Assuming you have a project folder somewhere containing code etc that you wish to put under version control, use the svn import command to do this:

$svn import /MyProjects/MyProj file:///MyPath/MyRepos/MyProj -m "New Import"

If you get an error message similar to the following when doing a new import…

svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found

… then make sure you have included -m “New import” on to the end of the import command. Then it will work.

8. Start the SVN server as Daemon

The easiest way is to run svnserve as a standalone “daemon” process, using the -d option:

$svnserve -d

Use this if you don’t mind having to re-start the SVN server every time the machine is re-started.

9. Check project out of the repository

Try this on other remote machines as well:

$svn co svn://192.168.0.99/MyPath/MyRepos/MyProj

The IP address 192.168.0.99 listed may not work for you. To obain the necessary Linux server IP address you will need to run the ifconfig command:

$ifconfig -a

This will give you an output something like this giving you the information you need:

10. To back up a Subversion repository

Don’t try and copy and paste the repository or anything like that. Create a gzipped Subversion file as follows:

$svnadmin dump /MyPath/MyRepos | gzip > MyBackupRepos.svn.gz

Then you can copy the gzipped file to your backup medium of choice: CD, online, external drive etc.

11. To restore a backed-up Subversion respository

Unzip the backup *.gz file to give you the Subversion file (*.svn) you need.

$gunzip MyBackupRepos.svn.gz

Then use svnadmin to create a new repository, calling it what you like:

$svnadmin create /MyPath/MyRestoredRepos

And load the Subversion file you unzipped into it:

$svnadmin load /MyPath/MyRestoredRepos < /PathWhereSVNfileLives/MyBackupRepos.svn

You should then be in a position to check out the repository and use it as normal.

11 Comments

    • Because I don’t have to – this is just a simple how-to guide.

      But you can add them if you want, by adding them in your main project branch. Kind of like this:

      $ mkdir MyProj/trunk
      $ mkdir MyProj/branches
      $ mkdir MyProj/tags
      $svn import /MyProjects/MyProj file:///MyPath/MyRepos/MyProj -m “New Import”

      “…Because when I follow your directions I get this error: svn: ‘/srv/svn’ is not a working copy…”

      You may want to be more specific in how to reproduce this error? Which one of the umpteen directions results in this error? Otherwise I haven’t got a clue what you’re talking about.

        • I think I’m beginning to understand what you mean. Please understand that I do not know your setup and would need as much detail as necessary to understand your problem.

          Running $svn mkdir (as opposed to just $mkdir) creates the directory in your project in the REPOSITORY. But presumably there is no repository yet, hence the “svn: … is not a working copy” type error.

          When you then check out the project (or update maybe?), svn will put the new directory in your working copy. But I guess the repository will have needed to have been created first.

          If you run $mkdir alone, like I have done here, you need to commit the new directory to the repository.

          When I get the time, I’ll see if I can combine the two approaches.

          On the StackOverflow site, I have seen suggested that the you first create the directory with standard $mkdir. Then do your work (you can cd into the directory as normal), then commit your changes when done.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>