Subversion (or SVN) is an open-source software version control system used for maintaining and tracking changes to software code. This article will walk you through the process of setting up an SVN server on CentOS 7 that is reachable from your local computer. Finally, we will test that server by creating a sample project on an SVN client.
- An existing CentOS 7 installation. If you need help setting up CentOS 7, check out our how-to for Initial CentOS 7 Setup.
- A basic knowledge of the Linux command line
The first step to getting your server running is to install SVN. On CentOS, this is most easily done using the
yum package manager. Run the following command to install SVN:
sudo yum install subversion
y, when prompted, to confirm your installation. Once completed, you should see “Complete!” in the terminal. To verify the installation, run the following command:
If properly installed, you will see a short message that gives the version details and copyright information for your SVN installation.
Creating a Repository
Before you can start using SVN, you’ll need to decide what structure you will need for your repositories. For small teams or personal use, one repository should be sufficient. If you need multiple repositories, you should repeat this section for each repository that you need. Run the following command to create a filesystem directory at
/srv/svn for the repository.
sudo mkdir /srv/svn
Next, initialize the repository using the
sudo svnadmin create /srv/svn
This command creates the necessary folder structure for an SVN repository and a few default files.
Configuring the Server
There are many options for running the SVN server. For this tutorial, we’ll use the built-in
svnserve, which is very easy to start up. This option will suit most teams that don’t need advanced options.
svnserve will look for configuration files in the
/conf directory inside of the repository. Navigate to that directory and create the file
svnadmin may create a default configuration file you can edit, as well).
sudo nano svnserve.conf
In this file, we will add two properties. First is
password-db that points to the file where users will be stored. Second is
realm, which you can think of as the “namespace” used by this repository. This realm name will be displayed to users during authentication.
password-db = passwd
realm = my company
If you are editing the pregenerated configuration file, these properties will already exist. You can remove the comment symbol (
#)–and any preceding whitespace–and edit the assignment to match above or to your liking.
/srv/svn/conf directory, you should already see the
passwd file. The
svnadmin command above creates this file automatically. Add as many users as you’d like by specifying the username and password in key-value pairs. For example:
samantha = secretpassword
robert = hunter2
By default, non-authenticated users will have read access to the repository, and authenticated users will have write access. If you need more granular control, take a look at the
authz file included in this directory. It provides many examples of access restriction.
Starting the server
To start the server, we use the
sudo svnserve -d -r /srv/svn
-d switch starts it as a background (daemon) process. The
-r switch points the server to the file system location of the repository that we created earlier. (For the full list of configuration options, run
Be sure to run this process as an elevated (root) user. If you don’t, end users will not be able to commit any changes to the repository.
The default port for
svnserve is 3690. To verify that the SVN server is running, open a browser and navigate to
myserver with the hostname or IP address of your server). You should see some text similar to below.
Example Subversion Response in Browser
Even though we can use
http:// here to make sure that the server is started, we will primarily interact with the SVN server using the custom
svn:// URL format.
Creating a Test Project
To make sure everything is set up properly, we’ll create a dummy project. From here on, you should be working from a client that has SVN installed. If you don’t have easy access to another computer (or if you are installing SVN on your computer for personal use), you can, of course, use the server that you are already working on.
Start by creating a test project folder.
Then, run the following command to import that directory into SVN. (Again, be sure to replace
myserver with the hostname or IP of your SVN server.)
svn import ~/Documents/my-first-project svn://myserver:3690/my-first-project -m "Initial commit." --username robert --password hunter2
There’s a lot of flags in that single command, so let’s review what each of them does.
import creates a new project in SVN. We specify the source and then the destination.
-m "Initial commit." is our commit message that is logged in SVN.
--password are the authentication details.
You may receive a warning that your password is going to be cached unencrypted. If your client computer is already password-protected, you may be OK with this. But for optimal security, you can enter “no” at the prompt to
Store password unencrypted, and your password will not be cached. You can also follow the suggestion of setting
store-plaintext-passwords (in the configuration file indicated) to “no” so you aren’t prompted again.
If all goes well, you should see
Committed revision 1 in the terminal.
Here are some errors you could get if something is not configured properly:
- Authentication or authorization failure: Review the setup under “Creating Users”. It’s critical that these configuration files are in the correct place and have no typos.
- Unable to connect to a repository: Make sure the server is running and that you started it with the correct
- File permission errors: Make sure the server is running with elevated permissions. If you are unsure, the
ps aux command will show you the user that is running
After finishing this tutorial, you should be able to:
- Create a basic SVN repository in CentOS 7
- Add users to the repository
- Start a server through which clients can access the repository
There are many additional options that you can configure in your installation of SVN. For further information, take a look at the SVN Book, which provides more in-depth details about SVN server configuration and maintenance.
Atlantic.net offers managed hosting services which include a layer of business-essential managed services to your hosting packages. Contact us today for more information.