Corriendo GNU/Linux Debian en Android


No soy de los que creen que las tablets o celulares van a reemplazar a la computadoras, tampoco soy de los que creen que todo debería migrarse a la internerd, o como se dice en la jerga marketinera de sistemas, la nuve.

Entiendo que hay cosas que son muy comodas tenerlas sincronizadas, pero la realidad es que, no me siento muy comodo fiandoles mis datos a terceros … de hecho … quedo demostrado con el cierre de MegaUpload … muchos perdieron sus datos pensando que el servicio iba a ser eterno … y bué, son esas cosas que el mundo moderno tiende a pensar y lo que nos hace creer Google … en fin … no es algo que debería discutirse en este post, hoy vamos a ver como instalar un Debian en el Motorola Milestone 3 o XT860.

¿Que necesidad intento cubrir?

Bien, si bien tengo notebook, cosa que el problema de llevar poder computacional a todos lados esta resuelto, muchas veces resulta poco comodo andar cargando algo en la espalda o bajo los brazos. De hecho, salvo que sea de absoluta necesidad,  no suelo salir con una maquina a cuestas, sin embargo, muchas veces me encuentro en situaciones donde debería poder al menos usar un GNU/Linux completo, ya sea para mostrar algun turco de linea de comando, para mostrar las bondades del Software Libre o para hacer algo … cualquier cosa … siempre, por H o por B, termino necesitando conectarme a una consola :P

Ojo! … No solamente por esto, obviamente, muchas veces queremos trabajar una idea que se nos acaba de caer mientras hacemos la cola para el cine, en la facu o por que no, mientras estan en el gimnasio (jajajaja … vade reto satanas!). De esta forma podemos tener un cliente Git, poder editar archivos de estándares abiertos y unas cuantas maravillas mas, practivamente no hay limites.

En fin, volviendo al objetivo, de esta forma podemos hacer que nuestro celular, deje de ser un simple celular con esteroides y aires de secretaria sexy y pase a ser la herramienta multiuso del cyberpunk moderno, dejándonos activar la productividad en esos micro espacios de tiempo muerto, donde uno podría tranquilamente desarrollar una idea, escribir un documento, etc.

La simple solución: debootstrap y chroot

Si hay una dupla de comandos que nos salvan la vida y son obligatorios conocerlos o al menos alguna ves haber jugado con ellos, son debootstrap y chroot.

debootstrap es una herramienta para hacer bootstraps de sistemas Debian, basicamente puede ser usado par instalar un Debian en algun lugar sin la necesidad de contar con un disco de instalacion y ademas nos deja correr una distribucion de Debian en un ambiente chroot … maravilloso no? … bien … pero … vamos a clarificar un poco mas las cosas … por que hay muchos conceptos que son necesarios saber.

¿Que es bootstrap?

Existen tres usos para este termino, en principio se lo utilizo para definir al proceso de inicio de una maquina que se ejecuta luego del POST del BIOS, es decir, por ejemplo, GRUB es un programa de bootstrapping. En el contexto del desarrollo de software, bootstrapping se refiere al proceso en el cual se desarrolla un entorno de programacion cada vez mas complejos a partir de otros mas simples. Por ultimo, y este es el termino que nos interesa, bootstrapping se usa como metodo para contruir un sistema completo a partir de componentes base, o bien, de versiones antiguas de componentes precompilados.

¿Que es chroot?

¡Toda la gloria al poderoso chroot! chroot es un programa que basicamente lo que hace es invocar a un proceso y cambiarle el directorio raiz del sistema a el proceso invocado y sus hijos. Si no tienen mucha cancha en lo que a procesos en Linux se refiere, no se hagan problema, tampoco les voy a quemar la cabeza con la definicion de la estructura de datos que define a un proceso en Linux. Lo importante aca es entender que al ejecutar por ejemplo:

chroot /opt/chrootenv /bin/bash

va a ejecutar el programa bash y el directorio raiz (/) dejara de ser el raiz de nuestra maquina y empezara a utilizar como raiz al directorio /opt/chrootenv. Despues lo veremos mas claro cuando estemos instalando Debian en nuestro celular. De todas formas ya he escrito otra de las cosas que podemos hacer con debootstrap y chroot, aunque no he mensionado que por ejemplo podemos usar chroot para arreglar el sector de booteo de una maquina reinstalando el grub, crear jaulas chroot para aislar servicios como FTP, SSH, etc … en fin … eso quedara para otro post, aunque Google esta plagado de soluciones para estos problemas.

