Difference between revisions of "SVN server installation (Linux)"

(2. Adjust rights)
 
(6 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
  
=SVN server (Linux)=
+
=Setup SVN server=
  
 
==installation==
 
==installation==
Line 29: Line 29:
  
  
==Server automatic startup==
+
==Automatic startup==
  
  
Line 116: Line 116:
  
  
==Create SVN repository==
+
 
 +
=Create SVN repository=
  
 
To do any advanced task, you've to use "svnadmin"
 
To do any advanced task, you've to use "svnadmin"
Line 125: Line 126:
  
  
===1. Create root folder===
+
==1. Create root folder==
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 141: Line 142:
  
  
===2. Adjust rights===
+
==2. Adjust rights==
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 +
mkdir -p /var/svn/myRepo/conf/
 
vim /var/svn/myRepo/conf/svnserve.conf
 
vim /var/svn/myRepo/conf/svnserve.conf
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 149: Line 151:
 
Adjust values:
 
Adjust values:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
anon-access = none → disable anonymous access
+
anon-access = none
auth-access = write → allow read / write to all users
+
auth-access = write
password-db = passwd → password required to log-in
+
password-db = passwd
realm = 'java' → Name of the current repo (without quotes!)
+
realm = 'java'
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===3. Create users===
+
==3. Create users==
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 164: Line 166:
  
  
===Repository access===
+
==Repository access==
 
You can use the repository with the following SVN URL: svn://server/''java''  
 
You can use the repository with the following SVN URL: svn://server/''java''  
  
Line 170: Line 172:
  
  
=Web access (Linux)=
 
 
==Required packages==
 
 
<syntaxhighlight lang="bash">
 
# Apache2 modules
 
apt-get install libapache2-mod-svn
 
apt-get install libapache2-mod-ldap-userdir
 
# Enable modules
 
a2emod dav_svn
 
a2enmod ldap authnz_ldap ldap_userdir
 
# Restart server
 
service apache2 restart
 
</syntaxhighlight>
 
 
 
 
==Configuration==
 
 
You have 2 solutions to setup the SVN dav.
 
* Use the /etc/apache2/mods-enabled/'''dav.conf'''
 
* VirtualHost configuration
 
 
From a maintenance point of view it's '''better to use the VirtualHost configuration'''.
 
 
 
Add the following declaration:
 
 
<syntaxhighlight lang="apache">
 
<Location /svn>
 
    <IfModule dav_svn_module>
 
            # Enable DAV module
 
            DAV svn
 
 
            # SVN root
 
            SVNParentPath /var/svn
 
            SVNListParentPath On
 
 
            # LDAP authentication
 
            AuthType Basic
 
            AuthName "SVN Repository"
 
            AuthBasicProvider ldap
 
            AuthLDAPURL "ldap://localhost:389/ou=people,dc=vehco,dc=com?uid"
 
            Require valid-user
 
    #Require ldap-group cn=vehco_staff
 
        </IfModule>
 
</Location>
 
</syntaxhighlight>
 
 
 
!! Note that is it recommended to AVOID ''"/svn"'' !!
 
 
 
 
Reload apache2 server
 
 
<syntaxhighlight lang="bash">
 
service apache2 restart
 
</syntaxhighlight>
 
 
 
==Firewall==
 
 
You need to adjust your FW if you plan to serve SVN by HTTP.
 
 
 
<syntaxhighlight lang="bash">
 
IPT=`which iptables`
 
# Only serve SVN by HTTP to some servers
 
CODE_VEHCO_COM=192.168.1.45
 
PROXY_VEHCO_COM=192.168.1.44
 
 
$IPT -A INPUT -p tcp --dport 80 -s $CODE_VEHCO_COM -j ACCEPT
 
$IPT -A INPUT -p tcp --dport 80 -s $PROXY_VEHCO_COM -j ACCEPT
 
$IPT -A INPUT -p tcp --dport 80 -s 0.0.0.0/0 -j DROP                    # DROP all the rest !
 
</syntaxhighlight>
 
 
 
 
==Web access==
 
 
Now instead of “svn://” + dedicated SVN user you can use “https://myServer/dav_svn/” + LDAP user.
 
 
try http://myServer/svn
 
 
 
 
==Improving website==
 
 
Source: http://www.reposstyle.com/
 
 
>>Summary<<
 
 
<syntaxhighlight lang="bash">
 
cd /var/www/
 
wget http://downloads.sourceforge.net/project/reposserver/reposstyle/repos-style-with-plugins-2.4.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Freposserver%2Ffiles%2Freposstyle%2F&ts=1410467806&use_mirror=optimate
 
mv repos-style-with-plugins-2.4.zip\?r\=http%3A%2F%2Fsourceforge.net%2Fprojects%2Freposserver%2Ffiles%2Freposstyle%2F repos-style-with-plugins-2.4.zip
 
 
# unzip the archive
 
unzip repos-style-with-plugins-2.4.zip
 
rm repos-style-with-plugins-2.4.zip
 
 
# set rights
 
chown -R www-data:www-data /var/www/
 
 
# Update VHost
 
 
</syntaxhighlight>
 
 
 
 
=Advanced web access (Linux)=
 
 
 
If you put your SVN server behind a proxy you might encounter some 502 errors... Example of advanced configuration:
 
 
[[File:SVN server access.png|none|SVN behind proxy]]
 
 
 
 
In that case, you need to adjust both the GATEWAY and the SVN server apache2 configuration.
 
 
 
==Gateway configuration==
 
 
The GW must be able to understand and forward HTTP DAV requests such as (PROPFIND, COPY, etc.).
 
 
 
You need to enable some Apache2 modules
 
 
<syntaxhighlight lang="bash">
 
apt-get install -y libapache2-mod-svn
 
a2enmod dav dav_svn
 
</syntaxhighlight>
 
 
 
You also need to adjust your LOCATION settings:
 
 
<syntaxhighlight lang="apache">
 
<Location /svn>
 
    DAV svn
 
    ProxyPass http://svn.vehco.com/svn
 
    ProxyPassReverse http://svn.vehco.com/svn
 
</Location>
 
</syntaxhighlight>
 
 
 
!! NOTE !!
 
 
Some experts said the "''DAV svn''" instruction is not required. However, it seems to improve compatibility with older clients. I advise you to keep it !
 
 
 
 
Restart / Reload Apache2 Gateway
 
 
<syntaxhighlight lang="bash">
 
service apache2 restart
 
</syntaxhighlight>
 
 
 
 
 
==SVN server==
 
 
You need to adjust few things on the SVN too, '''especially if your proxy is using HTTPS and your SVN server HTTP only'''.
 
 
 
Enable the ''headers'' modules:
 
<syntaxhighlight lang="bash">
 
a2enmod headers
 
</syntaxhighlight>
 
 
 
 
Add the following instruction into your virtual host to support Headers
 
<syntaxhighlight lang="apache">
 
<VirtualHost *:80>
 
    ...
 
 
    RequestHeader edit Destination ^https http early
 
 
    ...
 
</VirtualHost>
 
</syntaxhighlight>
 
 
 
 
Restart / Reload Apache2 Gateway
 
 
<syntaxhighlight lang="bash">
 
service apache2 restart
 
</syntaxhighlight>
 
 
 
Now it's OK !
 
 
You should not have any 502 errors anymore.
 
 
 
 
=SVN server (Windows)=
 
 
 
==Installation==
 
* Download Visual SVN server for windows: http://www.visualsvn.com/server/download/
 
* Install Visual SVN server. Choose your installation folder + repository directory
 
 
 
==Users / groups configuration==
 
* Open the '''Visual SVN server''' application.
 
* Open properties
 
Action > Properties
 
[[File:SVN server windows 1.png|none|Windows SVN server 01]]
 
 
*Click Repositories, adjust “Everyone” rights to Read Only
 
[[File:SVN server windows 2.png|none|Windows SVN server 02]]
 
 
* Add a new user and add 'read / write' permissions to this new user
 
[[File:SVN server windows 3.png|none|Windows SVN server 03]]
 
 
[[File:SVN server windows 4.png|none|Windows SVN server 04]]
 
 
 
==Create a new repository (1) – standalone use==
 
Right click on “repositories” -> create New Repository
 
[[File:SVN server windows 5.png|none|Windows SVN server 05]]
 
 
Enter the repository name and let the server create the default structure for you:
 
[[File:SVN server windows 6.png|none|Windows SVN server 06]]
 
 
→ Note the SVN URL. You’ll need it later when you’re gonna setup your project, within the maven pom.
 
 
 
==Create a new repository (2) – mirror Google Code==
 
Google provides a free subversion service through its “Google Code” service. However, there’s no quality analysis. … So, in order to provide quality checks we will mirror the google code repository.
 
 
Therefore, we’ll be able to perform quality scans.
 
 
* Create a new repository, see previous chapter
 
[[File:SVN server windows 7.png|none|Windows SVN server 07]]
 
  
* Right click on the repository -> All tasks -> Manage hooks
+
=Upgrade repository (Linux)=
[[File:SVN server windows 8.png|none|Windows SVN server 08]]
 
  
You have to '''edit''' the “pre-revision property change hook” and put the following command:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
exit 0
+
cd /var/svn/
 +
svnadmin upgrade myRepo
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This will check that the execution (synchronization) was successful.
 
[[File:SVN server windows 9.png|none|Windows SVN server 09]]
 
 
 
 
=SVN client=
 
The SVN client version must match the server version for better performances and to avoid errors.
 
 
 
==Windows==
 
Tortoise SVN is the best one available.
 
http://tortoisesvn.tigris.org/
 
 
!! During installation, don't forget to install the '''svn command line tools''' !!
 
 
 
==Linux==
 
  
===Command line client===
+
Then you can check the SVN repository version:  
<syntaxhighlight lang="bash">
 
apt-get install subversion
 
</syntaxhighlight>
 
Then you can use the ''svn'' command:
 
* svn co --username=''yourUserName'' --password=''yourpassword'' http://path-to-your-svn
 
* svn add ''file''
 
* svn commit -m "my revision comment"
 
  
===Graphical client===
 
RabbitVCS is a good alternative to tortoise SVN: http://rabbitvcs.org/
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
apt-get install rabbitvcs-cli rabbitvcs-core rabbitvcs-gedit rabbitvcs-nautilus
+
cat /var/svn/myRepo/db/format
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 20:29, 27 September 2016


SVN is used to managed file revisions, branches and application releases. You have to install a SVN server, then a client on each remote computer.


Setup SVN server

installation

Required package

apt-get install subversion

Source folder You must indicate to subversion how it's going to work

mkdir /var/svn
mkdir /var/svn/myRepository

Set rights

chown -R www-data:www-data /var/svn/myRepository 
chmod -R 777 /var/svn/myRepository

→ Use "www-data" user:group if you want to setup web access through HTTP(S) protocol later on.


Automatic startup

Create SVN startup script

vim /etc/init.d/subversionServer

Put the following content

#!/bin/sh
### BEGIN INIT INFO
# Provides:             svn
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    SVN server
### END INIT INFO

do_start () {
	svnserve -d -r /var/svn --pid-file /var/run/svnserve.pid
}
do_stop () {
	start-stop-daemon --stop --quiet --pidfile /var/run/svnserve.pid
}

case "$1" in
	start)
  		do_start
 		;;
 	stop)
 		do_stop
 		exit $?
 		;;
 	restart)
 		do_stop
		sleep 1s
 		do_start
 		;;
	*)
		echo "Usage: $0 start|stop|restart" >&2
		exit 3
		;;
esac


Set execution flags:

chmod 750 /etc/init.d/subversionServer


Create symlinks:

ln -s /etc/init.d/subversionServer /usr/bin/subversionServer



Update boot sequence

Register SVN server to server startup

cd /etc/init.d
update-rc.d subversionServer defaults


Start SVN server

/etc/init.d/subversionServer start


How to remove SVN from boot?

Just execute the following sequence

update-rc.d -f subversionServer remove



Create SVN repository

To do any advanced task, you've to use "svnadmin" To create repository you have to: 1. Create folder 2. Defines rights 3. Creates users


1. Create root folder

svnadmin create /var/svn/myRepo

Create repo structure

cd /var/svn/myRepo
mkdir trunk
mkdir tags
mkdir branches
chmod -R 755 */


2. Adjust rights

mkdir -p /var/svn/myRepo/conf/
vim /var/svn/myRepo/conf/svnserve.conf

Adjust values:

anon-access = none
auth-access = write
password-db = passwd
realm = 'java'

3. Create users

vim /var/svn/myRepo/conf/passwd

Restart your server to use the new repository.


Repository access

You can use the repository with the following SVN URL: svn://server/java



Upgrade repository (Linux)

cd /var/svn/
svnadmin upgrade myRepo


Then you can check the SVN repository version:

cat /var/svn/myRepo/db/format