Compartir tu conexión a Internet a través de la tarjeta wifi

Como íbamos diciendo ayer

Update [2012/12/10]: a raíz de este artículo, se han puesto en contacto desde el servicio TIC de la EHU para tratar de solucionar este problema entre todos los implicados. Mi labor ahora es recoger información: direcciones MAC, configuraciones de los portátiles, zonas de no cobertura o cobertura con problemas, para empezar a indagar y corregir las causas. Tal y como en ocasiones señalo los defectos, ahora me toca anotar las virtudes: me ha gustado que se hayan molestado en responder personalmente a este post. Seguiremos informando 😉 </ update >

El problema, como muchas otras veces, es sencillo: estoy en clase con mis alumnos y necesitamos conectarnos a Internet. «¡Usemos Eduroam!» Muy bien, el problema es que la configuración de esa red, en mi centro, es «muy mejorable». Da igual que uses Windows, Linux o MacOSX. A veces conectas (¡milagro!) para que a los dos minutos, sin razón aparente, pierdas la señal. Y no, no es un problema aislado de Linux. De hecho, ni siquiera es un problema de Eduroam, sino de la configuración de Eduroam en algunos centros de la UPV/EHU. Recientemente estuve en Valencia (SWERC) y no tuve ningún problema con la wifi Eduroam allá configurada. Se conectó a la primera, se mantenía la conexión perfectamente durante toda la sesión y era posible conectar desde cualquier aula.

No, no es que el punto de acceso esté alejado. Me he puesto con el portátil en las manos justo físicamente debajo de varios AP, por si acaso alguno estaba estropeado o saturado, y nanai de la china, sigo sin conectar (o conectando a ráfagas)

En fin, a lo que iba. Como nos ha sido imposible convencer a los técnicos de que es una mala configuración por su parte (y no un fallo de la configuración del usuario), he preferido buscarme (nuevamente) la vida por mi cuenta. La cuestión es que el profesor, en el aula, sí que tiene conexión a Internet a través de cable, pero los alumnos no (tienen que ir por -la mal configurada – wifi Eduroam… u otra pública, llamada EHUGuest, que funciona igual).

La pregunta entonces sería: ¿cómo configuro mi portátil para que la tarjeta wifi haga de punto de acceso, los ordenadores de mis alumnos se conecten vía wifi a mi portátil y éste enrute sus peticiones a través del cable ethernet de mi portátil? Claro, lo ideal es que en cuanto conecten con mi tarjeta wifi mi portátil les asigne dinámicamente una IP y un DNS.

Bien, tras todo este rollo, la solución en una línea:

Open Settings->Network->Wireless and create a new Ad Hoc network

Se creará una red Ad Hoc con tu tarjeta wifi (creará automáticamente una red wifi llamada UbuntuAdHoc) que asignará IPs dinámicamente a los alumnos y los enrutará a Internet a través de la tarjeta ethernet del portátil. Si, a mí también me ha parecido magia 😉

[Vim] e365 failed to print postscript file

Nota rápida por si a alguien más le viene bien. La cuestión es que desde Vim no podía imprimir (desde LibreOffice lo hacía sin problemas). El error que arrojaba Vim era:

e365 failed to print postscript file

La cuestión es que el comando lpr (comando Linux para imprimir que Vim usa internamente) intentaba lanzar el trabajo a la impresora por defecto y ésta no estaba definida. En Ubuntu uso el sistema de impresión CUPS. Según el manual de CUPS, para conocer los nombres de impresoras disponibles podemos usar el comando lpstat:

$ lpstat -p -d

Y una vez conocido el nombre de las impresoras, puedes fijar una por defecto con lpoptions:

$ lpoptions -d hp_LaserJet_1300

¡Listo! Vim (GVim en mi caso) imprime ahora perfectamente 🙂

Acceso a MySQL remoto vía Android y SSH tunneling

Otra receta, esta vez para poder acceder desde nuestro dispositivo Android a una DB MySQL remota protegida por un firewall que impide la conexión directa. Necesitaremos realizar 3 pasos:

1) Instalar Connect Bot (para la parte SSH que explicaré a continuación) y MySQL Connect (de Javier Romero).

2) Generar un túnel SSH que permita conectar el puerto 3306 del dispositivo Android al puerto 3306 de la máquina remota (vía túnel SSH, porque el puerto 3306 remoto, recuerda, está filtrado por el firewall)

Para ello, en Connect Bot mantenemos pulsada la conexión SSH que queremos tunelizar y en el menú contextual elegimos «Editar redirección de puertos». Ahí configuramos una nueva redirección así: (la traducción del primer campo está mal, debería poner ‘nombre del túnel’ o algo similar, no nombre del usuario)

