Udev en Android

Desde hace algún tiempo, descubrí que era posible instalar una distribución Debian bajo Android, basta con tener acceso a la cuenta de root desde nuestro dispositivo. Aquí hay una guía para hacerlo (en inglés), aunque si su partición de almacenamiento interno (/mnt/sdcard) utiliza el sistema de archivos FAT, tienes que realizar primero una imagen y montarla, como se describe en esta guía.

Lo que describiré a continuación se realizó utilizando una tablet Acer Iconia A500, utilizando el ROM no oficial de CM 10 para la a500, que utiliza Android 4.1.2, aunque puede realizarse en sistemas anteriores siempre y cuando el dispositivo tenga un puerto USB (como la Motorola Xoom). No es una guía paso a paso sobre cómo realizarlo, más bien una introducción a algunas de las cosas que podemos realizar teniendo debian para proveernos de aplicaciones GNU sobre el kernel de Android (que es linux).

La primera vez que lo hice, fue para instalar un módem 3g usb (de los que da telcel con su servicio de banda ancha móvil en México). Esta vez necesitaba montar automáticamente una unidad usb lectora de dvd para ver películas directamente del disco, sin tener que rippear/codificarlas antes. Es posible montar la unidad manualmente y sin necesidad de correr debian, sin embargo Android no provee ningún mecanismo para monitorear los dispositivos que se conectan al dispositivo y realizar alguna acción cuando eso suceda (al menos no de manera sencilla). Es aquí donde udev resulta útil.

Udev es el gestor de dipositivos utilizado en linux 2.6, básicamente permite definir reglas para realizar ciertas acciones cuando un dispositivo se conecta/desconecta del sistema. Una vez que tengamos configurado nuestro sistema debian (que no es más que un jail chroot), podemos ejecutar el servicio udevd y definir nuestras reglas en /etc/udev/rules.d.

Como es necesario que el sistema host Android pueda leer el contenido de la carpeta donde se montó el dispositivo, se debe realizar esta operación desde el sistema host. ¿Cómo hacer entonces para integrar esto con udev, si udev corre bajo un jail chroot que no puede acceder directamente al sistema host? Una solución es utilizando SSH localmente, nuestro sistema Android viene preparado con una versión reciente de OpenSSH (podría utilizarse telnet también). Sólo hace falta configurar el servicio (yo lo configuré para que sólo escuche peticiones locales y utilizando infraestructura de llave pública para la autenticación) y ejecutarlo. Una vez que se esté ejecutando, podemos acceder desde nuestro jail chroot y montar la unidad desde ahí, con un comando como el siguiente:

ssh -p 2222 root@localhost "busybox mount /dev/block/sr0 /mnt/sdcard/dvd"

Con lo anterior, podemos crear una regla udev, que se encargue de montar automáticamente el dispositivo ejecuutando un comando similar al de arriba. Incluso podemos obtener el número del nodo que se está creando, utilizando una regla como la  siguiente:

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="DVDRW SOHW-1693S",
RUN+="ssh -p 2222 'busybox mount /dev/block/sr%n /mnt/sdcard/dvd'", ACTION=="add"

Esto es sólo una prueba de lo que es posible hacer utilizando aplicaciones de usuario GNU en dispositivos Android, hay algunos problemas con esta implementación (por ejemplo, es difícil mantener /dev consistente, debido a que al desconectar la unidad no se ejecuta completamente la acción "remove" de udev y no es posible desmontar limpiamente la unidad), pero abre las posibilidades para automatizar muchas acciones que el sistema Android no realiza ni permite nativamente.

El siguiente experimento a realizar es utilizar una antena WIFI externa con la tablet, y la suite aircrack para hacer wardriving utilizando sólo la iconia a500 (y debian, por supuesto), pero eso será tema de otro artículo. Espero esto sirva para alentarlos a realizar experimentos como éste y poder leer sus comentarios.

Posted by:

Share:

Leave a Reply



(Your email will not be publicly displayed.)