Instalar SubVersion en Debian/Ubuntu

Instalamos los paquetes subVersion:
# aptitude install subversion subversion-tools

Creamos un usuario subVersion:
# adduser svn

Al crear un usuario svn, automáticamente se crea el grupo snv y el directorio "/home/svn". Si este directorio ya esta creado habrá que pasarlo a nombre del usuario svn puesto que aquí guardaremos los repositorios de nuestros proyectos:
# chown -Rf svn:svn /home/svn

Añadimos a dicho grupo (svn) los usuarios que queremos que usen los repositorios subversion. Es importante que agreguemos a este grupo el usuario que utilizamos en Debian/Ubuntu:
# usermod -a -G svn usuario_linux
# usermod -a -G svn user1
# usermod -a -G svn user2

Me cambio al usuario svn:
# su svn

Se debe asegura que el usuario svn tiene definido correctamente el umask. Para ello modificamos el fichero /home/svn/.bash_profile y añadimos la línea. Esto nos garantiza que todos los ficheros que cree este usuario sólo serán visibles por él mismo y por el grupo svn, pero otros usuarios no podrán acceder ni en lectura ni en escritura:
$ vi /home/svn/.bash_profile
umask 027

Ahora creamos la carpeta donde ubicaremos nuestros repositorios. Como seguridad creo un directorio que este dentro del home del usuario:
$ mkdir /home/svn/svnRepos

Y le damos los correspondientes permisos, para que los usuarios del grupo svn puedan trabajar en el repositorio:
$ chmod -R 770 /home/svn/svnRepos

Para cada proyecto, crearemos un repositorio:
$ svnadmin create /home/svn/svnRepos/repositorio_prueba
$ chmod -R 770 /home/svn/svnRepos/repositorio_prueba

Ahora hacer una autentificación básica sobre un fichero de texto plano en
"/home/svn/svnRepos/repositorio_prueba/conf/svnserve.conf" pon lo siguiente:
...
[general]
anon-access = none
auth-access = write
password-db = passwd
realm = nombre del proyecto
...
Esto seria para: anónimos sin lectura ni escritura, autentificados con lectura y escritura. Lo que ves detrás de "password-db", es el nombre de fichero de contraseñas. El path es referente al fichero que contiene los usuarios y contraseñas para acceder al repositorio "/home/svn/svnRepos/repositorio_prueba/conf/passwd".
Aquí su contenido de ejemplo (con un usuario):
...
[users]
usuario_linux = mipws
user1 = pwsuser1
user2 = linuxnofalla
...
Donde passwd es el nombre del fichero donde se dan de alta los usuarios que tendrán permiso de escritura en el repositorio. Ojo con los permisos de este fichero, ya que las claves se almacenan en texto claro. En ningún caso debería tener permiso de lectura para el grupo ni para “others”.
$ chmod 700 passwd
...
Donde realm define el prompt que verá el usuario para autenticarse, y también se usa por Subversion como identificador del “dominio” de autenticación:

Para subir el código que tenemos. La primera vez lo hacemos así, es una importación completa.
$ svn import -m "comentario de import"
...
ejemplos:
$ svn import /tu_directorio_de_trabajo/ file:///home/svn/svnRepos/repositorio_prueba -m "import inicial"
$ svn import /tu_directorio_de_trabajo/ svn://host.example.com/repositorio_prueba -m "import inicial"
...
OPCIONES:
file file:///repository_path
http http://hostname/repository_path
https https://hostname/repository_path
svn svn://hostname/repository_path
svn+ssh svn+ssh://hostname/repository_path

REINICIAR EL COMPUTADOR.
Antes de reiniciar no me funciono conectarme desde Netbeans, después, todo ok.
De aquí en adelante ya puedes usar subVersion conectándote desde un cliente local, que en mi caso es Netbeans.

Copias de seguridad
Para dumpear nuestro repositorio conservando los históricos y todo (la idea es poner esto en un cron):
$ svnadmin dump /home/svn/svnRepos/repositorio_prueba | gzip -9 > dump_svn_prueba.gz


Para restaurarlo:
$ gunzip -c dump_svn_prueba.gz | svnadmin load /home/svn/svnRepos/repositorio_prueba

Sacar una versión para distribuir.
Si lo copias tal cual, llevará las carpetas .svn en cada directorio, así que lo único que tendrías que hacer es (en caso que quieras el árbol principal):
$ tar -cvf prueba.tar trunk
$ gzip prueba.tar


**************************************************
Configuración del servicio para arrancar automáticamente:
...
Como servidor se utilizará svnserve. Se utiliza esta opción en vez de apache2 por:

-Mejor velocidad.

-Simplicidad de instalación y configuración, sin perder las prestaciones necesarias (usuarios independientes, configuración de acceso de sólo lectura o escritura para los usuarios, ...).


Se debe crear el fichero /etc/init.d/svnserve con el siguiente contenido:

#!/bin/sh
#
# start/stop svn (Subversion) server.

set -e

NAME=svnserve
DESC="Subversion server"
DAEMON=/usr/bin/$NAME
PARAMS="-d -T -r /var/lib/svn"
DAEMONUSER=svn

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

start_it_up()
{
log_daemon_msg "Starting $DESC" "$NAME"
start-stop-daemon --start --quiet --chuid $DAEMONUSER:$DAEMONUSER --exec $DAEMON -- $PARAMS
log_end_msg $?
}

shut_it_down()
{
log_daemon_msg "Stopping $DESC" "$NAME"
start-stop-daemon --stop --retry 60 --quiet --oknodo --exec $DAEMON
log_end_msg $?
}

case "$1" in
start)
start_it_up
;;
stop)
shut_it_down
;;
restart)
shut_it_down
start_it_up
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2
exit 1
;;
esac

exit 0


Nótese como la variable PARAMS define los parámetros con los que se arrancará svnserve:

-d ejecuta svnserve como un demonio.

-T para atender las peticiones se usarán hilos, en vez de procesos.

-r permite a los clientes no tener que escribir la ruta completa. Esto resulta más cómodo al cliente y aporta cierta seguridad al ocultar los detalles de donde están realmente los repositorios.

Ahora sólo nos queda crear los enlaces simbólicos necesarios en la estructura /etc/rcx.d para que el servicio se arranque y se pare automáticamente al arrancara y parar el servidor. Para ello se hará:

# update-rc.d svnserve defaults

Comentarios

Entradas populares de este blog

Configurar un Dominio en FreeBSD

Servidor DNS en FreeBSD

Unix shell scripting: Full Log