ReceTas101-110

De GhostWiki
Saltar a: navegación, buscar
Secciones

HomePage¿Qué es e-ghost?ProyectosHerramientasDocumentosRecetasCursos ReunionesEnlacesHumorGhostLogAlternativas LibresContactoEuskaraz

Las Recetas de la Abuela (101 a 110)

En esta sección podremos ver los típicos truquillos que todo el mundo sabe pero nadie recuerda. Si quieres incluír una receta, infórmate en nuestra lista de correo cómo hacerlo. Si ya conoces cómo, introduce una nueva receta aquí.

Recetas, de la 101 a la 110


Receta_101

Título: Routing con 2 salidas hacia internet. Fase 1: configuración de cablemodem de euskaltel e ip estática en Linux

Autor/a: Zefe (zefe en rigel punto deusto punto es)

Iepa, esto en realidad podría ser un único howto pero lo separo en 2 porque en realidad incluye 2 problemáticas distintas. Lo de siempre, se agradecen cambios y comentarios.

Objetivo general:

Configurar una segunda salida a internet en un firewall Linux y desviar el tráfico de algunos servidores a través de ella.

Alcance: Cómo configurar una conexión a euskaltel con cablemodem e ip estática.


Disclaimer: No adjunto el script que utilizo porque es bastante dependiente de la instalación concreta. Lo que hago es describir los pasos. Si luego lo scriptas o si lo haces a manija… ya es cosa tuya ;-) Seguramente, aunque lo incluyera, lo tendrías que tunear tanto que merece la pena hacerlo desde 0

En ningún momento esta arquitectura pretende hacer balanceos de carga ni nada similar. Ese es otro mundillo ;)

Entorno previo: [1] Tanto la red de pc's como la red de servidores, salen "nateados" a través del eth2. Entre las redes de pc's y de servidores hay routing.

Eth2: 192.168.100.253/24 gw 192.168.100.254

Eth1: 192.168.101.254/24

Eth0: 192.168.0.0/24

Eth3: sin uso


Entorno objetivo:
[2] Configuremos la salida vía cable-modem con ip estática (de momento supongamos que solo existe el cablemodem)

Lo que hay que hacer es conectar el interfaz eth3 directamente al cablemodem. Al levantar el interfaz eth3 con 'ifup eth3', el eth3 pilla una dirección por dhcp en plan chupiguays. Si sólo tuvieras esa salida a Internet y no quieres configurar ip estática… ya lo tienes==== No hay que hacer nada.====

Ahora lo que vamos a hacer es configurar la ip estática. ¿Cómo funciona esto?

Eukaltel lo que hace es darte una ip dinámica y que luego con esa ip dinámica establezcas una conexión pptp en la que te asignan tu ip. Por ello, tu ip estática quedará en el interfaz ppp0. Eso sí, te habrán asignado otro bonito gateway por defecto.

En Windows, cuando haces este procedimiento, al gateway por defecto del eth3, le ponen una métrica de 20 para que no lo use para las conexiones normales. Linux te pondrá las 2 rutas con el mismo peso y todo se irá al cuerno. Nosotros, lo que haremos será eliminar el gateway por defecto del eth3 y establecer una ruta estática vía eth3 hacia el nodo del pptp.

Otro detalle es que Linux te pillará una mtu de 1500 para el interfaz eth3. Eso es un problema porque al meter el tráfico encapsulado sobre el pptp y sobre el eth3, los paquetes se van a empezar a cortar. Para ello, lo primero que hay que hacer es ajustar la mtu del interfaz eth3 a 1492 para que los paquetes no se corten.

  1. ip link eth3 set mtu 1492

Vale, ahora hay que instalar los paquetes que te permiten realizar conexiones pptp:

  1. apt-get install pptp-linux

Ok, modificamos el fichero:

  1. vi /etc/ppp/chap-secrets

Añadimos una línea de este tipo: usuario@euskalcm nombre-conexion contraseña *

Modificamos también el archivo:

  1. vi /etc/ppp/peers/nombre-conexión

y añadimos un bloque así (ajustadlo con los parámetros que os haya proporcionado Euskaltel)

