Empecemos bien.
Este post es el resultado de un proyecto que realicé en mi antigua empresa y que me sirvió para adentrarme en el conocimiento de Apache. Espero que os sirva porque subversion puede ser muy util para empresas que necesitan tener un sistema controlado de las revisiones y versiones de sus datos.
Propuesta:
La idea inicial es utilizar un servidor web Apache el cual estara integrado con el servidor subversion, que a su vez manejara las peticiones hacia los repositorios de un servidor de datos donde estan alojados los repositorios de los diferentes proyectos que pueda tener una empresa. La localizacion de los repositorios puede estar en un servidor linux o windows.
A su vez accedemos a los distintos repositorios con autenticacion LDAP del dominio, lo cual lo configuraremos en Apache. Esto es una medida de seguridad de las multiples que se os puedan ir ocurriendo. Ya sabemos que apache brinda muchas posibilidades.
En mi caso, el servidor Apache lo tenemos alojado en un servidor externo llamado “servidorweb”.
Tareas previas a la instalación:
Antes que nada debemos de conocer un poco el funcionamiento de subversion, para ello podemos echarle un vistazo a la documentacion de la pagina oficial: http://subversion.tigris.org/
Ademas para el uso habitual de Subversion usaremos Tortoise SVN y que nos podemos descargar gratuitamente desde su pagina oficial: http://tortoisesvn.tigris.org/
Proceso de instalación de los paquetes
Necesitaremos tener instalados los siguientes paquetes mediante yast de OpenSuse:
|
Paquete |
Version |
Descripcion |
|
apache2 |
2.2.3 |
The Apache Web Server |
|
apache2-doc |
2.2.3 |
Additional Package Documentation |
|
apache2-prefork |
2.2.3 |
Apache 2 “prefork” MPM (Multi-Processing Module) |
|
subversion |
1.4.0 |
A Concurrent Versioning system similar to but better than CVS |
|
subversion-doc |
1.2 |
A Concurrent Versioning System Similar to, but Better than CVS |
|
subversion-tools |
1.4.0 |
Tools for Subversion |
|
subversion-server |
1.4.0 |
Apache server module for Subversion server |
Si por algun motivo falta algun paquete o libreria necesaria para lanzar correctamente Apache, éste nos lo dirá y podremos añadirlo desde Yast.
Proceso de configuracion de Apache:
Editaremos el fichero de Apache para que cargue los modulos que hay disponibles, al haberlo instalado desde Yast, el fichero estará en la siguiente localización:
/etc/sysconfig/apache2
El cual nos muestra una linea como esta:
APACHE_MODULES=”actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user authn_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif ssl suexec userdir php5 dav dav_svn authnz_ldap ldap “
a la que hemos añadido al final los siguientes modulos:
dav
dav_svn
authnz_ldap
ldap
donde los dos primeros son para la integracion con subversion y los ultimos para LDAP. Con esto tendremos cargados los modulos que necesita Apache para la integracion con Subversion.
Proceso de configuracion de repositorios en Apache:
Ahora tenemos que decirle a Apache los repositorios los cuales añadiremos como directorios de Apache en los archivos de configuracion.
Al instalar los paquetes de subversion se nos crea el siguiente fichero:
/etc/apache2/conf.d/subversion.conf
al cual Apache llama apuntando a todos los ficheros .conf de la ruta “/etc/apache2/conf.d/”. Lo que editemos aqui sera lo que carguemos en Apache.
Editamos el fichero y añadimos la configuracion para un repositorio:
<Location /svn/prueba>
DAV svn
SVNPath /srv/svn/repositorios/servidor-ficheros/prueba
AuthType Basic
AuthName “Authorization for project2 required”
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPBindDN “CN=ldapauth,CN=Users,DC=dominio,DC=com”
AuthLDAPBindPassword ldapauth
AuthLDAPURL “ldap://servidor-ldap.dominio.com:3268/DC=dominio,DC=com?sAMAccountName?sub?(objectClass=*)”
require valid-user
</Location>
Los datos explicativos de este fichero de configuracion son:
- DAV svn –> Usar subversion
- SVNPath –> Directorio donde reside el repositorio de subversion
- AuthType Basic –> Autenticacion de tipo basico
- AuthName “Authorization for project2 required” –> Cabecera que aparecera al pedir la autenticacion.
- AuthBasicProvider ldap –> Autenticacion por LDAP
- AuthzLDAPAuthoritative off –>
- AuthLDAPBindDN “CN=ldapauth,CN=Users,DC=dominio,DC=com” –> Localizacion en el arbol del Active Directory donde esta el usuario para la autenticacion con el LDAP
- AuthLDAPBindPassword ldapauth –> Usuario para la autenticacion con el LDAP
- AuthLDAPURL “ldap://servidor-ldap.dominio.com:3268 /DC=dominio,DC=com?sAMAccountName?sub?(objectClass=*)” –> URL de busqueda que hace sobre el LDAP y sobre la que se buscaran los usuarios para el acceso al servidor. Aqui el numero de puerto dependera de a que servidor apuntemos o de como lo tengamos configurado en nuestro dominio.
- require valid-user –> Requiere un usuario valido
Para la consulta LDAP se puede depurar usando todo tipo de busquedas que permita el modulo LDAP de Apache, una sencilla aplicada a nuestro ejemplo para que solo haga la busqueda de los usuarios que pertenezcan al grupo “Sistemas” seria:
AuthLDAPURL “ldap://ldap-server:3268 /DC=dominio,DC=com?sAMAccountName?sub?(memberOf=CN=Sistemas,OU=GruposCreados,DC=dominio,DC=com)”
Montaje de repositorios en el servidor:
En mi caso los datos se van a almacenar en un servidor windows, por lo que tendré que montar la carpeta contenedora de los repositorios y referenciarlos en mi servidor OpenSuse. Para ello deberemos de contar con una carpeta compartida (donde estaran los repositorios) y un usuario y password del dominio que tenga permisos sobre esa carpeta compartida.
Un riesgo de todo esto es tener un servidor web publico con los repositorios montados localmente en el mismo servidor donde reside Apache. Para ello hay multiples medidas de seguridad (proxy inverso, SSL, reescritura de URLs..) que podemos utilizar. El caso es jugar un poco con ello.
Bien, creamos la carpeta para el repositorio:
mkdir /srv/svn/repositorios/servidor-ficheros/
1.- Montaje manual:
Montar el repositorio de “servidor-ficheros” en el servidor OpenSuse local. Esto se puede hacer a mano con el siguiente comando:
mount -t cifs -o uid=wwwrun,gid=www,username=DOMINIO/subversion,pass=**password** //servidor-ficheros/Subversion /srv/svn/repositorios/servidor-ficheros/
Donde hacemos el montaje mediante el sistema de ficheros cifs (evolucion de samba), y lo montamos con el usuario de Apache y su grupo. Ademas al montarlo autentifica con el usuario de dominio “subversion” sobre “servidor-ficheros”. Hay que prestar atencion al password.
Podemos desmontar el volumen con el comando:
umount -t cifs //servidor-ficheros/Subversion /srv/svn/repositorios/servidor-ficheros/
2.- Montaje automatico
Para que tambien se carge al inicio lo tenemos que añadir al fichero de montaje de arranque /etc/fstab, el cual podemos editar y añadir al final la ultima linea:
/dev/sda2 / ext3 acl,user_xattr 1 1
/dev/sda3 /home ext3 acl,user_xattr 1 2
/dev/sda1 swap swap defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/fd0 /media/floppy auto noauto,user,sync 0 0
//servidor-ficheros/subversion /srv/svn/repositorios/servidor-ficheros cifs uid=wwwrun,gid=www,username=DOMINIO/subversion,password=**password**,dmask=0777,fmask=0777
Con esto nos monta el directorio “//servidor-ficheros/Subversion” en /srv/svn/repositorios/servidor-ficheros/
Podemos entrar ahora a explorarlo y ver que aparecen todas las carpetas con los permisos adecuados.
Recargamos Apache
Podemos reiniciar el servidor
rcapache2 restart
o recargar para asegurar de que no da ningun fallo. Es posible que haya que ejecutar este comando en algun proceso anterior:
rcapache2 reload
Podemos acceder mediante tortoise a http://servidor-web/repos/proyecto/
Etiquetas: apache, linux, subversion
Diciembre 23, 2008 a las 5:52 pm |
[...] subversion sobre OpenSuse II By ismich Con el post anterior veiamos como usar un repositorio Subversion en Apache, lo montabamos desde un servidor de [...]