Configurar servidor Subversion un Linux

En este breve manual vamos a mostrar los pasos básicos para instalar y configurar un servidor de subversion bajo Linux.

Hace poco me tocó configurar un servidor subversion y decidí subir al blog los pasos básicos para hacerlo. Debido al poco tiempo libre que tengo actualmente, este manual se ha estado en la cola de entradas sin terminar. Hoy he decidido hacerlo publico “tal cual”, soy consciente que hay pasos no muy bien explicados pero espero que sea igualmente de utilidad.
Para empezar vamos a realizar la instalación de subversion y la creación de los directorios necesarios a modo de ejemplo.

Instalación de subversion

aitor@HurricanuX:~$ sudo apt-get install subversion
aitor@HurricanuX:~$ sudo mkdir /usr/local/svn
aitor@HurricanuX:~$ sudo mkdir /usr/local/svn/aitor
aitor@HurricanuX:~$ sudo groupadd subversion
aitor@HurricanuX:~$ sudo chgrp subversion /usr/local/svn/aitor/
aitor@HurricanuX:~$ sudo chmod g+w /usr/local/svn/aitor/

Hacemos que cualquier fichero creado en este directorio (commited) sea siempre propiedad del grupo subversion

aitor@HurricanuX:~$ sudo chmod g+s /usr/local/svn/aitor/

Añadimos usuarios al grupo

aitor@HurricanuX:~$ sudo usermod -a -G subversion aitor

Para que tenga efecto debemos cerrar sesión y volverla a iniciar.

aitor@HurricanuX:~$ groups
 aitor adm cdrom sudo dip plugdev lpadmin sambashare

Al iniciar sesion nuevamente aparecerá

aitor@HurricanuX:~$ groups
 aitor adm cdrom sudo dip plugdev lpadmin sambashare subversion

Crear un repositorio de ejemplo

$ svnadmin create /usr/local/svn/repos/test

Miramos la versión del repositorio creado

aitor@HurricanuX:~$ svn checkout file:///usr/local/svn/aitor/test/
 Revisión obtenida: 0

Creamos un nuevo fichero y lo añadimos al repositorio

aitor@HurricanuX:~/test$ echo "hola" > hello.txt
 aitor@HurricanuX:~/test$ svn add hello.txt
 A         hello.txt
 aitor@HurricanuX:~/test$ ls -la
 total 16
 drwxrwxr-x  3 aitor aitor 4096 jun 26 19:57 .
 drwxr-xr-x 36 aitor aitor 4096 jun 26 19:55 ..
 -rw-rw-r--  1 aitor aitor    5 jun 26 19:57 hello.txt
 drwxrwxr-x  6 aitor aitor 4096 jun 26 19:57 .svn

Y hacemos un commit

aitor@HurricanuX:~/test$ svn commit -m "Añadido el hola mundo"
 Añadiendo      hello.txt
 Transmitiendo contenido de archivos .
 Commit de la revisión 1.

Creamos fichero de usuarios y passwords y al no estar cifrado, cambiamos permisos para que solo lo pueda leer root

aitor@HurricanuX:~/test$ sudo vim /usr/local/svn/passwd-team
 [sudo] password for aitor:
 aitor@HurricanuX:~/test$ sudo chmod 600 /usr/local/svn/passwd-team

El contenido del fichero es:

[users]
 aitor = Aitor1234
 luisa = Luisa1234

Informamos al repositorio que utilice este fichero de passwords

aitor@HurricanuX:~/test$ sudo vim /usr/local/svn/aitor/test/conf/svnserve.conf
[general]
 anon-access = none
 password-db = /usr/local/svn/passwd-team
 realm = Team

Ahora que esta todo configurado podemos lanzar el servidor

aitor@HurricanuX:~/test$ sudo svnserve -d --foreground -r /usr/local/svn/aitor/
The command-line options tell 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)

Ahora lo hacemos en foreground para ver que todo vaya bien y pararlo con Ctrl+C

En otro terminal intentamos obtener una copia de nuestro repositorio

aitor@HurricanuX:~/aitor$ svn checkout svn://192.168.1.2/test --username aitor
 Reino de autentificación: <svn://192.168.1.2:3690> Team
 Clave de «aitor»:
 A    test/hello.txt
 Revisión obtenida: 1
aitor@HurricanuX:~/aitor$ ls
 test
 aitor@HurricanuX:~/aitor$ ls -la
 total 12
 drwxrwxr-x  3 aitor aitor 4096 jun 26 20:13 .
 drwxr-xr-x 37 aitor aitor 4096 jun 26 20:12 ..
 drwxrwxr-x  3 aitor aitor 4096 jun 26 20:13 test
 aitor@HurricanuX:~/aitor$ cd test/
 aitor@HurricanuX:~/aitor/test$ ls
 hello.txt
 aitor@HurricanuX:~/aitor/test$ ls -la
 total 16
 drwxrwxr-x 3 aitor aitor 4096 jun 26 20:13 .
 drwxrwxr-x 3 aitor aitor 4096 jun 26 20:13 ..
 -rw-rw-r-- 1 aitor aitor    5 jun 26 20:13 hello.txt
 drwxrwxr-x 6 aitor aitor 4096 jun 26 20:13 .svn
 aitor@HurricanuX:~/aitor/test$ more hello.txt
 hola
 aitor@HurricanuX:~/aitor/test$ sudo vim hello.txt
 [sudo] password for aitor:
 aitor@HurricanuX:~/aitor/test$ vim hello.txt

Modificamos el texto y comprobamos que todo funcione haciendo un commit

aitor@HurricanuX:~/aitor/test$ svn commit -m "Texto modificado"
 Enviando       hello.txt
 Transmitiendo contenido de archivos .
 Commit de la revisión 2.

Accediendo al servidor de subversion utilizando ssh

svn checkout svn+ssh://192.168.1.2/usr/local/svn/aitor/test --username aitor

De esta forma se pedirá la contraseña de usuario local y no la que hemos creado antes en el fichero de passwords

Crear script de inicio

 sudo chmod +x /etc/init.d/svnserve
 sudo update-rc.d svnserve defaults
#! /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 /usr/local/svn/repos"
 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
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: