Ejecutar un servidor Subversion

Ejecutar un servidor Subversion

Esta sección describirá cómo activar, administrar y asegurar un servidor Subversion.

De pendencias del servidor Subversion

Activar un servidor Subversion.

Las siguientes instrucciones instalarán un servidor Subversion, que será configurado para utilizar OpenSSH como método seguro de acceso remoto, con svnserve disponible para accesoes anónimos.

La configuración del servidor Subversion consiste en los siguientes pasos:

1. Establecer los usuarios, grupos y permisos

Necesitarás ser root para la parte inicial de la configuración. Crea el usuario y grupo svn con los siguientes comandos:

groupadd svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false svn

Si piensas tener múltiples repositorios, deberías tener un grupo dedicado a cada repositorio para facilitar la administración. Crea el grupo svntest para el repositorio de pruebas y añade el usuario svn a dicho grupo con los siguientes comandos:

groupadd svntest &&
usermod -G svntest svn

Adicionalmente, deberías establecer umask 002 mientras trabajas con un repositorio para que todos los nuevos ficheros sean escribibles por el propietario y el grupo. Esto se hace mandatorio creando un guión envoltorio para svn y svnserve:

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}
[Nota]

Nota

Si utilizas Apache para trabajar con el repositorio sobre HTTP, aunque sea para acceso anónimo, deverías envolver /usr/sbin/httpd en un guión similar.

2. Crear un repositorio Subversion.

Con subversion-1.1.0 y posteriores, está disponible un nuevo tipo de almacenamiento de datos en el repositorio, FSFS. Hay una penalización en velocidad con el nuevo controlador, sin embargo el repositorio puede ubicarse ahora en un montaje de red, y cualquier corrupción no requiere ahora de un administrador que recupere el repositorio. Para más información y comparación entre FSFS y BDB, mira http://svnbook.red-bean.com/svnbook-1.1/ch05.html#svn-ch-5-sect-1.2.A. Opcionalmente puedes pasar bdb en vez de fsfs en el siguiente comando para crear un almacenamiento de datos BerkelyDB.

Crea un nuevo repositorio Subversion con los siguientes comandos:

install -d -m0755 /srv &&
install -d -m0755 -o svn -g svn /srv/svn/repositories &&
svnadmin create --fs-type fsfs /srv/svn/repositories/svntest

Ahora que el repositorio está creado, necesitamos poblarlo con algo útil. Necesitarás tener preparado un esquema de directorios predefinido exacto al aspecto que quieras que tenga el repositorio. Por ejemplo, este es el esquema establecido para BLFS con un raíz de svntest/. Necesitarás establecer un árbol de directorios similar al siguiente:

          svntest/            # El nombre del repositorio
             trunk/           # Contiene el árbol de las fuentes existentes
                BOOK/
                bootscripts/
                edguide/
                patches/
                scripts/
             branches/        # Necesario para ramas adicionales
             tags/            # Necesario para etiquetar los puntos de liberación

Una vez hayas creado un esquema de directorios como el mostrado arriba, estás preparado para hacer la importación inicial:

svn import -m "Initial import." \
    [/path/to/source/tree] \
    file:///srv/svn/repositories/svntest

Ahora sigue adelante y cambia la información de propietario y grupo del repositorio, y añade tu usuario normal a los grupos svn y svntest:

chown -R svn:svntest /srv/svn/repositories/svntest &&
chmod -R g+w /srv/svn/repositories/svntest &&
chmod g+s /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest,[añade los grupos existentes] [usuario]

svntest es el grupo asignado al repositorio svntest. Como se ha mencionado antes, esto facilita la administración de múltiples repositorios cuando se utiliza OpenSSH para la autenticación. Yendo más allá, necesitarás añadir tu usuario normal, y cualquieras usuarios adicionales que desees que tengan acceso de escritura al repositorio, a los grupos svn y svntest.

Adicionalmente, notarás que el nuevo durectorio db del respositorio es set-groupID. Si la razón no es inmediatamente óbvia, cuando se utiliza cualquier método externo de autenticación (como ssh), el bit pegajoso se establece para que todos los nuevos ficheros sean propiedad del usuario, pero con el grupo svntest. Cualquiera en el grupo svntest puede crear ficheros, pero el grupo entero tendrá acceso de escritura a esos ficheros. Esto evita expulsar a otros usuarios del repositorio.

Ahora, sigue adelante, regresa a tu cuenta de usuario normal, y dale un vistazo a tu nuevo repositorio usando svnlook:

svnlook tree /srv/svn/repositories/svntest/
[Nota]

Nota

Puede que necesites salir y volver a entrar para que se refresque tu membresía a los grupos. 'su [usuario]' también debería funcionar.

3. Configurar el servidor

Como se mencionó antes, estas instrucciones configurarán el servidor para usar sólo ssh para acceso de escritura al repositorio y proporcionar acceso anónimo mediante svnserve. Hay otras formas de proporcionar acceso al repositorio. Dichas configuraciones adicionales están mejor explicadas en http://svnbook.red-bean.com/.

Es necesario hacer la configuración del acceso para cada repositorio. Crea el fichero svnserve.conf para el repositorio svntest con los siguientes comandos:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
    /srv/svn/repositories/svntest/conf/svnserve.conf.default &&
cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

No hay mucho en el archivo de configuración. Notarás que sólo se requiere la sección general. Mira en el fichero svnserve.conf.default la información sobre el uso del método de autenticación incorporado en svnserve.

4. Iniciar el servidor

Hay varias formas de iniciar svnserve. La forma más común es iniciarlo como un proceso inetd o xinetd. Alternativamente, puedes utilizar un guión de arranque para lanzar el servicio al inicio.

[Nota]

Nota

Si no deseas facilitar acceso anónimo a tus repositorios o usar la autenticación incorpodada de svnserve, no necesitas ejecutar svnserve.

Si utilizas inetd, añade una línea a /etc/inetd.conf usando los siguientes comandos:

cat >> /etc/inetd.conf << "EOF"
svn stream tcp nowait svn /usr/bin/svnserve svnserve -i
EOF

Si utilizas xinetd, el siguiente comando creará el fichero de Subversion server como /etc/xinetd.d/svn:

cat >> /etc/xinetd.d/svn << "EOF"
# Begin /etc/xinetd.d/svn

service svn
{
        port                    = 3690
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = svn
        server                  = /usr/bin/svnserve
        server_args             = -i -r /srv/svn/repositories
}

# End /etc/xinetd.d/svn
EOF

Por último, si simplemente prefieres lanzar el servidor en el arranque, instala el guión de arranque svn incuido en el paquete blfs-bootscripts-20050313.

make install-svn

Last updated on 2005-04-10 20:06:09 +0200