Veremos como instalar, configurar y mantener un servidor Subversion privado dentro de nuestra red local. Utilizaremos un entorno Linux, normalmente funcionando en una máquina de bajo coste/consumo como una Raspberry-Pi.
1. Instalación del servidor
En primer lugar vamos a instalar y configurar el servidor Subversion, así como uno o varios repositorios de trabajo dentro del mismo. Estos repositorios trabajarán de forma independiente pudiendo albergar diferentes proyectos en cada uno de ellos.
En sistemas basado en Debian, obtenemos e instalamos los paquetes mediante el comando apt-get:
sudo apt-get install subversion
Posteriormente, creamos el directorio de trabajo /srv/repos/svn donde se alojarán los repositorios:
sudo mkdir -p /srv/repos/svn
2. Crear un repositorio
Para crear un nuevo repositorio, en el directorio creado previamente, hacemos:
cd /srv/repos/svn
sudo svnadmin create myrepo
Damos de alta a los usuarios con sus contraseñas:
cd myrepo
cd conf
nano passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
user1 = <password_user1>
user2 = <password_user2>
user3 = <password_user3>
Desde el mismo directorio conf, editamos svnserve.conf y habilitamos las siguientes opciones. La primera impide el acceso a usuarios sin autenticar al repositorio (por defecto permite el acceso para lectura). La segunda autoriza a realizar cambios a los usuarios autenticados y, la tercera, activa el fichero de claves que hemos editado anteriormente.
pwd
/srv/repos/svn/myrepo/conf
nano svnserve.conf
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
anon-access = none
auth-access = write
...
password-db = passwd
3. Migrar un repositorio existente
Es posible que, en lugar de empezar de cero, queramos migrar un repositorio ya existente a la nueva máquina. Lo primero es crear una copia segura del repositorio a migrar. Desde la máquina donde se encuentra el repositorio original, hacemos:
Donde [repo] es el nombre del repositorio y [repo_copy] el nombre de la copia. Utilizar hotcopy permite copiar aún cuando el repositorio original está activo y recibiendo peticiones. No es aconsejable realizar la copia mediante cp o rsync.
Si fuera necesario, puedes empaquetar la copia con tar:
tar -czvf [repo_copy].tar.gz [repo_copy]
3.1. Copiar mediante USB
Para trasladar la copia mediante un disco externo USB, introducimos el disco con una partición formateada en Ext4 y hacemos:
fdisk -l
Deberemos ver un registro donde aparezca nuestra partición, algo así:
Disk /dev/sdb: 7.5 GiB, 8022654976 bytes, 15669248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdb1 63 15669233 15669171 7.5G 83 Linux
Acto seguido creamos el directorio de montaje (si no existe ya):
cd /mnt
sudo mkdir usb
Montamos el disco:
mount /dev/sdb1 /mnt/usb
Y hacemos la copia
rsync -av [repo_copy]/ /mnt/usb/[repo_name]/
Donde [repo_copy] es el nombre de la copia realizada con hotcopy y, por tanto, segura. Una vez acabada desmontamos el USB:
umount /mnt/usb
Y extraemos el disco. Introducimos el USB en la máquina destino y lo montamos mediante fdisk y mount como ya indicamos anteriormente. Ahora, realizamos un rsync desde el USB al directorio de los repositorios:
En este caso, 192.168.1.4 es la IP de la máquina origen. Será necesario introducir la contraseña root de la máquina origen.
4. Ejecutar servidor Subversion
Por último nos falta arrancar el servidor subversion para poder acceder a los repositorios desde otras máquinas en la misma red. Para ello hacemos:
svnserve -d -r /srv/repos
Que ejecutará un demonio que permitirá acceder a todos los repositorios alojados bajo /srv/repos. Si queremos asegurar que el servidor se ejecutará SIEMPRE al arrancar la máquina, deberemos crear un script de arranque. Para ello, comenzamos en el directorio /etc/init.d
cd /etc/init.d
Creamos un script llamado svnserve:
sudo nano svnserve
Y copiamos este contenido:
#!/bin/bash
### BEGIN INIT INFO
# Provides: blabla
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: blabla
# Description:
#
### END INIT INFO
svnserve -d -r /srv/repos/
Grabamos (Ctrl+X) y le damos permisos de ejecución:
sudo chmod +x svnserve
Añadimos el script a la secuencia de arranque
sudo update-rc.d svnserve defaults
Por último, reiniciamos la máquina, para comprobar que todo va bien:
sudo reboot
Al arrancar, el demonio svnserve deberá estar en ejecución. Lo comprobamos con:
ps -A | grep svnserve
575 ? 00:00:00 svnserve
Ya tenemos un servidor subversion totalmente operativo. Ahora se trata de ir creando o añadiendo repositorios en la ruta /srv/repos/svn a medida que sean necesarios.
5. Backup
Para crear una copia de seguridad de un repositorio Subversion hacemos:
Donde [myrepo] es el nombre del repositorio sobre el que queremos hacer el backup y el directorio destino de la copia. Utilizar hotcopy permite copiar aún cuando el repositorio original está activo y recibiendo peticiones. No es aconsejable realizar la copia mediante cp o rsync.