Prerequisites
It is assumed that you already have a basic Ubuntu server running, and that the other developers can connect to it. If you want to allow them to access the Subversion server with the secure svn+ssh protocol, then each developer must also be able to login to your machine with SSH.Basic Subversion Setup
Begin by installing the Subversion package:
$ sudo apt-get install subversion
/home/svn
or
/usr/local/svn
for this purpose, and you can choose either. I
personally prefer /usr/local/svn
over /home/svn
, as I
like to keep /home for home directories of real users of the system.
$ sudo mkdir /usr/local/svn
$ sudo mkdir /usr/local/svn/repos
svn
.
$ sudo groupadd svn
/usr/local/svn/repos
to the
new group using the chgrp
command:
$ sudo chgrp svn /usr/local/svn/repos
svn
group also need write access to the
repos
directory, so use chmod
to add the write
permission for the group:
$ sudo chmod g+w /usr/local/svn/repos
repos
directory (in other words, anything committed
to the repositories) will also be owned by the group. To
accomplish this, use chmod
again to set the set-group-ID bit on
the directory, which causes any file created inside it to have the same group
ownership as the directory itself. Effectively, everything in
repos
will belong to the svn
group.
$ sudo chmod g+s /usr/local/svn/repos
svn
group. Go ahead and add yourself to
the group:
$ sudo usermod -a -G svn michal
$ groups
michal adm dialout cdrom plugdev lpadmin admin sambashare svn
$ sudo usermod -a -G svn jimmy
$ sudo usermod -a -G svn craig
Creating a Test Repository
You can now create a repository. In the following steps, I'll
demonstrate how to create a simple test repository containing one text
file, and how to check out and commit files. If you're not familiar with
Subversion, then this could be a good exercise to learn the basics.
Otherwise, you can skip all the test checkouts and commits and just
create the repository for your project.The repository will be a subdirectory in the
repos
directory,
and will have its group ownership set to svn
(thanks to the
chmod g+s
you did earlier). However, that's not all – you also
need to make sure the repository will be group writable, so that the other
members of the svn
group will be able to commit files. To do this,
set the umask to 002
:
$ umask 002
022
and it corresponds to read/write permissions for the file
owner, and read permissions for the group and others. The new value,
002
, also gives write permissions to the group, which is just what
you need.Create the repository using the
svnadmin
command:
$ svnadmin create /usr/local/svn/repos/test
$ umask 022
$ svn checkout file:///usr/local/svn/repos/test
Checked out revision 0.
test
. Go ahead and create a simple "hello world" text file in that
directory:
$ cd test
$ echo 'Hello, World!' > hello.txt
svn add
command:
$ svn add hello.txt
A hello.txt
svn commit
:
$ svn commit -m "Added a 'hello world' text file."
Adding hello.txt
Transmitting file data .
Committed revision 1.
hello.txt
file is now in the repository.Accessing the Repository with the Svn Protocol
Remote repository access with the svn protocol requires you to usesvnserve
, a Subversion server program. Each repository has a
svnserve
configuration file (stored in the conf
subdirectory) which controls how the repository can be accessed with svnserve
.First, create a passwords file that lists the users of the repository and their passwords. This will be a common passwords file for your development team and you will be able to use it with multiple repositories.
$ sudo gedit /usr/local/svn/passwd-team
[users]
michal = somepassword
jimmy = anotherpassword
craig = yetanotherpassword
Since the passwords are stored unencrypted, it's important that you protect
the passwords file by setting the proper permissions. The file should not be
readable by anyone except the owner (which is root
), so change its
mode to 600
:
$ sudo chmod 600 /usr/local/svn/passwd-team
svnserve
configuration file in the test
repository:
$ gedit /usr/local/svn/repos/test/conf/svnserve.conf
[general]
anon-access = none
password-db = /usr/local/svn/passwd-team
realm = Team
The anon-access = none
line denies access to the repository to
unauthenticated users (by default, they are allowed read access, so they can do
checkouts). The password-db
setting tells svnserve where to look
for the passwords file when authenticating users, and the realm
setting defines the name of the authentication realm. OK, the configuration is ready, so you can now launch
svnserve
.
$ sudo svnserve -d --foreground -r /usr/local/svn/repos
svnserve
to run in daemon mode
(-d
) as a foreground process (--foreground
), and to
look for repositories in the repos
dir that was created earlier
(-r /usr/local/svn/repos
). Normally the program should be running
in the background (that's what daemon processes do), but at this moment you
only need to test it, so it's more convenient to run it in the foreground,
where you can easily kill it with Ctrl
+C
. Now, try accessing the repository using the svn protocol. You can try it on another machine over the network, or on the same computer (in another terminal). In the latter case, make sure you're not doing the checkout in the same directory where the previous test working copy was checked out, because it won't work – either delete the test directory, or
cd
to some
other location.Enter the following
svn checkout
command, replacing
192.168.10.11
with the IP address of your Subversion server (if
you're testing on the same machine, you can use 127.0.0.1
):
$ svn checkout svn://192.168.10.11/test --username jimmy
Authentication realm: <svn://192.168.10.11:3690> Team
Password for 'jimmy':
Then, it proceeds with the checkout.
A test/hello.txt
Checked out revision 1.
And there's your working copy. Now, check if it works the other way –
try modifying the file and committing it back to the repository. Open
hello.txt
with a text editor and add some text:
$ cd test
$ gedit hello.txt
$ svn commit -m "Modified the hello.txt file."
Sending hello.txt
Transmitting file data .
Committed revision 2.
Accessing the Repository with the Svn+SSH Protocol
Setting up your Subversion server for svn+ssh access is simple, as it doesn't even require using thesvnserve
program. Assuming you have a SSH server
running on the Subversion machine, and the other developers can login to it,
you don't have to configure anything – just set up the repository.You can just go ahead and check out the test project. The checkout operation is slightly different with the svn+ssh access method. First, you must specify the full path to the repository in the checkout URL:
$ svn checkout svn+ssh://192.168.10.11/usr/local/svn/repos/test --username jimmy
Then, when the server asks you for a password, you need to enter the user's
SSH password, not the one from the passwd-team
file.
jimmy@192.168.10.11's password:
And there it goes:
A test/hello.txt
Checked out revision 2.
From here, you can use your working copy the same way as with the svn
protocol.Svnserve Initialization Script
If you plan on usingsvnserve
in the long run, you
probably don't want to start it from the command-line every time the
server is rebooted. The proper way to start system services is with init
scripts located in the /etc/init.d
directory.The Subversion package for Ubuntu does not include an init script, so you have to make one yourself. Or, you can download this init script, written by yours truly. Save the script as
/etc/init.d/svnserve
and make it executable:
$ sudo chmod +x /etc/init.d/svnserve
If you chose anything other than /usr/local/svn/repos
for the repositories directory, make sure to change the path in the init script.Run
update-rc.d
to install the script:
$ sudo update-rc.d svnserve defaults
Adding system startup for /etc/init.d/svnserve ...
/etc/rc0.d/K20svnserve -> ../init.d/svnserve
/etc/rc1.d/K20svnserve -> ../init.d/svnserve
/etc/rc6.d/K20svnserve -> ../init.d/svnserve
/etc/rc2.d/S20svnserve -> ../init.d/svnserve
/etc/rc3.d/S20svnserve -> ../init.d/svnserve
/etc/rc4.d/S20svnserve -> ../init.d/svnserve
/etc/rc5.d/S20svnserve -> ../init.d/svnserve
And that's it – svnserve
will be started automatically when your system boots up. To start it manually, run this command:
$ sudo /etc/init.d/svnserve start
References
-
Version Control with Subversion
This is the official Subversion book, written by the people who
developed the version control system. The complete text of the book is
available online, and one of the chapters is fully devoted to server configuration.
- Subversion - Community Ubuntu Documentation
A guide on setting up a Subversion server on Ubuntu, published as
part of the Ubuntu Community Documentation. It covers some of the tasks
presented in this tutorial, and provides instructions on how to
configure other methods of repository access (e.g., HTTP).
original link: http://odyniec.net/articles/ubuntu-subversion-server/
Aucun commentaire:
Enregistrer un commentaire