Installation SVN
Cet article présente l'installation de SVN sur une machine Ubuntu.
Sommaire
Votre avis
Current user rating: 81/100 (1 votes)
|
|
Installation initiale
L'installation s'effectue à l'aide de la commande suivante:
#sudo apt-get install subversion
Voir Aussi
Documentation officielle: http://trucatux.under-globe.net/index.php/post/2007/06/25/Installation-svn-ubuntu
Configuration
Cet article est inspiré de la documentation de Ubuntu: https://help.ubuntu.com/community/Subversion
Initialisation
Dans un premier temps, il est préférable de configurer les comptes, voir Gestion des comptes. Il faut créer le groupe subversion
.
#sudo addgroup subversion
L'utilisateur www-data
, utilisateur apache, est ajouté à ce groupe.
#sudo adduser www-data subversion
Il faut ensuite configurer le répertoire qui va recevoir le repository. Sur la machine, il est installer à la racine, sous /var/opt/svn
#cd /var/opt #sudo mkdir svn #sudo chown -R www-data:subversion svn #sudo chmod -R g+rws svn
Lancement du serveur
L'exposition des sources à l'aide de l'outil permet d'y accéder avec une connexion de type: svn//hostName/repos.
Le serveur SVN est démarré en mode daemon à l'aide de la commande:
#svnserve -d -r svn/
Il faut être dans le répertoire parent du répertoire svn
, dans le cadre de cet exemple.
Installation daemon
Ce chapitre est inspiré de l'article: http://odyniec.net/articles/ubuntu-subversion-server.
Afin que le serveur soit actif lors du démarrage de la machine, il faut créer un script placé dans /etc/init.d
. Le script est nommé svnserve et le contenu est le suivant:
#! /bin/sh
### BEGIN INIT INFO
# Provides: svnserve
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $local_fs $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start svnserve
### END INIT INFO
# Author: Michal Wojciechowski <odyniec@odyniec.net>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d -r /var/opt/svn/"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/init/vars.sh
. /lib/lsb/init-functions
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
Dans ce script, il faut modifier la constante DAEMON_ARGS pour prendre en compte le répertoire racine de svn. L'installation du service s'effectue ensuite ainsi:
#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
Le serveur svn est démarré à l'aide de la commande:
#sudo /etc/init.d/svnserve start
L'arrêt s'effectue à l'aide de la commande
#sudo /etc/init.d/svnserve stop
SVN sous Apache
Anomalies
Erreur commit
Lors d'une mise en place d'un dépôt, des erreurs peuvent apparaître si les permissions ne sont pas correctement mises en place sur les fichiers. Par exemple, lors d'une mise à disposition des sources, le message suivant a été observé, à partir du plugin SVN pour Eclipse.
org.tigris.subversion.javahl.ClientException: Attempted to write to readonly SQLite db svn: Commit failed (details follow): svn: attempt to write a readonly database
Le message indique la mise en lecture seule de la "base de données" de SVN. Pourtant les modifications sont bien sauvegardées. L'analyse du contenu du dépôt permet d'identifier les fichiers dont les permissions ne sont pas correctes.
#sudo ls -lR /var/opt/svn/study -r--r----- 1 www-data subversion 2 2012-04-15 00:59 format -rw-r----- 1 www-data subversion 229 2012-04-15 00:59 README.txt /var/opt/svn/study/conf: total 24 drwxr-s--- 2 www-data subversion 4096 2012-04-15 19:15 ./ drwxr-s--- 7 www-data subversion 4096 2012-04-15 18:38 ../ -rw-r----- 1 www-data subversion 1750 2012-04-15 07:53 authz -rw-r----- 1 root subversion 1751 2012-04-15 01:28 authz.bak -rw-r----- 1 root subversion 330 2012-04-15 01:02 passwd -rw-r----- 1 root subversion 2277 2012-04-15 01:02 svnserve.conf /var/opt/svn/study/dav: total 12 drwxr-sr-x 3 www-data subversion 4096 2012-04-15 18:38 ./ drwxr-s--- 7 www-data subversion 4096 2012-04-15 18:38 ../ drwxr-sr-x 2 www-data subversion 4096 2012-04-15 20:09 activities.d/ /var/opt/svn/study/db: total 80 drwxr-s--- 6 www-data subversion 4096 2012-04-15 20:09 ./ drwxr-s--- 7 www-data subversion 4096 2012-04-15 18:38 ../ -rw-r----- 1 www-data subversion 3 2012-04-15 20:09 current -r--r----- 1 www-data subversion 22 2012-04-15 00:59 format -rw-r----- 1 www-data subversion 1920 2012-04-15 00:59 fsfs.conf -rw-r----- 1 www-data subversion 5 2012-04-15 00:59 fs-type -rw-r----- 1 www-data subversion 2 2012-04-15 00:59 min-unpacked-rev -rw-r--r-- 1 root subversion 24576 2012-04-15 01:05 rep-cache.db drwxr-s--- 3 www-data subversion 4096 2012-04-15 00:59 revprops/ drwxr-s--- 3 www-data subversion 4096 2012-04-15 00:59 revs/ drwxr-s--- 2 www-data subversion 4096 2012-04-15 20:09 transactions/ -rw-r----- 1 www-data subversion 3 2012-04-15 20:09 txn-current -rw-r----- 1 www-data subversion 0 2012-04-15 00:59 txn-current-lock drwxr-s--- 2 www-data subversion 4096 2012-04-15 20:09 txn-protorevs/ -rw-r----- 1 root subversion 37 2012-04-15 01:04 uuid -rw-r----- 1 www-data subversion 0 2012-04-15 00:59 write-lock /var/opt/svn/study/hooks: total 56 drwxr-s--- 2 www-data subversion 4096 2012-04-15 19:15 ./ drwxr-s--- 7 www-data subversion 4096 2012-04-15 18:38 ../ -rwxr-x--- 1 root subversion 86 2012-04-15 01:02 post.commit* -rw-r----- 1 www-data subversion 2022 2012-04-15 00:59 post-commit.tmpl -rw-r----- 1 www-data subversion 1663 2012-04-15 00:59 post-lock.tmpl -rw-r----- 1 www-data subversion 2344 2012-04-15 00:59 post-revprop-change.tmpl -rw-r----- 1 www-data subversion 1592 2012-04-15 00:59 post-unlock.tmpl -rwxr-x--- 1 root subversion 4396 2012-04-15 01:02 pre-commit* -rw-r----- 1 www-data subversion 3510 2012-04-15 00:59 pre-commit.tmpl -rw-r----- 1 www-data subversion 2410 2012-04-15 00:59 pre-lock.tmpl -rw-r----- 1 www-data subversion 2818 2012-04-15 00:59 pre-revprop-change.tmpl -rw-r----- 1 www-data subversion 2100 2012-04-15 00:59 pre-unlock.tmpl -rw-r----- 1 www-data subversion 2852 2012-04-15 00:59 start-commit.tmpl /var/opt/svn/study/locks: total 16 drwxr-s--- 2 www-data subversion 4096 2012-04-15 00:59 ./ drwxr-s--- 7 www-data subversion 4096 2012-04-15 18:38 ../ -rw-r----- 1 www-data subversion 139 2012-04-15 00:59 db.lock -rw-r----- 1 www-data subversion 139 2012-04-15 00:59 db-logs.lock
Or le dépôt étant exposé sous Apache, il est nécessaire que le compte d'exécution du serveur, à savoir www-data
, puisse accéder aux fichiers. Dans ce cas, le compte root
est propriétaire des fichiers suivants:
- /var/opt/svn/study/conf/authz.bak
- /var/opt/svn/study/conf/passwd
- /var/opt/svn/study/conf/svnserve.conf
- /var/opt/svn/study/db/rep-cache.db
- /var/opt/svn/study/db/uuid
- /var/opt/svn/study/hooks/post.commit
- /var/opt/svn/study/hooks/pre.commit
Pour certains fichiers, cela n'est pas nécessaire. Par soucis d'homogénéité, ils seront quand même tous modifiés.
#sudo chown -R www-data:subversion /var/opt/svn/study