¿Que necesitamos?

Como dijo un sabio, hay que medir dos veces y cortar una, asi que vamos a listar todas las cosas que necesitamos antes de ponernos a instalar el Debian, mas que nada para ahorrarnos problemas futuros.

Por el lado de Android:

  • Un Android Rooteado
  • Un emulador de terminal instalado
  • Un cliente de VNC instalado si quieren usar las X
  • BusyBox instalado
  • Verificar que nuestro telefono soporta ext3 o ext2 (recomiendo usar ext3)
  • Una SD con al menos una particion Linux

Por el lado la maquina:

  • Un Debian o derivado
  • gparted instalado
  • debootstrap instalado
  • Android SDK instalado
  • Configurado las reglas de udev para que detecten el celular

Una ves verificado que cumplimos todos los requisitos, podemos ponernos a laburar un poco :D

NOTA: Para rootear el Milestone 3, utilicé el zergRush automated Linux root, mas adelante pretendo utilizar CyanogenMod (CM) como reemplazo a Android, pero hasta que no este completamente soportado por CM todo el hardware del celular no me animo a utilizarlo. Asi que por ahora rootearemos el operativo original del celular.

Recomendaciones: Tengan en cuenta que necesitaran bastante espacio en la SD, como mis necesidades no son muchas, utilice una particion de 2 Gb, con lo cual, les recomiendo limpiar la cache de apt y tratar de mantener el sistema lo mas limpio posible. Claro que con una SD mas grande, este tipo de problemas se soluciona automagicamente :P (NOTA MENTAL: Conseguir una SD de 32Gb).

Bien, sacamos la SD del celular y la metemos en la computadora, Android no automonta las particiones de Linux, aunque si bien es un Linux, no esta programado para hacer eso, asi que solo levanta automaticamente las particiones FAT32 (no formatie ningun FAT16, por lo que supongo que tambien debe de automantar FAT16), abrimos el gparted y seleccionamos nuestro dispositivo, borramos la particion FAT32 que existe y creamos una ext3, si quieren pueden dejar espacio para crear otra particion FAT32 asi el celular puede usar tambien la SD como almacenamiento, ya que la ext3, hasta luego de ser montada, sera completamente ignorada.

En mi caso, ya que estuve haciendo varias pruebas de rendimiento, recomiendo usar etx3, basicamente por que es un poco mas rapida que ext2 y ademas soporta journaling, algo que con ext2 no se puede hacer y es un dolor de cabeza por que los inodos se carajean en cada reinicio del celular.

Una ves creada y montada la particion, comenzamos a hacer el debootstrap, ojo en esta parte, como los dispositivos de almacenamiento externo son montados sin permisos de ejecucion y de devfs, no podremos crear el ambiente bootstrap directamente en la SD, salvo que hagamos lo que mencione en este post. De todas formas no es necesario hacerlo para este caso, ya que haciendo el debootstrap en un directorio de nuestro sistema de archivos local y luego copiandolo a la SD estamos cubiertos. Parados dentro de un directorio temporal ejecutamos la siguiente secuencia de comandos:

