SDB:Crear un repositorio svn con Apache2

Saltar a: navegación, buscar
Geeko Esta página describe como crear un repositorio de subversión, svn, para ser utilizado en el servidor Apache en openSUSE.


Versión: 11.3+El artículo se puede aplicar a las versiones de openSUSE a partir de la 11.3.


Introducción

Subversion es un sistema de control de versiones diseñado específicamente para reemplazar al popular CVS. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser el nombre de la herramienta utilizada en la línea de comando. Una característica importante de Subversion es que, a diferencia de CVS, los archivos versionados no tienen cada uno un número de revisión independiente, en cambio, todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en un instante determinado. Subversion puede acceder al repositorio a través de redes, lo que le permite ser usado por personas que se encuentran en distintas computadoras.

Instalación

Paquetes necesarios

El siguiente listado de paquetes son necesarios para la instalación y configuración de repositorios de svn bajo Apache:

  • apache2
  • apache2-doc
  • apache2-prefork
  • libapr1 (Librería Apache Portable Runtime (APR))
  • libapr-util1 (Utilidades para la librería Apache Portable Runtime (APR))
  • libneon27 (Librería de cliente de HTTP y WebDAV)
  • subversion (Sistema de control de versiones)
  • subversion-doc (Archivos de la documentación de Subversion)
  • subversion-server (Módulo Apache para Subversión)

Todos estos paquetes están disponibles en los repositorios oficiales de openSUSE.

Configuración

Creación de usuario y grupo svn

Una vez instalados los paquetes anteriores agregar al sistema operativo un usuario de sistema llamado svn y cuyo grupo también deberá ser svn, este usuario es necesario para ejecutar el software por primera vez y lamentablemente no se crea automáticamente durante la instalación del paquete. Para agregarlo ejecutamos desde la consola:

# groupadd -­r svn
# useradd ­-r -­g svn svn

Configuración de Apache

Una vez instalados los paquetes debemos configurar el servidor web Apapche, lo más recomendable será publicar los repositorios subversión a través del servicio http del Apache usando los protocolos de red WebDAV/DeltaV, para ello debemos hacer uso de los módulos disponibles en Apache. El primer caso consiste en editar el archivo /etc/sysconfig/apache2 y agregar los módulos necesarios, una vez se está editando dicho archivo se modifica la siguiente línea:

APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir php5"

y se le añade al final dav y dav_svn en caso de no existir. Posteriormente crearemos las carpetas que alojarán los repositorios de subversion, para ello en este caso usaré de ejemplo mi la carpeta creada en el home personal denominada public_html

manolobarea@linux-7cqa:~> mkdir -p public_html/svn/repos
manolobarea@linux-7cqa:~> mkdir -p public_html/svn/user_access
manolobarea@linux-7cqa:~> mkdir -p public_html/svn/html

El siguiente paso consiste en editar el archivo /etc/apache2/conf.d/subversion.conf para definir los repositorios a los cuales se tendrá acceso mediante Apache y configurar sus métodos de autenticación respectivos. Dicho archivo deberá modificarse como sigue:

# Example configuration for a subversion repository
# see /usr/share/doc/packages/subversion for the full documentation
#

<IfModule mod_dav_svn.c>

##
## project related HTML files
##
<IfModule mod_alias.c>
        Alias /repos    ~/public_html/svn/html
</IfModule>
<Directory ~/public_html/html>
        Options         +Indexes +Multiviews -FollowSymLinks
        IndexOptions    FancyIndexing \
                        ScanHTMLTitles \
                        NameWidth=* \
                        DescriptionWidth=* \
                        SuppressLastModified \
                        SuppressSize

        order allow,deny
        allow from all
</Directory>

## Configuración para el repositorio “proyecto1” que requiere autenticación
## tanto para la lectura como para escritura en el repositorio.

