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

Cómo elegir proveedor SaaS confiable
SaaS

Cómo elegir proveedor SaaS confiable

Cómo acceder o desactivar Recents en Google App
Privacidad

Cómo acceder o desactivar Recents en Google App

Usar Android como teclado y ratón para PC
Productividad

Usar Android como teclado y ratón para PC

Cómo guardar tus copias de WhatsApp antes del borrado
Guía técnica

Cómo guardar tus copias de WhatsApp antes del borrado

Subir y ver fotos 360° en Facebook
Redes sociales

Subir y ver fotos 360° en Facebook

Convertir vídeos y audio con VLC: guía rápida
Tutorial

Convertir vídeos y audio con VLC: guía rápida