pty "pptp IpNodoEuskaltel --nolaunchpppd" name usuario@euskalcm lock remotename nombre-conexion

  1. nodeflate
  2. nobsdcomp

noauth persist defaultroute debug

  1. mtu 1480

mtu 1380

Fijaros en el detalle de la mtu que he puesto. Es un valor puesto a ojimetro pero funciona correctamente. Ahora vamos a jugar un poco con las rutas para que cuando levantemos el pptp no se nos chine el sistema con varias rutas por defecto.

Apuntáis el gateway por defecto que tengáis en el eth3 y que se ha cogido por dhcp. Borrais el gateway por defecto con un:

  1. ip route del default

O un

  1. route del 0.0.0.0

Y añadís una ruta estática para llegar hasta el nodo de euskaltel de pptp:

  1. ip route add IpNodoEuskaltel/32 via GatewayPorDefectoApuntado

y ala=== A jugar a pala====! :-D=======

hacéis un:

  1. pon nombre-conexión

Y automáticamente se habrá creado un interfaz ppp0 que tiene conexión a Internet, que tiene ip estática y que tiene una ruta por defecto correcta.

Receta_101b

'Título:' Routing con 2 salidas hacia internet. Fase 2: Rutado de tráfico según el origen

'Autor/a:' Zefe (zefe en rigel punto deusto punto es)

Iepa==== esto en realidad podría ser un único howto pero lo separo en 2 porque en realidad incluye 2 problemáticas distintas.==== Lo de siempre, se agradecen cambios y comentarios.

Objetivo general: Configurar una segunda salida a internet en un firewall Linux y desviar el tráfico de algunos servidores a través de ella.

Alcance: Cómo manipular las tablas de rutas del kernel para evitar dobles rutas por defecto Cómo manipular las tablas de rutas para que el tráfico procedente del Proxy se desvíe a través del interfaz secundario.

Disclaimer: No adjunto el script que utilizo porque es bastante dependiente de la instalación concreta. Lo que hago es describir los pasos. Si luego lo scriptas o si lo haces a manija… ya es cosa tuya ;-) Seguramente, aunque lo incluyera, lo tendrías que tunear tanto que merece la pena hacerlo desde 0

En ningún momento esta arquitectura pretende hacer balanceos de carga ni nada similar. Ese es otro mundillo ;)

Entorno previo:

[3] Tanto la red de pc's como la red de servidores, salen “nateados” a través del eth2. Entre las redes de pc's y de servidores hay routing.

Eth2: 192.168.100.253/24 gw 192.168.100.254

Eth1: 192.168.101.254/24

Eth0: 192.168.0.0/24

Eth3: sin uso


Entorno objetivo:
[4]

Ok, la estrategia es la siguiente.

Por defecto en el sistema funciona la tabla de rutas main. Es la típica que sale cuando haces ejecutas el comando route.

Nuestro objetivo, es crear una tabla de rutas especial con otro gateway por defecto. Añadiremos una regla que indique que todo lo procedente de cierta dirección ip, utilice esa tabla olvidándose de la tabla main. La tabla main la dejaremos tranquila tal y como está para que los demás equipos sean rutados como siempre.

Si configuras las 2 salidas a Internet, tendrás que eliminar la ruta por defecto del interfaz secundario en la tabla main. Si te dejas las 2 rutas… mal asunto. También podrías cambiar la métrica de la secundaria para que se utilice desde la tabla main si falla el interfaz principal… no sé, habría que probarlo pero seguramente funcione.

Por simplificar el tema, voy a suponer que el eth2 y el eth3 son los que tienen las salidas a internet y que conoces los gateways (si el tema no estático… seguro que con un poco de scripting lo sacáis rápido)

Salida a inet 1. la principal: IP1 GW1 MASK1

Salida a inet 2: IP2 GW2 MASK2

Lo primero es eliminar las 2 rutas por defecto en la tabla main:

  1. route del 0.0.0.0
  2. route del 0.0.0.0

Ahora añades la ruta por defecto route add 0.0.0.0 gw GW1

Con eso, el sistema tiene las 2 conexiones a internet funcionando. Todos los pcs de la red siguen trabajando. Eso sí, por la secundaria no sale tráfico.


