Guía de tecnologías

Servidor SVN en CentOS: instalación y configuración

8 min read DevOps Actualizado 19 Oct 2025
Servidor SVN en CentOS: instalación y configuración
Servidor SVN en CentOS: instalación y configuración

Introducción a SVN

SVN (Subversion) es un sistema de control de versiones centralizado creado por desarrolladores del ecosistema Apache. Permite crear y mantener un repositorio central con control granular de acceso por usuario y por ruta. Es útil para gestionar versiones de código, documentos o conjuntos de archivos en equipos y proyectos de software.

Definición rápida: Subversion es un VCS centralizado que almacena históricos de cambios y controla acceso mediante autenticación y autorización.

Nota preliminar

En este tutorial se utiliza CentOS 6.4 de 32 bits como sistema base. Los pasos son aplicables con pequeñas adaptaciones a otras versiones de CentOS/RHEL y distribuciones similares. Los ejemplos de comandos se han probado en un entorno de laboratorio; ajuste rutas y IPs a su infraestructura.

Importante: los comandos que requieren privilegios de administrador se muestran como ejecutados desde la cuenta root (prompt [root@…]).

1. Instalación de paquetes (httpd, subversion, mod_dav_svn)

Para un servidor SVN con acceso vía HTTP/HTTPS usaremos Apache (httpd) y el módulo mod_dav_svn más el paquete subversion.

Puedes usar otros servidores web (nginx, lighttpd) con soluciones alternativas, pero este tutorial sigue la integración estándar con Apache.

Comprobar IP del servidor (ejemplo):

ifconfig

Salida de ejemplo (omitida explicación por brevedad):

