Subversion (Español)
Apache Subversion es «un completo sistema de control de versiones originalmente diseñado para ser un mejor CVS. Desde entonces, Subversion se ha expandido más allá de su objetivo original de reemplazar CVS, pero su modelo básico, diseño e interfaz siguen siendo fuertemente influenciados por ese objetivo».
Este artículo trata sobre la configuración de un servidor svn en su máquina. Hay dos servidores svn populares, el vnserve incorporado y la opción más avanzada, Apache HTTP Server con complementos svn.
Configuración de Apache Subversion
Objetivos
El objetivo de este ejemplo es configurar Subversion, con Apache. ¿Por qué usar Apache para Subversion? Bueno, sencillamente, proporciona características que el svnserve
independiente no tiene...
- Soporte HTTPS. Esto es más seguro que la autenticación MD5 utilizada por svnserve.
- Controles de acceso de grano fino. Puede utilizar la autenticación de Apache para limitar los permisos por directorio. Esto significa que puede otorgar acceso de lectura a todo, pero solo puede confirmar el acceso al troncal, mientras que otro grupo tiene acceso de confirmación a etiquetas o sucursales.
- Un visor de repositorio gratuito.
- El equipo de Subversion está trabajando en la integración perfecta de WebDAV. En algún momento, debería poder utilizar cualquier interfaz WebDAV para actualizar los archivos en el repositorio.
Instalación
Instale Apache HTTP Server como se describe en su artículo.
Además de Apache, solo necesitará instalar el paquete subversion.
Configuración de Subversion
Cree un directorio para sus repositorios:
# mkdir -p /home/svn/repositories
Editar /etc/httpd/conf/httpd.conf
Asegúrese que lo siguiente esté listado... Si no, agréguelos (normalmente tendrá que agregar solo los dos últimos), deben estar en este orden:
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so
¿SSL o no SSL?
SSL para el acceso SVN tiene algunos beneficios, por ejemplo, le permite usar el Autotipo Básico de Apache, con poco temor a que alguien esté buscando contraseñas.
Genere el certificado:
# cd /etc/httpd/conf/ # openssl req -new -x509 -keyout server.key -out server.crt -days 365 -nodes
Agregue lo siguiente a /etc/httpd/conf/extra/httpd-ssl.conf
(o a /etc/httpd/conf/extra/httpd-vhosts.conf
Si no está utilizando ssl). Incluya lo siguiente dentro de una directiva de host virtual:
<Location /svn> DAV svn SVNParentPath /home/svn/repositories AuthzSVNAccessFile /home/svn/.svn-policy-file AuthName "SVN Repositories" AuthType Basic AuthUserFile /home/svn/.svn-auth-file Require valid-user </Location>
Para asegurarse de que la configuración de SSL se cargue, elimine el comentario de la línea de configuración de SSL en /etc/httpd/conf/httpd.conf
para que se vea así:
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Include /etc/httpd/conf/extra/httpd-ssl.conf
Crear /home/svn/.svn-policy-file
[/] * = r [REPO_NAME:/] USER_NAME = rw
El * en la sección / coincide con los usuarios anónimos. Cualquier acceso por encima y más allá de solo lectura se le pedirá un usuario/contraseña por apache AuthType Basic. La sección REPO_NAME:/ hereda los permisos de los anteriores, por lo que los usuarios no tienen permiso de solo lectura. El último bit otorga permiso de lectura/escritura del repositorio REPO_NAME al usuario USER_NAME.
Crear /home/svn/.svn-auth-file
Esto es un archivo htpasswd o htdigest. Utilice htpasswd. Nuevamente, debido a SSL, no debe preocuparse tanto por el rastreo de contraseñas. htdigest proporcionaría aún más seguridad en comparación con la inhalación, pero en este momento no lo necesita. Ejecute la siguiente orden.
# htpasswd -cs /home/svn/.svn-auth-file USER_NAME
Lo anterior crea el archivo (-c
) y usa SHA-1 para almacenar la contraseña (-s
). Se crea el usuario USER_NAME
.
Para agregar usuarios adicionales, omita la marca (-c
).
# htpasswd -s /home/svn/.svn-auth-file OTHER_USER_NAME
Crear un repositorio
# svnadmin create /home/svn/repositories/REPO_NAME
Establecer permisos
El usuario de Apache necesita permisos sobre el nuevo repositorio.
# chown -R http:http /home/svn/repositories/REPO_NAME
Crear un proyecto
Estructura de directorio para proyecto
Cree un directorio temporal con la estructura de directorio branches
tags
trunk
en su máquina de desarrollo.
$ mkdir -p ~/svn-import/{ramas, etiquetas, principal}
Poblar el directorio
Copie o mueva los archivos de origen de su proyecto al directorio principal creado.
$ cp -R /my/existing/project/* ~/svn-import/trunk
Importar el proyecto
$ svn import -m "Initial import" ~/svn-import https://yourdomain.net/svn/REPO_NAME/
Revisar prueba SVN
$ svn checkout https://yourdomain.net/svn/REPO_NAME/ /my/svn/working/copy
Si todo funcionó, ahora debería tener una copia revisada y en funcionamiento de su repositorio SVN recién creado.
Configurar Svnserve
Instalar el paquete
Instale el paquete subversion.
Crear un repositorio
Cree su repositorio
mkdir /path/to/repos/ svnadmin create /path/to/repos/repo1
Su repositorio inicial está vacío, si desea importar archivos en él, use la siguiente orden:
svn import ~/code/project1 file:///path/to/repos/repo1 --message 'Initial repository layout'
Establecer políticas de acceso
Edite el archivo /path/to/repos/repo1/conf/svnserve.conf y elimine el comentario o agregue la línea debajo de [general]
password-db = passwd
Es posible que también desee cambiar la opción predeterminada para usuarios anónimos.
anon-access = read
Reemplace «read» con «write» para un repositorio en el que cualquiera pueda comprometerse, o configúrelo en «none» para deshabilitar todo el acceso anónimo.
Ahora edite el archivo /path/to/repos/repo1/conf/passwd
[users] harry = foopassword sally = barpassword
Lo anterior define a los usuarios harry y sally, con contraseñas foopassword y barpassword, cámbielas como desee.
Iniciar el demonio del servidor
Antes de iniciar el servidor, edite el archivo de configuración:
/etc/conf.d/svnserve
SVNSERVE_ARGS="--root=/path/to/repos"
La opción --root=/path/to/repos
establece la raíz del árbol del repositorio. Si tiene varios repositorios, use --root=/path-to/reposparent
. Luego acceda a los repositorios independientes pasando el nombre del repositorio en la URL: svn://host/repo1
. asegúrese de que el usuario tenga acceso de lectura / escritura a los archivos del repositorio.
Opcionalmente, agregue un --listen-port
si desea un puerto diferente u otras opciones.
Por defecto, el servicio se ejecuta como root. Si desea cambiar eso, agregue un drop-in:
/etc/systemd/system/svnserve.service.d/50-custom.conf
[Service] User=svn
Ahora inicie el daemon svnserve.service.
svn+ssh
Para usar svn+ssh: //, tenemos que tener un contenedor escrito para svnserve.
Compruebe dónde se encuentran los binarios svnserve:
# which svnserve /usr/local/bin/svnserve
Nuestro contenedor tendrá que caer en PATH antes de esta ubicación ...
cree el contenedor:
# touch /usr/bin/svnserve # chmod 755 /usr/bin/svnserve
Ahora edítelo para que se vea así:
/usr/bin/svnserve #!/bin/sh # wrapper script for svnserve umask 007 /usr/local/bin/svnserve -r /path/to "$@"
-r /path/to
es lo que hace uso de la svn con svn+ssh://server.domain.com:/reponame en lugar de :/path/to/reponame
.
Inicie svnserve con el nuevo script de contenedor de esta manera:
# /usr/bin/svnserve -d ( start daemon mode )
También podemos verificar los permisos para usuarios remotos como este:
$ svn ls svn+ssh://server.domain.com:/reponame ++server.domain.com++ dev/ qa/ release/
Copia de seguridad y restauración de Subversion
Para hacer una copia de seguridad de sus repositorios de Subversion, haga esto para cada repositorio que tenga.
$ svnadmin dump /path/to/reponame > /tmp/reponame.dump $ scp -rp /tmp/reponame.dump user@server.domain.com:/tmp/
Para restaurar la copia de seguridad, cree primero los repositorios correspondientes:
svnadmin create /path/to/reponame
Luego cargue svn dump en el nuevo repositorio:
svnadmin load /path/to/reponame < /tmp/repo1.dump
Permisos de configuración:
chown -R svn:svnusers /path/to/reponame ; chmod -R g+w /path/to/reponame/db/
Estos repositorios ahora deberían estar todos configurados.
Clientes Subversion
Vea también Wikipedia:Comparison of Subversion clients.
- kdesvn — Cliente Subversion para KDE.
- RabbitVCS — Conjunto de herramientas gráficas escritas para proporcionar acceso simple y directo a los sistemas de control de versiones que utiliza.