Montar un Servidor de Subversion (SVN) en Debian
Bueno me toco esta tarea que normalmente realiso en Slackware, pero esta vez lo tuve que hacer bajo un Debian.
Primero instalamos el Subversion que nos va a traer el resto de las herramientas, para eso como root ejecutamos:
# apt-get install subversion
Eso descargara tanto el cliente como el servidor y en administrador. El servidor es el ejecutable svnserve, que si lo ejecutamos empezará a servir en el directorio donde estemos hubicados, pero esto no es lo que queremos, asi que vamos a ver la lista de opciones:
sheldon:/var/lib# svnserve --help
usage: svnserve [options]
Valid options:
-d [--daemon] : daemon mode
--listen-port ARG : listen port (for daemon mode)
--listen-host ARG : listen hostname or IP address (for daemon mode)
--foreground : run in foreground (useful for debugging)
-h [--help] : display this help
--version : show program version information
-i [--inetd] : inetd mode
-r [--root] ARG : root of directory to serve
-R [--read-only] : force read only, overriding repository config file
-t [--tunnel] : tunnel mode
--tunnel-user ARG : tunnel username (default is current uid's name)
-T [--threads] : use threads instead of fork
-X [--listen-once] : listen once (useful for debugging)
--config-file ARG : read configuration from file ARG
--pid-file ARG : write server process ID to file ARG
En este caso hay dos parametros que nos importan mucho: -d o --daemon para que se ejecute en modo de servicio, y -r o --root para especificarle la ruta de los repositorios.
Como lo que queremos es hacer las cosas bien, vamos a integrarlo a nuestro server, asi que vamos primero a definir un directorio para los repositorios, yo uso normalmente /var/lib/subversion, pero se puede usar el que uno quiera como /srv/subversion o etc.
Si creamos el susodicho directorio creamos de paso un repositorio test y arrancamos el demonio deberia andar:
# mkdir /var/lib/subversion
# mkdir /var/lib/subversion/test
# svnadmin create /var/lib/subversion/test
# svnserve -d -r /var/lib/subversion
De este modo ya arrancamos el svnserve en modo daemon, y creamos un repositorio de prueba, si ejecutamos:
# svn info svn://localhost/test
Este nos da la informacion de nuestro primer repositorio
Hasta aqui todo bien, pero hay un tema, de esta forma estariamos ejecutando el daemon o servicio con el usuario root, cosa que no es una buena práctica, ya que cualquier malfuncionamiento del software o vulnerabiliad tocar al sistema operativo, asi que para limitar el acceso de este server vamos a correrlo bajo un usuario espesifico, que tambien crearemos para este fin:
Primer creamos el grupo:
# groupadd svnd
Luego creamos el usuario sin password y asignandole como su home el directorio /var/lib/subversion
# useradd -d /var/lib/subversion/ -g svnd -r -s /bin/bash svnd
Ahi me diran, epro estas loco, crear un user sin pass... a lo que aclaro, en Unix hay una diferencia entre no tener contraseña y tener una contraseña vasia, el no tener una contraseña no quiere decir que nos vamos a logear aprentando enter en el cuadro de password, sino que directamente no nos vamos a poder logear, nadie ecepto el usuario root va a tener acceso a esta cuenta. Con el parametro -r tambien aclaramos que es de sistema asi que no tendria que aparecer en listados de usuarios como los de los *dm graficos.
Ahora una vez que creamos el usuario y gropo con los que correra, recordemos que el directorio de trabajo y todos los archivos del repositorio deben poder ser modificados por este usuario, para eso le asignaremos el usuario y grupo a todos los repositorios:
# chown -R svnd:svnd /var/lib/subversion
Una vez creado esto, podemos correr el servidor con estos usarios con el comando su, siempre desde root:
# su -c "svnserve -d -r /var/lib/subversion" svnd
eso corre la orden entre comillas, bajo el usuario svnd.
Con esto se puede decir que ya lo tenemos andando, pero falta un ultimo paso, y es crear su archivo de inicio de servicio (los famosos rc), este lo hice a mano y me andubo, espero que les sirva a ustedes tambien:
http://pastebin.com/wiLXcrgb
Este archivo lo copian a /etc/init.d, le dan acceso de ejecucion (chmod +x) y luego podran manejar el demonio como cualquier otro en debian
# /etc/init.d/subversion start
# /etc/init.d/subversion stop

June 3rd, 2011 - 13:01
Muy buena la explicación! Ahora una pregunta, yo quiero poder ver en mi explorador la página web que estoy subiendo al repositorio. O sea que al acceder por ej. a http://localhost/test puedo ver mi página web .
Es posible?
Saludos!
June 6th, 2011 - 18:39
En realidad el repositorio es para mantener el versionado del proyecto, vos podés tener una copia aparte, o simplemente apuntar el webserver que uses al directorio de tu copia de trabajo, eso es indistinto del repositorio.
June 14th, 2011 - 09:36
Muchas gracias por el artículo, a favoritos ha ido del tirón!
tengo una dudita, relacionada con el primer comentario, ¿existe alguna opción para que se mantenga en otra ubicación una copia de una determinada versión o rama del proyecto? ¿o hay que hacerlo manualmente? en realidad es la misma pregunta