Conectamos ahora normalmente con Connect Bot (como si de una conexión SSH normal se tratara). Internamente estará abriendo el túnel.

3) Abrir una conexión con protocolo MySQL desde el cliente Android (la aplicación que haga esto en principio no sabe que el puerto 3306 local es realmente un extremo del túnel SSH. Para la aplicación Android ese puerto corresponde a una BD MySQL local!) En la imagen adjunta, «tester» es el nombre de usuario MySQL que tengas configurado en la DB remota.

¡Listo! Ya puedes ver y editar tuplas y esquemas de tus tablas cómodamente desde tu tablet Android (desde tu móvil también, pero no tan cómodamente 😉

Visualizando un grafo de dependencias en PHP

Receta rápida para visualizar un grafo de dependencias en PHP, como el que acompaña a este post (pincha sobre la imagen para hacer zoom sobre ella). Se trata del grafo de dependencias PHP de la aplicación Babelium Project, pero piensa que el objetivo es aprender a generar un grafo como éste de cualquier aplicación que te interese.

En concreto, queremos ver gráficamente qué ficheros incluyen a qué otros (con include, require o require_once). Para ello, haremos uso de la extensión «inclued» (sí, al parecer es un juego con las letras de include).

$ sudo pear install inclued-beta

Configuramos a continuación el fichero php.ini para activar la extensión, añadiendo esta línea

extension=inclued.so

y en la parte inferior del mismo fichero, una variable de configuración:

[inclued]
inclued.enabled = On

Ahora reiniciamos Apache para que coja los cambios:

$ sudo /etc/init.d/apache2 restart

Editamos la página inicial (index.php o similar) de la aplicación de la queremos obtener el grafo, y añadimos al final lo siguiente:

// File to store the inclued information
$fp = fopen('/tmp/wp.ser', 'w');
if ($fp) {
    $clue = inclued_get_data();
    if ($clue) {
        fwrite($fp, serialize($clue));
    }
    fclose($fp);
}

Esto generará un fichero /tmp/wp.ser con información serializada de los includes y requires que carga index.php y sus ficheros dependientes (es decir, el análisis se hace de forma recursiva)

Sólo falta un paso: usar graphviz para generar un fichero .dot que luego podremos convertir a .png con la utilidad dot.

# creamos el dot
$ php graphviz.php -i /tmp/wp.ser -o wp.dot
# lo convertimos a png
$ dot -Tpng -o inclued.png wp.dot

JuJu: el domador Ubuntu de servicios en la nube

Tercera ley de Clarke: «Cualquier tecnología lo suficientemente avanzada es indistinguible de la magia». Eso es lo que me pasó por la cabeza la primera vez que ví éste vídeo sobre JuJu:

En 5 minutos y un puñado de comandos, JuJu permite ensamblar, desplegar y escalar un sistema MediaWiki de dos unidades, con la capa de persistencia en un cluster MySQL, dos instancias memcached para acelerar las peticiones y HAProxy como balanceador de carga. Y eso es sólo un ejemplo… Podríamos definir JuJu (antes conocido como Ensemble) como una mezcla entre gestor de paquetes para lanzar aplicaciones en la nube y un sistema de orquestación de servicios (una especie de domador con látigo que pone a cada servicio en su sitio y los junta/ensambla con otros animales/servicios 😉 Este software ha sido desarollado por Canonical bajo licencia AGPL y es un paso más en los movimientos de Canonical por situarse en el territorio cloud.

Para que JuJu funcione, hace uso de «encantamientos» o charms, que son simples recetas en un lenguaje de scripting que permiten instalar, configurar y enlazar servicios. Hay ya una bonita colección de charms disponibles, pero todavía quedan muchos por hacer. Usando estos charms, podemos lanzar un WordPress en la nube con MySQL como Base de Datos, con 4 comandos:

$ juju deploy –repository=. wordpress myblog
$ juju deploy –repository=. mysql mydb
$ juju add-relation mydb:db myblog
$ juju expose wordpress

Bonito, ¿eh? Pues ahora piensa que con el comando add-unit puedes lanzar otra unidad WordPress y comenzar el escalado horizontal a partir de comandos juju, como se muestra en el vídeo 🙂 ¿Magia?

Te recomiendo éste post en castellano con un ejemplo más elaborado del uso de JuJu, o si estás interesado, esta presentación en PDF para que revises el funcionamiento interno de esta tecnología.