Lo siguiente es crear esa tabla de rutas especial para el interfaz 2:

  1. vi /etc/iproute2/rt_tables

Ahí aparecen las tablas que hay en el sistema. Añadir una línea de este tipo:

150 Tcable

Ahora vamos a configurar las reglas según las cuales indicamos que el tráfico procedente de la dirección ip IP01 utilice la tabla Tcable. Un detalle interesante para comentar es que si al llegar a la tabla Tcable, no se consigue enrutar el paquete, se salta a la tabla main para intentarlo con las rutas de ésta.

Enga, vamos a meter todo el tráfico con destino y procedente del Proxy en la tabla del cablemodem:

  1. ip rule add from ipProxy table Tcable
  2. ip rule add to ipProxy table Tcable

Y ahora vamos a configurar la tabla de rutas para que todo funcione chachi. Lo primero, especificar en la tabla de rutas las redes locales para que los paquetes sean capaz de llegar a ellas.

  1. ip route add 192.168.0.0/24 dev eth0 table Tcable
  2. ip route add 192.168.101.0/24 dev eth1 table Tcable
  3. ip route add 192.168.100.0/24 dev eth2 table Tcable
  4. ip route add 127.0.0.0/8 dev lo table Tcable

Añadir la ruta local de la interfaz del cable:

  1. ip rule add from IP2 table Tcable

Finalmente, añadimos una ruta de salida por defecto para todo lo que se enrute a través de la tabla secundaria.

  1. ip route add default via GW2 table Tcable

Con eso debería ser suficiente para que todo funcione correctamente. Si venís de la fase 1, veréis que hay bastantes diferencias.

La primera es que necesitas borrar las rutas por defecto y en la tabla main añadir una ruta para llegar al nodo de euskaltel a través del eth3. Después, conectas el túnel pptp y también borras la ruta por defecto que éste te genera.

Finalmente, para añadir rutas por defecto en el túnel pptp, necesitas añadir esto

  1. ip route add default dev ppp0 table Tcable


¿Cómo casa todo esto con iptables, nat y demás juergas?

Pues vaya… un pequeño cristo. La estrategia es que todo esto se ejecute en el arranque antes que el script de iptables que tengas. La razón es que si utilizas interfaces de tipo ppp0, hasta que no estén levantados, iptables no los verá y por tanto fallará. Si jugas con el rc.d seguro que localizas rápido cómo lanzar este script antes que iptables.

Por otro lado, también te aconsejo que esperes a detectar que el cable de euskaltel te ha dado una dirección ip de verdad antes de continuar cualquier proceso. A veces te da una dirección ip de gestión del cablemodem y te deja un poco vendido.

Yo me hice este cacho script para asegurarme de que la IP era válida (seguro que se puede mejorar pero funciona). Lo que hace es resolicitar una dirección ip hasta que esta es distinta de la de gestión.

ifup $DEV sleep 3


IPCABLE=`ip address show dev $DEV | grep inet |grep -v inet6 |cut -d " " -f 6 |cut -d "/" -f1`

    1. Deteccion de ip interna no valida

MALA=TRUE while "$MALA" = "TRUE" ; do

echo "la ip que tengo es mala?: $MALA" if "$IPCABLE" = "192.168.100.10" ; then

       echo "Recuperando direccion valida"
       dhclient -r $DEV
       sleep 0.5
       dhclient $DEV
       IPCABLE=`ip address show dev $DEV | grep inet |grep -v inet6 |cut -d " " -f  6 |cut -d "/" -f1`

else

       MALA=FALSE
       echo "la ip que tengo es mala?: $MALA"

fi

done


Receta_102

Título: Cómo montar particiones ntfs

Autor/a: Álvaro Morán

