sábado, 19 de febrero de 2011

¿Como Montar un Servidor SVN?

Con lo que hay aqui y un bizcocho (cocho-raro :-), ya tienes suficiente para arrancar tu primer servidor SVN por red. Las opciones de cliente, los comits y demas lo encontrarás en cualquier manual básico. Si quieres (aconsejable) tambien lo puedes montar con tuneles ssh, o por webdav.

Despues de leer esto, sabrás montar un servidor SVN y utilizarlo minimamente.

No te voy a explicar ni que es SVN, ni un Repostorio, ni una rama, ni ninguna de las ventajas del mismo, eso lo encontrarás muy facilmente googleando. Veras que es muy sencillo montar el servidor, lo que pasa que los manuales de mas 300 páginas asustan :-).

SVN, es muy potente, por eso, sus manuales son tan extensos. Eso no quiere decir que no te los tengas que leer (LEE!!!).

Encontrarás el original/actualizado de este mini-como,(por si ha sufrido modificaciones) en mi pagina personal. (dentro del FAQ de Linux)

Si crees que necesitas más, aquí puedes encontrar mucha mas documentación sobre el Subversion.

Partimos de que tienes Subversion instalado. (sino apt-get install subversion, o como lo hagas en tu distro; aunque hay gento -digo gente que prefiere compilarlo, entonces ya no vale lo de los 28 segundos.)

Iniciamos crono: 00:00:00
Conceptos basicos

Si tienes varias cosas, no las metas todas bajo un mismo repostorio. Mas adelante podria ser que te interesara separarlas y pese a que tengas ramas, si quisieras separarlas fisicamente te daria trabajo... no es dificil, pero es mas facil hacer las cosas bien desde un principio.

Arranca el demonio del servidor como un usuario no root, así que create una cuenta para dicho demonio.

# groupadd -g 99 svnd
# useradd svnd -d /srv/svn -g svnd -s /bin/false -m -k /dev/null -c 'usuario svnServer' -u 99

Lo pongo con ejemplos para que te sea entendible.
Supongamos que tenemos el proyecto "prueba". Lo que vamos ha hacer es crearle un repostorio para el solito.

Las fuentes de prueba, las tenemos en el directorio "prueba" de nuestro home.

* Crear un nuevo repostorio, en el servidor (puedes crear tantos como quieras):

> mkdir -p /srv/svn/prueba/
> svnadmin create /srv/svn/prueba/

* Para probar configura el repostorio de forma que permita escritura anonima.
En el fichero (en este caso) /srv/svn/prueba/conf/svnserve.conf pon lo siguiente:

[general]
anon-access = write

*

Arrancar el servidor en modo demonio:
Fíjate que ademas le doy el "-r", para que no permita salir /srv/svn/, que es donde tengo guardados todos los repostorios. Ademas con esto haces que los clientes, no tengan que escribir el path completo, para el caso seria: svn checkout svn://host.example.com/prueba. Si no utilizas "-r" tendrian que poner que indicar que el repostorio es /srv/svn/prueba; ademas de las consideraciones de seguridad que se deducen.

> svnserve -d -r /srv/svn/

Asegurate de tener accesible el puerto 3690 (TCP y UDP).

Evidentemente te puedes crear un script de arranque para la ocasión, para tu distro. (2 minutos)
El servidor está montado, ahora quedaria utilizarlo asi que:
Paramos crono: 00:00:27 un segundo menos!!! Wihaaa!
* Ahora hacer una autentificación básica, sobre un fichero de texto plano en /srv/svn/prueba/conf/svnserve.conf pon lo siguiente:

[general]
anon-access = none
auth-access = write
password-db = passwd

Esto seria para: anonimos sin lectura ni escritura. Autentificados lectura y escritura.
Lo que ves detras de "password-db", es el nombre de fichero de contraseñas.

El path es referente al fichero desde el que lo llamamos por lo tanto en este caso seria /srv/svn/prueba/conf/passwd. Aqui su contenido de ejemplo (con un usuario).

[users]
pepito=5agachatequetela

* Si quieres llevar una buena estructura de trabajo create el arbol (en local) del siguiente modo:

/tu_directorio_de_trabajo/branches/
/tu_directorio_de_trabajo/tags/
/tu_directorio_de_trabajo/trunk/
/tu_directorio_de_trabajo/trunk/ficheros_del_proyecto

Todos los ficheros sobre los que trabajarás van en trunk (llamale como quieras).
Las ramas (branches - o como quieras llamarle) son algo así, como que saques la version 3.0 y que esta hagas una copia exacta (conservando todos sus historicos), sobre la que solo saques parches y correcciones. Es una rama paralela al proyecto.
Una etiqueta (tag - o ponle el nombre que quieras) es lo mismo pero si esto no se modifica.
Ojo! para saber como se hace la copia leete el manual.
Esto mas que una regla de trabajo, es un estilo de trabajo.
Imagina por ejemplo que trunk es la version en desarrollo, pero ademas tienes en plan facil, listas para bajar las versiones antiguas y estables (serian tags) y las mismas parcheadas (serian branches).
* A subir el codigo que tenemos. La primera vez lo hacemos así, es una importacion completa.

> svn import /tu_directorio_de_trabajo/ svn://host.example.com/prueba -m "import inicial"
Adding /tu_directorio_de_trabajo/trunk
Adding /tu_directorio_de_trabajo/fichero1.c
Adding /tu_directorio_de_trabajo/fichero2.c
Adding /tu_directorio_de_trabajo/branches
Adding /tu_directorio_de_trabajo/tags
Committed revision 1.

* Ciclo básico de trabajo:
Consulta lo que hacen estos comamndos en la documentación de SVN.
o Actualizar copia de trabajo
+ svn update
o Hacer los cambios pertinentes
+ svn add
+ svn delete
+ svn copy
+ svn move
o Examinar mis cambios
+ svn status
+ svn diff
+ svn revert
o "Mergear" otros cambios
+ svn merge
+ svn resolved
o Enviar mis cambios al repostorio
+ svn commit
* Copias de seguridad
Para dumpear nuestro repostorio conservando los historicos y todo (la idea es poner esto en un cron):

svnadmin dump /srv/svn/prueba | gzip -9 > dump_svn_prueba.gz

Para restaurarlo:

gunzip -c dump_svn_prueba.gz | svnadmin load /srv/svn/prueba

* Sacar una version para distribuir.
Si lo copias tal cual, llevará las carpetas .svn en cada directorio, asi que lo unico que tendrias que hacer es (en caso que quieras el arbol principal):

svn export svn://host.example.com/prueba/trunk
$ tar -cvf prueba.tar trunk
$ gzip prueba.tar

Final!! Ahora ya puedes empezar a disfrutar de este sistema de control de versiones, que además de para fuentes, puede servir para mil cosas mas, desde copias de seguridad remotas de ficheros de configuración en modo histórico (un poco de perl y un canuto, y ya lo tienes funcionando), hasta autenticos gestores de documentación; como si te quieres guardar la pornografía en repostorios xD...

Fuente: kopernix.com

No hay comentarios:

Publicar un comentario