<Location /repos/proyecto1>
   DAV svn
   SVNPath ~/public_html/svn/repos/proyecto1
   ## Configuración del tipo de autenticación de usuario
   ## y definición de la ruta de los archivos que contienen 
   ## la lista de usuarios autorizados y sus respectivas claves.
   AuthType Basic
   AuthName "Se requiere autorización para el proyecto1"
   AuthUserFile ~/public_html/svn/user_access/proyecto1_passwdfile
   AuthGroupFile ~/public_html/svn/user_access/proyecto1_groupfile

   ## Definición de los grupos a los cuales los usuarios del programa van 
   ## asociados según sus operaciones que pueden realizar en el repositorio. 
   ## Esto queda más claro a medida que se finaliza con la configuración.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require group proyecto1_committers
   </LimitExcept>
   <Limit GET PROPFIND OPTIONS REPORT>
         Require group proyecto1_committers
         Require group proyecto1_readers
   </Limit>
</Location>
   ## Configuración para el Repositorio “proyecto2”, su característica es que
   ## la lectura del repositorio para usuarios anónimos está permitida, pero
   ## para realizar cambios en el mismo el usuario debe autenticarse
<Location /repos/proppos/proyecto2
 
  ## Configuración del tipo de autenticación de usuario
  ## y definición de la ruta del archivo que contiene
  ## la lista de usuarios autorizados y sus respectivas claves.
  <LimitExcept GET PROPFIND OPTIONS REPORT>
        AuthType Basic
        AuthName "Authorization for proyecto2 required"
        AuthUserFile  ~/public_html/svn/user_access/proyecto2_passwdfile
        Require valid­user
  </LimitExcept>
</Location>

##
## Hosting svn at "/"
##
#<VirtualHost *>
#    ServerName svn.example.com
#    ErrorLog    /var/log/apache2/svn.example.com-error_log
#    TransferLog /var/log/apache2/svn.example.com-access_log
#    #
#    # Do not set DocumentRoot. It is not needed here and just causes trouble.
#    #
#    # Map the error documents back to their defaults.
#    # Otherwise mod_dav_svn tries to find a "error" repository.
#    #
#    ErrorDocument 400 default
#    ErrorDocument 401 default
#    ErrorDocument 403 default
#    ErrorDocument 404 default
#    ErrorDocument 405 default
#    ErrorDocument 408 default
#    ErrorDocument 410 default
#    ErrorDocument 411 default
#    ErrorDocument 412 default
#    ErrorDocument 413 default
#    ErrorDocument 414 default
#    ErrorDocument 415 default
#    ErrorDocument 500 default
#    ErrorDocument 501 default
#    ErrorDocument 502 default
#    ErrorDocument 503 default
#    #
#    <Location />
#      DAV svn
#      SVNParentPath /srv/svn/repositories/
#      SVNListParentPath on
#      AuthType Basic
#      AuthName "subversion repository"
#      AuthBasicProvider file
#      AuthUserFile /srv/svn/auth/svn.example.org.htpasswd
#      SetOutputFilter DEFLATE
#      <LimitExcept GET PROPFIND OPTIONS REPORT>
#        Require valid-user
#      </LimitExcept>
#    </Location>
#</VirtualHost>
</IfModule>

Creación de los repositorios del proyecto

Comenzaremos desde nuestro directorio que contendrá los repositorios ~/public_html/svn/repos, desde la consola usamos el comando svnadmin asignar usuarios y grupos a algunas carpetas:

manolobarea@linux-7cqa:~> cd public_html/svn/repos/
manolobarea@linux-7cqa:~/public_html/svn/repos>svnadmin create proyecto1
manolobarea@linux-7cqa:~/public_html/svn/repos> cd proyecto1/
manolobarea@linux-7cqa:~/public_html/svn/repos/proyecto1> chown -R manolobarea:users {db,locks}

Lo mismo habrá que hacer con nuestro segundo proyecto sí es que lo vamos a implementar. Una vez culminado con la creación de los repositorios reiniciamos el servidor http con el siguiente comando:

/etc/init.d/apache2 restart