1º) Necesitas tener instalado "ntfs-3g", para saber si lo tienes instalado vete al terminal y escribe "ntfs-3g", si te aparece el siguiente mensaje: "Please type 'ntfs-3g --help' for more information." entonces lo tienes instalado, si no se instala facilmente desde synaptics o adept. 2º) Crea en "/mnt" una carpeta por cada partición ntfs que quieras montar, 3) si quiero montar la partición de mi windows en la carpeta windows desde el terminal escribo: "mount -t ntfs-3g /dev/sda1 /mnt/windows", (siendo root, o añadiendo el "sudo" delante del comando), 4º) eso sí, si lo que quieres es que se monte automaticamente al iniciar sesión tienes que modificar el archivo "fstab" que se encuentra en "/etc" (necesitas ser root para ello) y añadir algo como esto: "/dev/sda1 /mnt/windows ntfs-3g defaults 0 0" MUCHO CUIDADO AL MODIFICAR EL ARCHIVO FSTAB, en mi caso (monto la partición de datos pero no la de windows) le he añadido estas líneas:

  1. /etc/fstab: static file system information.
  2. <file system> <mount point> <type> <options> <dump> <pass>
  3. montar las particiones de windows
  4. /dev/sda1 /mnt/windows ntfs-3g nouser,defaults,auto,rw,dev,exec,suid 0 0

/dev/sda2 /mnt/datos ntfs-3g nouser,defaults,auto,rw,dev,exec,suid 0 0

los "#" son para poner comentarios, para más información: http://www.ntfs-3g.org/


Receta_103

Título: Usar Openoffice para acceder a una mierda de SQLSERVER

Autor: AngelD (angeld en froga punto net)

Por necesidades he tenido que acceder a una base de datos Microsoft Sqlserver desde Linux, así que me he vuelto un poco loco para lograrlo, contando que mis conocimientos de bases de datos son casi nulos, este es el resultado.

  • Objetivo general:

Acceso a una base de datos Microsoft Sqlserver desde Linux.

  • Versiones y herramientas utilizadas:

Windows 98

Microsoft Sqlserver 2000 (creo)

Ubuntu 8.10 (intrepid ibex)

JDBC 3.0 (libjtds-java)

Open Office 2.4.1

  • El turrón

Teniendo instalados los paquetes de Openoffice Base y libjtds pasamos a añadir el archivo .jar de este último en el CLASSPATH de Openoffice Base. Para ello vamos a las opciones de Openoffice, en el apartado de java, añadimos el "Class Path" '/usr/share/java/jdts.jar'.

Ahora ya podemos abrir la BBDD, Tras darle en Openoffice Base y decir que Queremos una nueva BBDD, y que queremos "Conectar con una base de datos existente", le decimos que esta es 'JDBC' y pasamos a rellenar los datos:

'URL de origen de datos:' jdbc:jtds:sqlserver://(servidor):(puerto)/BBDD
'Clase de controlador JDBC:' net.sourceforge.jtds.jdbc.Driver

Con esto podrás explotar la BBDD desde tu sistema favorito, aunque tengas mis conocimientos de bases de datos. :-)


Receta_104

Título: Cómo actualizar MySQL y Moodle a la versión 1.9 (problemas con unicode)

Autor/a: Pablo Garaizar Sagarminaga (garaizar en eside punto deusto punto es)

Minireceta para evitar problemas con actualizaciones de Moodle a 1.9, versiones viejas de bases de datos MySQL y unicode. Como Moodle necesita que la BD esté en unicode, es bastante probable que si venimos de una versión antigua de Moodle o MySQL tengamos la codificación de caracteres a latin1:

mysql>  SHOW VARIABLES LIKE 'charactersetdatabase';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| charactersetdatabase | latin1 |
+------------------------+--------+

Lo que tenemos que hacer es cambiar ese valor a utf8 y ya está:

mysql> ALTER DATABASE CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)


Receta_105

Título: Cómo recuperar el arranque GRUB (receta alternativa a la receta 54)

Autor/a: Jon Ander Hernández Pradera (hernandez AT movimage DOT com)

  • Debemos averiguar cual es el nombre de dispositivo donde instalamos linux para poder restaurar su arranque, para ello tenemos dos herramientas que nos pueden ayudar :

sudo fdisk -l /dev/{s,h}da

Normalmente será sda o hda si es el primario, sdb o hdb si es el secundario. El que empiece por sd o hd, depende de si el disco duro es ide en cuyo caso comenzará por h, o si es... scsi, sata, usb, etc... en cuyo caso comenzará por sd*.

Otra forma de poder saber los nombres de los ficheros es mediante los enlaces que udev nos ofrece :

