Vhost, SVN, Apache2

Hace algún tiempo que instale el servidor SVN en uno de nuestros servers con el fin de usarlo para motte. Como siempre pasa, por poco tiempo y falta de planificación ahora motte creció y tenemos hosteados varios proyectos, con lo cual se creo svn.codigolibre.net, ahora el tema que teníamos antes es que estaba pensado el SVN en un principio para un solo proyecto, el framework motte, con lo cual el versionado venia bárbaro, pero al subir cosas dentro del mismo repositorio los demás proyectos comenzaron a tomar el mismo numero de versionado que motte, con lo cual es una #@$&, así que migre el viejo SVN y su configuración anterior a un Vhost de apache2 usando DAV_SVN, con esto gano, en que separo los proyectos, quedan versionando individualmente y puedo ponerlo en cualquier dominio!, así que voy a intentar explicar como realizar esto, y que quede funcionando, de momento esta sobre http, pero pasarlo a https no es tan difícil! 🙂 y estoy buscado como enjaular el svn.

Requisitos: Apache2, Subversion, libapache2-svn
Habilitamos los módulos, dav y svn.
Creamos un carpeta /srv/repos (pej.)
dentro creamos las carpetas de los proyecto que fuera necesario pej. proj1 y pro2, quedaria: /srv/repos/proj1 y /srv/repos/proj2

y tenemos por ejemplo 2 dominios: svn.proj1.net o svn.proj2.net o podemos tenerlo en carpetas para un dominio ej: http://svn.codigolibre.net/motte y http://svn.codigolibre.net/project1 (en si la conf no cambia en mucho).

En donde tenemos la configuración de nuestro vhost debemos agregar las siguientes lineas:

<location /motte> # aca cambia, para que sea svn.codigolibre.net/motte
Order allow,deny
Allow from all
DAV svn
SVNPath /srv/repos/proj1 # El path al repositio, ver tambien
SVNParentPath
SVNAutoVersioning On #Esto habilita el commit de forma automatica
Require valid-user
AuthType Basic
AuthName “project Subversion Repository”
AuthUserFile
/etc/apache2/svn/proj1.dav_svn.passwd # usuarios del repositorio
AuthzSVNAccessFile /etc/apache2/svn/
proj1-authz # permisos sobre el mismo
</location>

Agregamos los usuarios al dav_svn.passwd (yo, cree uno por projecto), para esto usamos htpasswd, las opcion -c crea el archivo, y la -m agrega usuarios.

$sudo htpasswd  -c -m /etc/apache2/svn/proj1.dav_svn.passwd pepe
$sudo htpasswd  -m
/etc/apache2/svn/proj1.dav_svn.passwd juan

El archivo de Authz, podría ser algo así, los nombre pueden cambiar….

[groups]
desarrolladores = pepe, juan # los que definimos en el passwd
otros = anonimo
[/]
@
desarrolladores = rw
@otros = r

Luego de esto, recargamos apache y listo, esta andando….

De momento en svn.codigolibre.net, no se piensa usar Branches, pero para crearlas, podemos hacerlo de la siguiente manera:

a) Trunk – Este es el directorio principal de desarrollo, aquí es donde casi siempre trabajamos

b) Tags – Este es el directorio de las versiones de liberación y de las alpha/beta, es un directorio “muerto”, cada vez que hay una nueva versión, se coloca en tags para el histórico y hacer el archivo project-version.tar.gz y se sigue trabajando en trunk

c) branches -Este es el directorio de las pruebas, si alguien desea intentar algo nuevo o hacer un experimento, lo desarrolla aqui y si resulta y el grupo lo acepta, se mueve al trunk

Para crear este árbol:

$svn –username pepe mkdir http://svn.codigolibre.net/motte -m “create project directory”
$svn mkdir
http://svn.codigolibre.net/motte/trunk -m “create trunk directory”
$svn mkdir
http://svn.codigolibre.net/motte/tags -m “create tags directory”
$svn mkdir
http://svn.codigolibre.net/motte/branches -m “create branches directory”

Bueno, me queda por ver la posibildad de alguna interfaz web que haga mas facil el mantenimiento de los repos,usuarios y authz por mysql/ldap y chrootear el svn.

mas info en: svnbook, svn en wikipedia