SDK Multiplataforma en C logo

SDK Multiplataforma en C

Servidor Subversion

❮ Anterior
Siguiente ❯

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:
  •  
    
    pwd
    /srv/repos/svn
    
    sudo svnadmin hotcopy [repo] [repo_copy]
    
  • 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:
  •  
    
    rsync -av /mnt/usb/[repo_name]/ /srv/repos/svn/[repo_name]/
    
IMPORTANTE: No olvidar el último slash (/) después de cada ruta en rsync. Es decir, lo correcto es /mnt/usb/[repo_name]/ y NO /mnt/usb/[repo_name].
  • Si has empaquetado la copia, descomprime con tar:
  •  
    
    tar -xzvf [repo_copy].tar.gz
    

3.2. Copiar en red

  • Si ambas máquinas están en la misma red, es posible ejecutar rsync sobre un tunel ssh dentro de la misma. Para ello, desde la máquina destino hacemos:
  •  
    
    sudo rsync -av -e ssh root@192.168.1.4:/srv/repos/svn/[repo_copy]/ /srv/repos/svn/[repo_name]/
    
  • 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:
  •  
    
    svnadmin hotcopy /srv/repos/svn/[myrepo] /<destiny>/[myrepo]
    
  • 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.
❮ Anterior
Siguiente ❯