ls -l /dev/disk/by-*/

Si queremos modificar el fstab para añadir un nuevo punto de montaje, gracias a udev podemos sacar el uuid de la partición, así que aquí teneis un nuevo truco.

  • Montamos el dispositivo en un directorio :

sudo mount /dev/sda5 /mnt

  • Montamos los directorios especiales de linux (/sys, /dev, /proc) dentro de donde hemos montado nuestro sistema :

sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /dev/ /mnt/dev

  • Entramos en nuestro sistema unix

sudo chroot /mnt /bin/bash

  • Reinstalamos grub :

sudo grub-install /dev/sda

OJO, que instalamos sobre el disco y no sobre una partición, así que no incluyáis ningún digito después del sda ;-)

  • Reiniciamos, o salimos del chroot y desmontamos todo :

exit
sudo umount /mnt/{proc,dev,sys,}


Receta_106

Título: Cómo levantar un proxy socks utilizando un túnel ssh

Autor/a: Jon Ander Ortiz (jonbaine en gmail punto com)

Microreceta para cómo evitar filtros http, proxys y otro tipo de guarradas. Con un acceso a un ordenador mediante SSH podemos abrir un túnel para que nuestro tráfico no sea inspeccionado por terceros (en realidad no es mas que una variante del túnel convencional):

Comando:

ssh -D PUERTO EN LOCAL -fN USER@SISTEMA REMOTO

Con configurar las aplicaciones en local para que utilicen como proxy socks el puerto abierto en local, ya vale para que las peticiones se envían a la máquina remota por el túnel ssl, y desde ahí donde tengan que ir.


Receta_107

Título: Dos tarjetas de sonido. Como configurar dos tarjetas de sonido con "jackd"

Autor: AngelD (angeld en froga punto net)

Por fin has conseguido un programa que soporta dos tarjetas de sonido, idjc, con el que puedes realizar preescucha de las canciones, pero, ¿cómo consigues que estas funcionen?.

  • Configurar tarjetas de sonido

Esto puede parecer obvio, pero necesario para no tener sorpresas desagradables en algún reinicio. En mi caso voy a configurar una "SB Audigy" como tarjeta primaria, y una "CM8738" como secundaria. para ello crearemos el fichero '/etc/modprobe.d/alsa-local' con las líneas

options snd_emu10k1 index=0
options snd_cmipci index=1

  • JACK

JACK es un servidor de sonido muy versátil utilizado por multitud de aplicaciones. Existen dos versiones del mismo, el vetusto "jack 1", el más utilizado, escrito en C y cuyas versiones empiezan por 0.x, y su futuro sustituto, "jack 2", que todavía no tiene todas las opciones de su antecesor pero que se supone supera muchas de sus carencias, escrito en C++ y cuyas versiones empiezan por 1.9.x.

    • Configurar y lanzar el demonio jack

En mi caso esta configuración no difiere entre versiones. Para poder conseguir latencias menores sin recurrir a 'root' hay que elevar los límites del usuario o grupo colocando en '/etc/security/limits.conf'

@audio          -       rtprio          100
@audio          -       nice            -10
@audio          -       memlock         4000000

Lanzamos el demonio 'jackd', con prioridad en tiempo real, y utilizando la tarjeta de sonido primaria:

jackd -R -d alsa -dhw:0

Esto se puede automatizar. Los programas que usan 'jackd' recurren a '~/.jackdrc' o '/etc/jackdrc' si el servidor 'jackd' no está arrancado en el sistema

    • JACK 1

Para utilizar la segunda tarjeta de sonido en con 'jackd' utilizaremos el cliente 'alsa_out'. Este cliente no está disponible en todas las versiones (me suena algo de 0.116 o superiores), utilizando en este caso la versión '0.118+svn3796-1' enpaquetada en Debian Squeeze:

alsa_out -dhw:1

Comprobamos que 'jackd' reconoce las salidas de las dos tarjetas:

$ jack_lsp
system:capture_1
system:capture_2
system:playback_1
system:playback_2
alsaout:playback1
alsaout:playback2

