Etiquetas: subversion tutorial http control versiones
Hace algún tiempo publiqué un tutorial sobre como instalar un completo servidor de subversion.
En aquel tutorial se decía que:
A un repositorio de subversion se puede acceder de 3 formas:
Y mostramos la 3ª manera que, a nuestro juicio, es la más completa.
En este tutorial mostraremos la 2ª manera y una variación más completa que usa ssh.
La instalación que describimos es para realizarla en un servidor con GNU Linux Ubuntu 16.04. Utilizaremos systemd como system manager para el inicio automático del servidor, así que los que digamos aquí será portable a cualquier systema que utilice systemd.
Comenzamos instalando subversion, que en cualquier distribución de GNU Linux se encuentraa como paquete instalable.
apt-get install subversion
Ahora creamos el usuario svn y lo añadimos al grupo subversion.
addgroup subversion
adduser svn subversion
Para arrancar el servidor de subversion basta con hacer:
svnserver -d -r /var/lib/svn
y ya podemos acceder desde cualquier cliente de subversion. Atención, por lo pronto no pide ningún tipo de autenticación.
Ahora vamos a ver como integrar svnserver como unidad de systemd, de manera que se arranque automáticamente cuando se arranque el servidor y se pueda gestionar su arranque, parada y estado con el comando systemctl, como cualquier otro servicio.
Primero creamos el archivo de configuración para systemd en /etc/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
RuntimeDirectory=svnserve
PIDFile=/run/svnserve/svnserve.pid
EnvironmentFile=/etc/default/svnserve
ExecStart=/usr/bin/svnserve $DAEMON_ARGS
User=svn
Group=subversion
KillMode=control-group
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=svnserve.service
Después definimos las opciones de inicio en /etc/default/svnserve:
DAEMON_ARGS="--daemon --pid-file /run/svnserve/svnserve.pid --root /var/lib/svn --log-file /var/log/svnserve/svnserve.log"
Y por último configuramos las opciones de rotación de logs en /etc/logrotate.d/svnserve:
/var/log/svnserve/*.log {
daily
missingok
rotate 14
compress
notifempty
create 640 svn adm
sharedscripts
postrotate
if /bin/systemctl status svnserve > /dev/null ; then \
/bin/systemctl restart svnserve > /dev/null; \
fi;
endscript
}
Y listo, ya podemos arrancar el servicio desde systemctl
systemctl start svnserver
Si queremos que se arranque al inicio:
systemctl enable svnserver
Para esto no es necesario ejecutar el demonio svnserver, simplemente hay que tener bien configurado y ejecutando sshd, entonces, para acceder al repositorio basta que el usuario tenga acceso al servidor a través de ssh (por password o certificado, da igual):
svn co svn+ssh://juanda@curso-svn.juandarodriguez.es/var/lib/svn/mapbundle
Lo que es importante entender en esta manera de acceder al repositorio de subversion, es que el cliente no se conecta a un demonio svnserve que se esté ejecutando en el servidor remoto. El método se basa en la habilidad de ssh de ejecutar en la máquina remota un proceso temporal svnserve, el cual termina cuando la conexión se cierra.
Con este método de acceso es el servidor ssh el que pregunta las credenciales de autenticación, no el cliente svn.
Podemos refinar un poco más y hacer que la url sea la misma que cuando se accede a través del demonio svnserve sin ssh, es decir, quitar la parte que hace referencia a la raíz del directorio: /var/lib/svn. Para ello creamos en el servidor un script que sustituirá a svnserve:
Creamos en algún lugar del servidor (por ejemplo en /root/svnwrapper.sh) el script siguiente:
#!/bin/sh
# set the umask so files are group-writable
umask 002
# call the 'real' svnserve, also passing in the default repo location
exec /usr/bin/svnserve "$@" -r /var/lib/svn
Y lo enlazamos en usr/local/bin
chmod +x svnwrapper.sh
cd /usr/local/bin
ln -s /var/svn/svnwrapper.sh svnserve
Y ya se puede usar la url de siempre:
svn co svn+ssh://juanda@curso-svn.juandarodriguez.es/mapbundle
Posiblemente sea esta la manera más sencilla a la par que segura, de acceder a un repositorio de subversion.