Configuración de un servidor SVN en CentOS 7

Este artículo describe los pasos para instalar y configurar un servidor de Subversion (SVN) en un sistema CentOS 7, incluyendo la integración con el serviodr web Apache para el acceso HTTP.

Instalación de los componentes base

Comience instalando los paquetes necesarios desde los repositorios.

# yum install -y mod_dav_svn subversion

El puerto predeterminado para el demonio svnserve es el 3690. Puede verificarlo inspeccionando el archivo de servicios del sistema.

# grep svn /etc/services

La salida mostrará las líneas que definen el servicio y su puerto.

Creación y configuración de un repositorio

Cree un directorio principal para albergar los repositorios y, a continuación, inicialice uno nuevo dentro de él.

# mkdir -p /srv/repositorios
# svnadmin create /srv/repositorios/proyecto_alpha

El comando svnadmin genera la estructura interna del repositorio. Al inspeccionar su contenido se encuentran directorios como conf, db, hooks, entre otros. Los archivos de configuración clave residen en conf/.

Ajustes del archivo principal de configuración

Modifique conf/svnserve.conf para definir las políticas de acceso y autenticación.

# vim /srv/repositorios/proyecto_alpha/conf/svnserve.conf

Dentro del archivo, establezca las siguientes directivas (asegúrese de que no haya espacios al inicio de las líneas activas):

anon-access = none
auth-access = write
password-db = contrasenas
authz-db = autorizacion
realm = Repositorio del Proyecto Alpha

Gestión de usuarios y permisos

Defina los usuarios del servidor SVN en el archivo de contraseñas.

# vim /srv/repositorios/proyecto_alpha/conf/contrasenas
[usuarios]
gerente = Clave$egura123
desarrollador = C0digo!456

Asigne permisos detallados mediante el archivo de autorización.

# vim /srv/repositorios/proyecto_alpha/conf/autorizacion
[grupos]
equipo_principal = gerente,desarrollador

[/]
gerente = rw
@equipo_principal = r

Inicio y puesta en marcha del servicio

Inicie el demonio svnserve en modo background, apuntando al directorio raíz de los repositorios.

# svnserve -d -r /srv/repositorios
# ss -antl | grep 3690

El último comando confirmará que el servicio está escuchando en el puerto 3690. Para asegurar que el servicio arranque con el sistema, agregue el comando de inicio al script de ejecución local.

# echo "svnserve -d -r /srv/repositorios" >> /etc/rc.local
# chmod +x /etc/rc.local

Si el firewall está activo, abra el puerto requerido.

# firewall-cmd --permanent --add-port=3690/tcp
# firewall-cmd --reload

Operaciones básicas del cliente SVN

A continuación se presentan ejemplos de uso común del cliente svn en la línea de comandos.

Importar un proyecto existente

Para añadir un directorio local a un repositorio vacío, use el comando import.

# mkdir /tmp/mi_codigo_fuente
# touch /tmp/mi_codigo_fuente/index.html /tmp/mi_codigo_fuente/estilo.css
# svn import /tmp/mi_codigo_fuente file:///srv/repositorios/proyecto_alpha/trunk -m "Importación inicial"

Obtener una copia de trabajo

La primera vez se utiliza checkout para descargar el contenido del repositorio a una copia de trabajo local.

# svn checkout svn://192.168.1.10/proyecto_alpha /ruta/local/trabajo

Se le solicitará la autenticación. Las actualizaciones posteriores se realizarán con svn update desde dentro de la copia de trabajo.

Realizar cambios y confirmarlos

Los archivos nuevos deben ser marcados explícitamente antes de ser enviados al repositorio.

# cd /ruta/local/trabajo
# touch nueva_funcionalidad.py
# svn add nueva_funcionalidad.py
# svn commit -m "Añadido archivo de nueva funcionalidad"

La acción commit envía los cambios acumulados (nuevos acrhivos, modificaciones, eliminaciones) al repositorio central.

Integración con el servidor Apache (HTTP)

Permite el acceso al repositorio mediante el protocolo HTTP, lo cual puede ser útil en redes restringidas.

Instalación y configuración de Apache

Instale el servidor web y verifique la presencia de los módulos SVN.

# yum install -y httpd
# grep -E 'mod_dav_svn|mod_authz_svn' /etc/httpd/conf.modules.d/10-subversion.conf

Configure la ubicación SVN dentro de Apache.

# vim /etc/httpd/conf.d/svn.conf

Inserte la siguiente directiva, ajustando las rutas según su entorno.

<Location /svn>
    DAV svn
    SVNParentPath /srv/repositorios
    AuthType Basic
    AuthName "Repositorios SVN"
    AuthUserFile /etc/httpd/svn_users
    AuthzSVNAccessFile /etc/httpd/svn_authz
    Require valid-user
</Location>

Archivo de usuarios para Apache

Genere el archivo de contraseñas compatible con Apache.

# htpasswd -c /etc/httpd/svn_users usuario_web1
# htpasswd /etc/httpd/svn_users usuario_web2

Archivo de autorización para Apache

Puede reutilizar la misma lógica de grupos y permisos que antes.

# vim /etc/httpd/svn_authz
[groups]
grupo_web = usuario_web1,usuario_web2

[proyecto_alpha:/]
@grupo_web = rw

Finalmente, reinicie el servicio Apache y abra el puerto 80 si es necesario.

# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload

Ahora el repositorio es accesible vía HTTP en http://servidor/svn/proyecto_alpha.

Consideraciones para clientes en Windows

Al usar clientes gráficos como TortoiseSVN en Windows:

  • URL de conexión: Use svn://IP/proyecto para el protocolo SVN nativo, o http://IP/svn/proyecto para el acceso vía Apache. Las credenciales serán diferentes para cada protocolo.
  • Iconos de estado: Si los iconos de superposición no aparecen, vaya a Configuración de TortoiseSVN > Icon Overlays y seleccione el caché "Shell". Luego, reinicie la sesión de Windows.
  • Flujo de trabajo: Use "Add" para nuevos archivos y "SVN Commit" para enviar los cambios. Use "SVN Update" para sincronizar con el repositorio.

Diferencias clave entre SVN y Git

Característica SVN Git
Modelo Centralizado Distribuido
Copia de trabajo Contiene solo la versión actual Contiene todo el historial completo
Operaciones fuera de línea Limitadas (requiere conexión para commit, log, diff) La mayoría de operaciones son locales
Manejo de ramas Basado en copias del directorio, puede ser costoso Ligero y rápido, fomenta su uso frecuente
Velocidad Depende de la conexión de red Generalmente más rápido para operaciones locales

La elección depende del flujo de trabajo del equipo. SVN puede ser más simple para proyectos con una estructura lineal y donde se requiere control estricto de acceso centralizado. Git ofrece mayor flexibilidad y es el estándar en el desarrollo de software moderno y distribuido.

Etiquetas: SVN CentOS 7 control de versiones Apache Subversion

Publicado el 6-11 19:08