350 lines
17 KiB
HTML
350 lines
17 KiB
HTML
<!DOCTYPE html>
|
||
<html class="no-js" lang="en-GB">
|
||
<head>
|
||
<title>How to Install and Configure Subversion (SVN) Server on Ubuntu | Oliver Davies</title>
|
||
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
||
|
||
<meta property="og:url" content="https://opdavies.github.io/oliverdavies.uk/blog/2011/10/19/install-and-configure-subversion-svn-server-ubuntu">
|
||
<meta property="og:title" content="How to Install and Configure Subversion (SVN) Server on Ubuntu"/>
|
||
|
||
|
||
|
||
<meta property="og:image" content="https://opdavies.github.io/oliverdavies.uk/assets/images/me-precedent.jpg"/>
|
||
<meta property="og:image:height" content="327"/>
|
||
<meta property="og:image:type" content="image/jpg">
|
||
<meta property="og:image:width" content="327"/>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="https://opdavies.github.io/oliverdavies.uk/assets/css/main.css">
|
||
<link rel="stylesheet" href="https://opdavies.github.io/oliverdavies.uk/assets/css/blog-post.css">
|
||
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=57" sizes="57x57">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=114" sizes="114x114">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=72" sizes="72x72">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=144" sizes="144x144">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=60" sizes="60x60">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=120" sizes="120x120">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=76" sizes="76x76">
|
||
<link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=152" sizes="152x152">
|
||
|
||
<link rel="icon" href="/assets/images/me-precedent.jpg?s=160" sizes="160x160">
|
||
<link rel="icon" href="/assets/images/me-precedent.jpg?s=96" sizes="96x96">
|
||
<link rel="icon" href="/assets/images/me-precedent.jpg?s=32" sizes="32x32">
|
||
<link rel="icon" href="/assets/images/me-precedent.jpg?s=16" sizes="16x16">
|
||
</head>
|
||
<body class="">
|
||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||
<div class="container">
|
||
<div class="navbar-header">
|
||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||
<span class="sr-only">Toggle navigation</span>
|
||
<span class="icon-bar"></span>
|
||
<span class="icon-bar"></span>
|
||
<span class="icon-bar"></span>
|
||
</button>
|
||
<a class="navbar-brand" href="https://opdavies.github.io/oliverdavies.uk/">Oliver Davies</a>
|
||
</div>
|
||
|
||
<div id="navbar" class="collapse navbar-collapse" role="navigation">
|
||
<ul class="nav navbar-nav">
|
||
<li class="">
|
||
<a href="/">About</a>
|
||
</li>
|
||
|
||
<li class="">
|
||
<a href="/experience">Experience</a>
|
||
</li>
|
||
|
||
<li class="">
|
||
<a href="/testimonials">Testimonials</a>
|
||
</li>
|
||
|
||
<li class="">
|
||
<a href="/talks">Talks</a>
|
||
</li>
|
||
|
||
<li class="active">
|
||
<a href="/blog">Blog</a>
|
||
</li>
|
||
|
||
<li class="">
|
||
<a href="/contact">Contact</a>
|
||
</li>
|
||
</ul>
|
||
</div> </div>
|
||
</nav>
|
||
|
||
<div class="container">
|
||
<div class="row">
|
||
<main class="col-md-9">
|
||
<h1>How to Install and Configure Subversion (SVN) Server on Ubuntu</h1>
|
||
|
||
<p class="posted">19th October 2011</p>
|
||
|
||
<p>Recently, I needed to set up a Subversion (SVN) server on a Ubuntu Linux server. This post is going to outline the steps taken, and the commands used, to install and configure the service.</p>
|
||
|
||
<p>Note: As I was using Ubuntu, I was using the 'apt-get' command to download and install the software packages. If you're using a different distribution of Linux, then this command may be different. I'm also assuming that Apache is already installed.</p>
|
||
|
||
<p>Firstly, I'm going to ensure that all of my installed packages are up to date, and install any available updates.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo apt-get update
|
||
</code></pre>
|
||
|
||
<p>Now, I need to download the subversion, subversion-tools and libapache2 packages.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo apt-get install subversion subversion-tools libapache2-svn
|
||
</code></pre>
|
||
|
||
<p>These are all of the packages that are needed to run a Subversion server.</p>
|
||
|
||
<h2 id="create-subversion-directory">Create subversion directory</h2>
|
||
|
||
<p>Now, I need to create the directory where my repositories are going to sit. I've chosen this directory as I know that it's one that is accessible to my managed backup service.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo mkdir /home/svn
|
||
</code></pre>
|
||
|
||
<h2 id="create-a-test-repository">Create a test repository</h2>
|
||
|
||
<p>First, I'll create a new folder in which I'll create my test project, and then I'll create a repository for it.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo mkdir ~/test
|
||
$ sudo svnadmin create /home/svn/test -m 'initial project structure'
|
||
</code></pre>
|
||
|
||
<p>This will create a new repository containing the base file structure.</p>
|
||
|
||
<h2 id="adding-files-into-the-test-project">Adding files into the test project</h2>
|
||
|
||
<pre><code class="language-bash">$ cd ~/test
|
||
$ mkdir trunk tags branches
|
||
</code></pre>
|
||
|
||
<p>I can now import these new directories into the test repository.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo svn import ~/test file:///home/svn/test -m 'Initial project directories'
|
||
</code></pre>
|
||
|
||
<p>This both adds and commits these new directories into the repository.</p>
|
||
|
||
<p>In order for Apache to access the SVN repositories, the <code>/home/svn</code> directory needs to be owned by the same user and group that Apache runs as. In Ubuntu, this is usually www-data. To change the owner of a directory, use the chown command.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo chown -R www-data:www-data /home/svn
|
||
</code></pre>
|
||
|
||
<h2 id="configuring-apache">Configuring Apache</h2>
|
||
|
||
<p>The first thing that I need to do is enable the dav_svn Apache module, using the a2enmod command.</p>
|
||
|
||
<pre><code class="language-bash">$ sudo a2enmod dav_svn
|
||
</code></pre>
|
||
|
||
<p>With this enabled, now I need to modify the Apache configuration file.</p>
|
||
|
||
<pre><code class="language-bash">$ cd /etc/apache2
|
||
$ sudo nano apache2.conf
|
||
</code></pre>
|
||
|
||
<p>At the bottom of the file, add the following lines, and then save the file by pressing Ctrl+X.</p>
|
||
|
||
<pre><code class="language-apacheconf"><Location "/svn">
|
||
DAV svn
|
||
SVNParentPath /home/svn
|
||
</Location>
|
||
</code></pre>
|
||
|
||
<p>With this saved, restart the Apache service for the changes to be applied.</p>
|
||
|
||
<pre><code class="language-bash">sudo service apache2 restart
|
||
</code></pre>
|
||
|
||
<p>I can now browse through my test repository by opening Firefox, and navigating to <code>http://127.0.0.1/svn/test</code>. Here, I can now see my three directories, although they are currently all empty.</p>
|
||
|
||
<p><img class="imagecache-blog imagecache image-caption caption" title="Viewing the test repository in Firefox" src="http://oliverdavies.co.uk/sites/default/files/imagecache/blog/images/blog/how-install-and-configure-subversion-svn-server-ubuntu/viewing-test-repository-firefox.png" alt="Image: Screenshot of the test SVN repository in Firefox"></p>
|
||
|
||
<h2 id="securing-my-svn-repositories">Securing my SVN repositories</h2>
|
||
|
||
<p>Before I start committing any files to the test repository, I want to ensure that only authorised users can view it - currently anyone can view the repository and it's contents, as well as being able to checkout and commit files. To do this, I'm going to require the user to enter a username and a password before viewing or performing any actions with the repository.</p>
|
||
|
||
<p>Re-open apache2.conf, and replace the SVN Location information with this:</p>
|
||
|
||
<pre><code class="language-apacheconf"><Location "/svn">
|
||
DAV svn
|
||
SVNParentPath /home/svn
|
||
AuthType Basic
|
||
AuthName "My SVN Repositories"
|
||
AuthUserFile /etc/svn-auth
|
||
Require valid-user
|
||
</Location>
|
||
</code></pre>
|
||
|
||
<p>Now I need to create the password file.</p>
|
||
|
||
<pre><code class="language-bash">$ htpasswd -cm /etc/svn-auth oliver
|
||
</code></pre>
|
||
|
||
<p>I'm prompted to enter and confirm my password, and then my details are saved. The Apache service will need to be restarted again, and then the user will need to authenticate themselves before viewing the repositories.</p>
|
||
|
||
<p><img class="imagecache-blog imagecache image-caption caption" title="Being prompted for authorisation" src="http://oliverdavies.co.uk/sites/default/files/imagecache/blog/images/blog/how-install-and-configure-subversion-svn-server-ubuntu/being-prompted-authorisation_0.png" alt="Image: Screenshot of the authorisation prompt when opening the repository"></p>
|
||
|
||
<h2 id="checking-out-the-repository-and-commiting-files">Checking out the repository and commiting files</h2>
|
||
|
||
<p>For example, now want to checkout the files within my repository into a new directory called 'test2' within my home directory. Firstly, I need to create the new directory, and then I can issue the checkout command.</p>
|
||
|
||
<pre><code class="language-bash">$ cd ~
|
||
$ mkdir test2
|
||
$ svn checkout http://127.0.0.1/svn/test/trunk test2
|
||
</code></pre>
|
||
|
||
<p>I'm passing the command two arguments - the first is the URL of the repository's trunk directory, and the second is the directory where the files are to be placed. As no files have been commited yet into the trunk, it appears to be empty - but if you perform an ls -la command, you'll see that there is a hidden .svn directory.</p>
|
||
|
||
<p>Now you can start adding files into the directory. Once you've created your files, perform a svn add command, passing in individual filenames as further arguments.</p>
|
||
|
||
<pre><code class="language-bash">$ svn add index.php
|
||
$ svn add *
|
||
</code></pre>
|
||
|
||
<p>With all the required files added, they can be committed using <code>svn commit -m 'commit message'</code> command, and the server can be updated using the svn up command.</p>
|
||
|
||
<p class="tags">
|
||
Tags:
|
||
<a href="https://opdavies.github.io/oliverdavies.uk/blog/tags/svn">svn</a>, <a href="https://opdavies.github.io/oliverdavies.uk/blog/tags/ubuntu">ubuntu</a>, <a href="https://opdavies.github.io/oliverdavies.uk/blog/tags/version-control">version-control</a> </p>
|
||
<div class="post-pager is-flex">
|
||
<div class="is-half">
|
||
<a href="/blog/2011/08/28/create-multigroups-drupal-7-using-field-collections">
|
||
« Create Multigroups in Drupal 7 using Field Collections
|
||
</a>
|
||
</div>
|
||
|
||
<div class="is-half text-right">
|
||
<a href="/blog/2012/01/04/site-upgraded-drupal-7">
|
||
Site Upgraded to Drupal 7 »
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<div class="about-author">
|
||
<h2>About the Author</h2>
|
||
|
||
<img src="https://opdavies.github.io/oliverdavies.uk/assets/images/me-precedent.jpg" alt="Picture of Oliver" class="img-circle">
|
||
|
||
<p>Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a Senior Developer at <a href="https://microserve.io">Microserve</a> and also provides freelance consultancy services for Drupal websites, PHP applications and Linux servers.</p>
|
||
</div>
|
||
</main>
|
||
|
||
<div class="col-md-3">
|
||
<div class="panel badges text-center">
|
||
<a class="badge--da-member" href="https://assoc.drupal.org/membership" title="I’m a Drupal Association member.">
|
||
<img
|
||
src="https://opdavies.github.io/oliverdavies.uk/assets/images/da-individual-member.png"
|
||
alt="Drupal Association Individual Member"
|
||
width="152"
|
||
>
|
||
</a>
|
||
|
||
<a href="http://drupalcores.com/#opdavies">
|
||
<img
|
||
alt="I built Drupal 8 with hand holding a wrench on blue background"
|
||
src="https://opdavies.github.io/oliverdavies.uk/assets/images/drupal-8.jpg"
|
||
/>
|
||
</a>
|
||
|
||
<img
|
||
src="https://opdavies.github.io/oliverdavies.uk/assets/images/badges/acquia-certified-developer-drupal-8.png"
|
||
alt="Acquia Certified Developer - Drupal 8 Exam Badge"
|
||
height="147" width="147"
|
||
/>
|
||
|
||
<a href="http://conference.phpnw.org.uk/phpnw17">
|
||
<img src="https://opdavies.github.io/oliverdavies.uk/assets/images/badges/phpnw17.png" alt="">
|
||
</a>
|
||
</div>
|
||
<div class="availability panel panel-default">
|
||
<div class="panel-heading">Availability</div>
|
||
|
||
<div class="panel-body">
|
||
<p>
|
||
<i class="fa fa-thumbs-o-up text-warning"></i>
|
||
|
||
|
||
Currently have limited part-time capacity
|
||
</p>
|
||
<p>
|
||
<i class="fa fa-thumbs-o-down text-danger"></i>
|
||
|
||
Currently no spare full-time capacity.
|
||
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="latest-posts panel panel-default">
|
||
<div class="latest-posts__heading panel-heading">Latest blog posts</div>
|
||
|
||
<ul class="list-group">
|
||
<li class="post list-group-item">
|
||
<span class="post__title">
|
||
<a href="/blog/2017/06/09/introducing-the-drupal-meetups-twitterbot">
|
||
Introducing the Drupal Meetups Twitterbot
|
||
</a>
|
||
</span> -
|
||
<span class="post__date">9th June, 2017</span>
|
||
</li>
|
||
<li class="post list-group-item">
|
||
<span class="post__title">
|
||
<a href="/blog/2017/05/20/turning-drupal-module-into-feature">
|
||
Turning Your Custom Drupal Module into a Feature
|
||
</a>
|
||
</span> -
|
||
<span class="post__date">20th May, 2017</span>
|
||
</li>
|
||
<li class="post list-group-item">
|
||
<span class="post__title">
|
||
<a href="/blog/2017/05/15/drupalcamp-bristol-early-bird-tickets-sessions-sponsors">
|
||
DrupalCamp Bristol 2017 - Early Bird Tickets, Call for Sessions, Sponsors
|
||
</a>
|
||
</span> -
|
||
<span class="post__date">15th May, 2017</span>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
</div> </div>
|
||
<footer class="container">
|
||
<p class="copyright">
|
||
© 2010-2017 Oliver Davies. Built with <a href="https://sculpin.io">Sculpin</a>.
|
||
</p>
|
||
|
||
<div class="meetups">
|
||
<h2>Things that I organise</h2>
|
||
<ul>
|
||
<li class="meetups--drupal-bristol">
|
||
<a href="http://www.drupalbristol.org.uk" title="Drupal Bristol">
|
||
<img src="https://opdavies.github.io/oliverdavies.uk/assets/images/meetups/drupal-bristol.jpeg" alt="Drupal Bristol">
|
||
</a>
|
||
</li>
|
||
<li class="meetups--drupalcamp-bristol">
|
||
<a href="http://www.drupalcampbristol.co.uk" title="DrupalCamp Bristol">
|
||
<img src="https://opdavies.github.io/oliverdavies.uk/assets/images/meetups/drupalcamp-bristol.png" alt="DrupalCamp Bristol">
|
||
</a>
|
||
</li>
|
||
<li class="meetups--phpsw">
|
||
<a href="http://phpsw.uk" title="PHPSW">
|
||
<img src="https://opdavies.github.io/oliverdavies.uk/assets/images/meetups/phpsw.jpeg" alt="PHPSW">
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="https://opdavies.github.io/oliverdavies.uk/assets/js/site.js"></script>
|
||
|
||
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11967257-1', 'auto'); ga('send', 'pageview');</script>
|
||
|
||
</body>
|
||
</html>
|