Vemos que poseemos cuatro canales de "playback", dos para 'system' (la tarjeta primaria), y dos para 'alsa_out', la tarjeta secundaria.

    • JACK 2

Para utilizar la segunda tarjeta de sonido en con 'jackd' utilizaremos el cliente 'jack_load'. En este caso hemos utilizado la versión 1.9.4 compilada en una Debian Lenny:

jack_load audioadapter -i "-d hw:1"

Comprobamos que 'jackd' reconoce las salidas de las dos tarjetas:

$ jack_lsp
system:capture_1
system:capture_2
system:playback_1
system:playback_2
audioadapter:capture_1
audioadapter:capture_2
audioadapter:playback_1
audioadapter:playback_2

Vemos que poseemos cuatro canales de "playback", dos para 'system' (la tarjeta primaria), y dos para 'audioadapter', la tarjeta secundaria.


Receta_108

Título: Cambiar de ext3 a ext4

Autor: AngelD (angeld en froga punto net)

Por razones que un no logro explicarme, he migrado todos los sistemas de ficheros de mi sistema de pruebas Debian de ext3 a ext4

  • Componentes utilizados

Debian Squeeze SystemRescueCd Kernel Linux 2.6.30 (ext4 soportado de forma estable desde la versión 2.6.28)

  • Arranque desde SystemRescueCd con Grub2

Si tenemos una unidad de CDROM o una memoria usb donde alojar SystemRescueCd, esto no te va a valer. Si por el contrario tienes una partición con la imagen iso de SystemRescueCd, y utilizas Grub2, esta es tu solución.

Una vez descargada la imagen en una partición conocida, debemos reconfigurar Grub2 para arrancar desde esta. Para ello editaremos o crearemos el fichero /etc/grub.d/40_custom

menuentry "SystemRescueCd iso image" {
   set root=(hd0,5)
   set hd="(hd0,5)"
   set isofile="systemrescuecd-x86-1.3.4.iso"
   loopback loop $hd/$isofile
   linux (loop)/isolinux/rescuecd setkmapuk isoloop$isofile rdinit=/linuxrc2
   initrd (loop)/isolinux/initram.igz

}

Tras esto, actualizamos la lista de imágenes de arranque con update-grub2 o update-grub.

  • Convertir ext3 a ext4. El meollo

Se convierten los sistemas de ficheros a ext4 con lo siguiente:

tune2fs -O extents,uninitbg,dirindex /dev/DEV

Se chequea lo convertido,

e2fsck -fDC0 /dev/DEV

Con esto esperamos unos cuantos "One or more block group descriptor checksums are invalid" que ignoraremos.

  • El arranque

Si hemos convertido la partición raiz de nuestro sistema, este no arrancará. Para solucionarlo necesitamos una versión de Grub2 1.97 o superior. Podemos arrancar añadiendo el parámetro rootfstype=ext4 en el arranque, Para no tener que realizar esta acción en cada arranque, se coloca la linea siguiente en /etc/default/grub.

GRUB_CMDLINE_LINUX="rootfstype=ext4"

No olvidarse de activar estos cambios con update-grub2 o update-grub

  • Hacer que los ficheros soporten extens

Para forzar al sistema para que los ficheros existentes utilicen la opción extens (los que se generen a partir de este momento ya tendrán este atributo), hay que utilizar:

chattr +e FICHERO

Si queremos automatizar esta tarea con todos los ficheros de un directorio:

find /DIR -xdev -type f -print0 | xargs -0 chattr +e
find /DIR -xdev -type d -print0 | xargs -0 chattr +e

Para comprobar que esta operación ha resultado podemos usar:

lsattr FICHERO

y este nos tiene que mostrar que el parámetro e está activado:

-----------------e- FICHERO

En un futuro la utilidad e4defrag realizará estas tareas, pero todavía está en fase de pruebas.

  • Notas

Cuando se realizan este tipo de tareas en un sistema de ficheros hay que ser cauto, y si se tiene aprecio a la información, una copia de seguridad nunca está de más.

Las tareas lanzadas en base al comando find pueden generar múltiples mensajes de error, y una cantidad de mensajes nada despreciable.

No encuentro referencias sobre si los sistemas de ficheros convertidos tienen carencias respecto a los creados directamente.

  • Referencias