sudo debootstrap --arch=armel --verbose --foreign wheezy ./debian_dbt
cd ./debian_dbt
sudo cp -r ./* /media/debian_mm3
sync
sudo umount /media/debian_mm3

Veamos de que va todo esto que ejecutamos, el primer comando es el debootstrap, el cual generara el nuevo ambiente de Debian en el directorio ./debian_dbt, pero con un par de particularidades, normalmente nuestra maquina correra sobre una arquitectura i386 o amd64, pero el celular no corre sobre ninguna de esas arquitecturas, sino que es un procesador de arquitectura ARM, con lo que le decimos a debootstrap que nos genere un ambiente con arquitectura armel (armel es la nomenclatura de arquitectura para los nuevos chips ARM, existe una arquitectura en Debian ademas que se llama arm, pero ya no deberia utilizarse). La cuestion aca, es que no podemos configurar completamente nuestro Debian ARM utilizando nuestra maquina, ya que son arquitecturas diferentes y por lo tanto no correran los procesos de instalacion y configuracion, es por eso que se le pone –foreing, lo cual separa el proceso de bootstrapping en dos niveles, el primero es generar una estructura base, la cual, instalando minimo necesario nos dejara correr el segundo nivel de debootstrap en nuestro celular (cabe destacar que esto sirve para cualquier dispositivo ARM que sea compatible con Linux) el cual terminara de instalar y configurar un Debian basico.

Luego entramos dentro del directorio generado por debootstrap y verificamos que se haya creado una estructura de directorios de Unix (bin, sbin, etc, root, etc … adicionalmente se crea un directorio debootstrap, despues deremos de que va eso) y copiamos todo el contenido del directorio y sus subdirectorios a la particion donde tendremos nuestro Debian y por ultimo, una ves que se completa el proceso de copiado, sincronizamos los dispositivos para que se vacien los buffers y desmontamos.

Ya estamos listos para insertar nuevamente la SD en nuestro celular, si crearon una particion FAT32 veran que se monta automáticamente, pero no asi la paricion donde tenemos nuestro Debian. Todo esto que haremos a continuacion, se puede hacer directamente desde el celular, pero por una cuestion de comodidad, prefiero utilizar el adb del android platform tools, sobre todo por que esto tardara MUCHO tiempo :P pero bueno … como dice el infame dicho, el que quiere celeste que le cueste … o … peor aun … el dicho inmortalizado por F. de la V, … al que le gusta el durazno, que se aguante la peluza :P (WOP!)

Abrimos una terminal en nuestro celular, usando adb ejecutamos

adb shell

una ves dentro, cambiamos a usuario root

su -

montamos el disco y ejecutamos el chroot

busybox mount /dev/block/mmcblk0p1 /data/debian
busybox chroot /data/debian /bin/bash

Ok, ya estmos dentro del debootstrap basico, ya que no tiene ninguna variable de entorno definida, ni /proc, ni /sys, configuramos un poco el shell ejecutando:

export PATH=/bin:/sbin:/usr/bin:/usr:sbin:$PATH
export HOME=/root
export USER=root
export TERM=linux
export DISPLAY=:0.0
mount -t proc proc /proc
mount -t sysfs sysfs /sys

Ahora podemos continuar con el segundo nivel del debootstrap, donde baja y configura todo el Debian basico, ejecutamos el siguiente comando y nos vamos a preparar el mate, por que se va a tomar su tiempo:

/debootstrap/debootstrap --second-stage

Cuando termina y nos devuelte el control ya podemos empezar a utilizar nuestro Debian :D asi que instalaremos el entorno grafico.

Como no podemos tener un display donde asociar el servidor X como en una computadora, utilizaremos el VNC por lo que ejecutaremos apt-get con las siguientes opciones

apt-get install lxde thightvncserver

Bueno … ahora si … para este entonces se les debe de haber lavado el mate o enfriado el agua :P … les recomiendo que dejen el celular cargando la bateria y aprovechen a salir y disfrutar del aire fresco y sin celular :D … por que esto va a tardar como 5 horas … si! una bocha ^_^ (Les recomiendo hacerlo a la noche a si se van a dormir y para cuando se despiertan tienen una pequeñar sorpresita).

Ya estamos en la recta final … levantamos el servidor VNC ejecutando:

vncserver -geometry 960x540

Nos pide una contraseña, la ingresamos y list …. abrimos el cliente VNC de Android (yo uso el AndVNC) conectando a:

  • IP 127.0.0.1
  • Puerto 5901 (puede que cambie, fijense con ps -fea | grep vnc, en que puerto esta escuchando)
  • Usuario: root
  • Password: laqueingresaron

Y listo ya tenemos nuestro Debian con entorno grafico andando … ahora, el unico limite que exite es el infinito y mas alla!

Les dejo una imagen tomada desde el cliente VNC de mi maquina … por que claro … salvo que instalemos el DroidWall, que es una implementación de iptables … según acusan … todos los servicios van a ser visibles por la interface WiFi … así que ojo! ;)

[A medida que los vaya probando, por ahora no pude automatizar todo el proceso de arranque y cierre del Debian, voy a ir subiendo los scripts que vaya haciendo para simplificarme la vida, van a estar todos en el proyecto de GitHUB TCM_Code ... así que son libres de ir forkeando el proyecto! :P]

Espero que lo disfruten.
Saludos!

, , , , , , ,

%d personas les gusta esto: