Delirios de un Informático

Servidor Subversion con autentificación en OpenWRT

Siguiendo con la serie de entradas sobre OpenWRT el siguiente paso es instalar un servidor Subversion, complemento perfecto para desarrollo. En este caso será imprescindible contar con soporte de almacenamiento USB, ya que el tamaño de los repositorios crece rápidamente y el dispositivo no tiene capacidad suficiente.

Lo primero es instalar los paquetes necesarios:

opkg update
opkg install subversion-client subversion-server

Se instalará el servidor nativo svnserve de forma muy básica, donde la configuración se encuentra en /etc/config/subversion. El problema es que no tiene autentificación pudiendo acceder cualquiera a los repositorios. Para añadir un poco de seguridad, debemos crear un fichero de configuración (en /mnt/usb/svn/svn.conf, por ejemplo) que contenga lo siguiente:

[general]
realm		= openwrt
anon-access	= none
auth-access	= write

Esto forzará que svnserve solicite identificación, pero como no se ha indicado un archivo de usuarios/contraseñas y no será posible acceder a través del protocolo nativo. Lo que interesa es que se pueda acceder a través de svn+ssh, pero por defecto OpenWRT sólo crea el usuario root y no dispone de los comandos típicos de gestió de usuarios y grupos, por lo que es necesario añadir los nuevos usuarios a pelo, editando el archivo /etc/passwd copiado la primera línea y modificando el nombre de usuario, el UID/GID y la ruta de su home:

root:[contraseña]/:0:0:root:/root:/bin/ash
david:[contraseña]/:1013:1013:david:/home/david:/bin/ash

Recomendable usar un UID/GID mayor de 1000 y copiar la contraseña de root (que luego se puede cambiar con el comando passwd [usuario]) para poder probar el primer acceso. Del mismo modo, hay que editar el archivo /etc/groups:

root:x:0:
david:x:1013:

Una vez añadido el usuario, bastará reiniciar el router para tener el servidor Subversion 100% operativo a través de svn+ssh. Para probarlo, se puede crear un repositorio con svnadmin create /var/local/svn/test e intentar acceder a él con el comando svn info svn+ssh://[router]/var/local/svn/test.