http://www.debian-administration.org/articles/643

http://ext4.wiki.kernel.org/index.php/Ext4_Howto

http://wiki.debian.org/Ext4

http://www.sysresccd.org/forums/viewtopic.php?f14&t2808


Receta_109

Título: SUBVERSION + APACHE2 + SSL + INTERFACE WEB (websvn) en UBUNTU

Autor: G-kar (sbarajas en gmail punto com)

Después de pelearme durante una buena temporada para conseguir que todo esto funcione junto en mi PC y sin darse de leches unos con otros, he decidido poner esta receta por que pienso que tal vez a algun@ mas le pueda ser útil.

  • Instalación de los paquetes necesarios

sudo aptitude install apache2 openssl subversion libapache2-svn subversion-tools websvn

  • Fabricamos un certificado "casero"

sudo mkdir /etc/apache2/ssl
sudo RANDFILE=/dev/random openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
sudo chmod 600 /etc/apache2/ssl/apache.pem

  • Creando el repositorio

sudo cd /home/
sudomkdir svn
sudo svnadmin create svn/prueba

  • Damos de alta algunos usuarios:

sudo htpasswd -c -m /home/svn/.dav_svn.passwd user1

La opción -c sólo es necesaria la primera vez que ejecute este comando, a fin de crear el archivo de las contraseñas. Posteriormente ya no se ejecuta

sudo htpasswd -m /home/svn/.dav_svn.passwd user2

Por último otrogamos a la carpeta y a lo que esta contiene los permisos necesarios para que apache acceda a ella

sudo chown www-data:www-data -R svn

  • Configurando apache

Para que el tema nos sea mas sencillo primero vamos a sacar una copia de una plantilla de sitio web de las que vivene por defecto con apache 2

cd /etc/apache2/sites-available/
sudo cp default svn

Una vez hecho esto damos de alta a nuestro nuevo sitio web y damos tambien de alta un modulo de apache necesario

sudo a2ensite svn
sudo a2enmod ssl

A continuacion pasamos a editar nuesta copia de plantilla (svn), la editamos para adaptarla a nuestras necesidades. Recordad que es muy importante sustituir la linea "/home/svn/prueba" por la ruta a vuestro repositorio, "/svn/prueba" por la ruta a teclear despues de "https://nombrehost", y "/home/svn/.dav_svn.passwd" por la ruta a vuestro fichero de autenticaciones.

NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
LoadModule davmodule /usr/lib/apache2/modules/moddav.so
LoadModule davsvnmodule /usr/lib/apache2/modules/moddavsvn.so
LoadModule sslmodule /usr/lib/apache2/modules/modssl.so
. . .
<Location /svn/prueba>
   DAV svn
   SVNPath /home/svn/prueba
   AuthType Basic
   AuthName "My Subversion Repository"
   AuthUserFile /home/svn/.dav_svn.passwd
   Require valid-user
</Location>
</VirtualHost>

Creo que las lineas

LoadModule davmodule /usr/lib/apache2/modules/moddav.so
LoadModule davsvnmodule /usr/lib/apache2/modules/moddavsvn.so
LoadModule sslmodule /usr/lib/apache2/modules/modssl.so

Podrían quitarse y sustituirse por estos comandos de consola:

sudo a2enmod dav
sudo a2enmod dav_svn
sudo a2enmod ssl

Pero no estoy muy seguro :S

  • Interface web

sudo dpkg-reconfigure websvn

Seguimos las instrucciones que aparecen, y simplemente debemos decirle a websvn en dónde están nuestros repositorios subversion

Por ultimo reiniciamos apache

sudo apache2ctl restart

Si todo salió bien poniendo https://localhost/websvn en nuestro navegador web, deberiamos ver nuestros repositorios y sus archivos

  • Nota

Si accedemos a nuestros repositorios vía https://localhost/svn/prueba nos pide nombre de usuario y contraseña. Sin embargo de la forma https://localhost/websvn no. Sería bueno también limitar el acceso al entrar al repositorio de forma "visual". Seguiré investigando, si hay noticias edito. Pero si alguien sabe como hacerlo o experimenta, que por favor también edite