[root@SVNSVR641 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:192.168.43.101 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4640 errors:0 dropped:0 overruns:0 frame:0
TX packets:6845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:444461 (434.0 KiB) TX bytes:549473 (536.5 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2125 errors:0 dropped:0 overruns:0 frame:0
TX packets:2125 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:186888 (182.5 KiB) TX bytes:186888 (182.5 KiB)

Instalación de Apache (httpd):

yum install -y httpd

Salida de ejemplo abreviada (instalando paquete httpd):

[root@SVNSVR641 ~]# yum install -y httpd
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-26.0.1.el6 will be installed
--> Finished Dependency Resolution
...
Installed:
httpd.i686 0:2.2.15-26.0.1.el6

Complete!

Instalación de Subversion:

yum install -y subversion

Instalación del módulo DAV para Subversion:

yum install -y mod_dav_svn

Al finalizar tendrás httpd, subversion y mod_dav_svn disponibles en el sistema.

2. Creación y configuración del repositorio SVN

Buenas prácticas: mantener repositorios fuera de directorios del sistema (por ejemplo /var/www). En este tutorial usaremos /data/svn.

Crear directorio base para repositorios:

mkdir -p /data/svn

Crear el primer repositorio llamado repo1 y asignar propiedad a apache (usuario que ejecuta httpd):

svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1

Verás que el repositorio contiene varios ficheros y carpetas por defecto:

cd /data/svn/repo1
ls

Salida:

[root@SVNSVR641 repo1]# ls
conf db format hooks locks README.txt

Archivos de configuración claves

En el directorio conf están: svnserve.conf, passwd y authz. Editaremos estos para controlar autenticación y autorización.

cd /data/svn/repo1/conf
ls

Salida:

[root@SVNSVR641 conf]# ls
authz passwd svnserve.conf

Editar svnserve.conf para políticas básicas (si usas svnserve):

vi svnserve.conf

Contenido mínimo (ejemplo):

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

Nota: aunque usaremos Apache/mod_dav_svn, mantener svnserve.conf coherente ayuda si montas servicios alternativos.

Crear usuarios (archivo passwd)

Se utiliza htpasswd para añadir usuarios al fichero passwd del repositorio. Ejemplo:

htpasswd -c /data/svn/repo1/conf/passwd jay

Salida interactiva (introduce contraseña):

[root@SVNSVR641 conf]# htpasswd -c /data/svn/repo1/conf/passwd jay
New password:
Re-type new password:
Adding password for user jay

Contenido del fichero passwd (cifrado):

[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA

Agregar dos usuarios más:

htpasswd /data/svn/repo1/conf/passwd fikri
htpasswd /data/svn/repo1/conf/passwd farid

Después:

[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo

Control de accesos por ruta (archivo authz)

Editar authz para asignar permisos específicos a cada usuario en el repositorio repo1:

vi authz

Ejemplo de contenido:

[repo1:/]
farid = r
fikri = rw
* =

Explicación:

  • farid tiene solo lectura (r).
  • fikri tiene lectura y escritura (rw).
  • jay y cualquier otro usuario (*) no tiene permisos.

3. Integración con Apache (httpd)

Editar /etc/httpd/conf/httpd.conf y asegurar que se incluye la carpeta conf.d si no está ya:

Include conf.d/*.conf

Ir a /etc/httpd/conf.d/ y editar (o crear) subversion.conf para exponer el repositorio vía URL (por ejemplo http://IP/repo1):

cd /etc/httpd/conf.d
vi subversion.conf

Contenido de ejemplo (mantener exactamente los módulos apropiados cargados):

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user

Notas:

  • SVNPath apunta a la ruta física del repositorio.
  • AuthUserFile y AuthzSVNAccessFile señalan los ficheros passwd y authz creados.
  • AuthName aparece en el diálogo de autenticación del navegador/cliente.

Reiniciar Apache para aplicar cambios:

service httpd restart

Salida de ejemplo:

[root@SVNSVR641 conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

4. Pruebas desde clientes: Linux y Windows

Cliente Linux (CentOS)

Instalar subversion en el equipo cliente:

yum install -y subversion

Comprobar checkout del repositorio:

mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client

Se solicitará usuario y contraseña. Ejemplo con usuario fikri (rw):

Authentication realm:  My Repository
Password for 'fikri':

Alerta del cliente:

ATTENTION! Your password for authentication realm:
 My Repository
can only be stored to disk unencrypted! ...
Store password unencrypted (yes/no)? yes

(Es recomendable configurar almacenamiento seguro de credenciales localmente.)

Si el checkout se completa verá:

Checked out revision 0.
[root@TEST01 ~]# cd repo_client/
[root@TEST01 repo_client]# ls -a
. .. .svn

Probar crear y commitear una carpeta (con usuario que tenga rw):

cd repo_client
svn mkdir first_dir
svn commit -m "My first folder"

Salida esperada:

Committed revision 1.

Cliente Windows con TortoiseSVN

Abrir en un navegador la URL del repositorio: http://192.168.43.101/repo1

Ventana de autenticación HTTP de SVN solicitando usuario y contraseña

Si se intenta con el usuario jay (sin permisos), el navegador mostrará acceso prohibido:

Acceso prohibido en navegador al intentar ver el repositorio

Instalar TortoiseSVN (u otro cliente SVN) en Windows. Crear una carpeta local (por ejemplo testSVN), hacer clic derecho y elegir SVN Checkout.

Cuadro para introducir la URL del repositorio en TortoiseSVN

Introducir la URL y aceptar. Se pedirá autenticación:

Solicitud de credenciales en TortoiseSVN

Si el usuario tiene permisos de lectura, el checkout finalizará correctamente:

Mensaje de checkout completado en TortoiseSVN

Verás la carpeta creada por otro usuario (first_dir) en tu copia local:

Lista de directorio con carpeta creada por otro usuario

Probar puertas de escritura con usuario solo lectura (farid):

  • Crear carpeta dentro de FIRST_DIR (SECOND_DIR).

Crear carpeta FIRST_DIR en Windows

  • Elegir Add en el menú de TortoiseSVN:

Menú contextual de TortoiseSVN con opción Agregar

  • Confirmar selección:

Diálogo para confirmar selección de directorio a añadir

  • Se añadirá localmente:

Confirmación: directorio añadido al control de versiones local

  • Intentar Commit (SVN Commit):

Menú contextual con opción SVN Commit

  • Confirmar commit con comentario:

Diálogo de confirmación de commit con mensaje

  • Al autenticarse como farid (solo r) se recibirá un error de acceso denegado:

Solicitud de autenticación antes de hacer commit

Error: acceso denegado al usuario con permisos solo lectura

Resultado: la autorización definida en authz funciona correctamente.

Buenas prácticas y seguridad

  • Mantén los repositorios fuera de rutas públicas del sistema (usa /data/svn o similar).
  • Restringe permisos de sistema (ownership) únicamente a usuarios necesarios (por ejemplo apache para integración con httpd).
  • Usa HTTPS en producción: configura mod_ssl y añade certificados, evita exponer credenciales en texto plano.
  • No uses el almacenamiento de contraseñas sin cifrar en clientes; configura Gnome Keyring, libsecret o claves seguras según plataforma.
  • Haz backups regulares con svnadmin dump y cron para automatizar:
    • Ejemplo de volcado: svnadmin dump /data/svn/repo1 > /backups/repo1-$(date +%F).dump

Seguridad adicional:

  • Limita acceso a /data/svn vía ACLs de sistema.
  • Monitoriza logs de Apache (/var/log/httpd/) para detectar intentos de acceso no autorizados.
  • Considera integrar autenticación con LDAP/AD para gestión centralizada de usuarios (mod_authnz_ldap).

Solución de problemas comunes

  • Error 403 (Forbidden) en navegador: revisar authz, AuthUserFile y permisos del fichero passwd.
  • Error de permiso al escribir: verificar que mod_dav_svn corre como el usuario correcto y que el repositorio pertenece a dicho usuario (chown -R apache:apache /data/svn/repo1).
  • Contraseñas no guardadas en el cliente: configurar almacenamiento seguro de credenciales en ~/.subversion/servers o usar gestores de credenciales del sistema.
  • Conflictos al commitear: usar svn update antes de svn commit y resolver conflictos manualmente.

Comandos útiles de diagnóstico:

# Ver estado de Apache
service httpd status

# Revisar versiones instaladas
httpd -v
svn --version
rpm -qa | grep mod_dav_svn

# Probar acceso vía curl (puede pedir auth)
curl -v http://192.168.43.101/repo1/

Mini-metodología: checklist de puesta en marcha rápida

  1. Elegir servidor y IP estática.
  2. Instalar httpd, subversion y mod_dav_svn.
  3. Crear /data/svn y svnadmin create repo1.
  4. chown -R apache:apache /data/svn/repo1.
  5. Crear passwd y authz con htpasswd y editar permisos.
  6. Configurar /etc/httpd/conf.d/subversion.conf con SVNPath y ficheros de auth.
  7. service httpd restart.
  8. Probar checkout desde cliente y validar permisos (rw/r/none).
  9. Configurar backups y HTTPS.

Lista de verificación por roles

Administrador del servidor:

  • Crear y asegurar directorios (/data/svn).
  • Configurar Apache y reiniciar servicio.
  • Automatizar backups.

Administrador de repositorio (team lead):

  • Definir política de ramas/etiquetas/trunk.
  • Crear estructura inicial (trunk, branches, tags).
  • Mantener fichero authz.

Desarrollador:

  • Configurar cliente (TortoiseSVN, subversion CLI).
  • Aprender flujos: checkout, update, commit, merge, revert.

Criterios de aceptación

  • El repositorio responde en http(s) y solicita credenciales.
  • Usuarios con permiso rw pueden crear y commitear cambios.
  • Usuarios con permiso r solo pueden descargar y listar.
  • Usuarios sin entrada en passwd/devueltos por authz reciben acceso denegado.

Fact box — cifras y rutas clave

  • Distribución de ejemplo: CentOS 6.4 (32 bits).
  • Paquetes: httpd, subversion, mod_dav_svn.
  • Rutas en este tutorial: /data/svn/repo1, /etc/httpd/conf.d/subversion.conf.
  • Puerto por defecto: 80 (HTTP), 443 (HTTPS si activado).

Alternativas y cuándo usarlas

  • SVN vía svnserve: útil para conexiones TCP nativas (puerto 3690), más ligera que Apache.
  • Git: si quieres DVCS (distribuido) y flujos modernos de ramas; SVN recomendado si necesitas control centralizado o migración desde proyectos existentes.

Migración y compatibilidad

  • Para migrar repositorios antiguos, usar svnadmin dump/load.
  • Al actualizar SO/paquetes, prueba en entorno staging y convierta rutas relativas a absolutas si cambian versiones de mod_dav_svn.

Ejemplo rápido de backup y restauración

Backup:

svnadmin dump /data/svn/repo1 > /backups/repo1-$(date +%F).dump

Restauración a nuevo repositorio:

svnadmin create /data/svn/repo1-restored
svnadmin load /data/svn/repo1-restored < /backups/repo1-2023-01-01.dump
chown -R apache:apache /data/svn/repo1-restored

Árbol de decisión (simplificado) para elegir despliegue

flowchart TD
A[¿Necesita HTTP/HTTPS?] -->|Sí| B[Usar Apache + mod_dav_svn]
A -->|No| C[¿Conexiones ligeras TCP?]
C -->|Sí| D[Usar svnserve]
C -->|No| E[Evaluar otras opciones o Git]

Pruebas recomendadas (aceptación)

  • Checkout completo desde cliente Linux y Windows.
  • Crear, añadir y commitear archivo con usuario rw.
  • Intentar commitear como usuario r y validar error de permiso.
  • Restaurar backup en servidor alternativo y comprobar integridad.

Resumen final

Has aprendido a instalar y configurar un servidor SVN integrado con Apache en CentOS, crear repositorios, gestionar usuarios y permisos mediante passwd y authz, y probarlo desde clientes Linux y Windows (TortoiseSVN). Además, se incluyeron buenas prácticas, seguridad, backups y listas de verificación por roles para producción.

Importante: en entornos de producción, añade HTTPS, políticas de backup y, si procede, integración con LDAP/AD para gestión centralizada de usuarios.

Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach