Como instalar Debian en cualquier sistema con Android

Poder instalar una distribución con linux en un cacharrito de mano era algo que ya había hecho en otra ocasión.

En aquel momento lo hice por cacharrear (si, me gasté 250€ para cacharrear, otros se los gastan en alcohol y no se les dice nada) pero ahora es por un tema bastante más práctico.

¿Porqué usar un sistema de escritorio en un móvil o un tablet?

La batería de mi portátil ha muerto y antes de comprarla sin pensar le he dado vueltas al asunto y realmente necesitaría un tablet que en caso de necesidad pudiera usarlo como un PC.

Del PC lo que uso normalmente es leer y escribir usando OpenOffice, usar el correo, usar el trac, el redmine, jugar a algún juego (¡me estoy convirtiendo en un usuario!), desarrollar scripts interpretados (python, perl, bash, ... ), conectarme por ssh a este mismo servidor (no, todavía no soy un usuario) ... aunque sea despacito.

Del tablet me interesa su falta de teclado, su portabilidad, su duración de baterías, oir podcasts o música, control remoto de máquinas más potentes, ... pero eso que lo haga bien.

Es decir, en el fondo necesito un tablet con posibilidad de digievolucionarlo a PC malo conectándole pantalla, teclado y ratón.

Decidiendo que comprar

He tenido que decidir entre comprarme una batería para mi portátil que me vale 155 euros:

O un tablet chino con funda-teclado que me valdrá unos 135€:

Este tiene una salida de vídeo y dos puertos usb.

Los problemas de compatibilidad que NO vamos a tener

Hace años el reto era conseguir que el hardware de los dispositivos funcionara con linux en un PocketPC. Ahora mismo el sistema ya es linux así que de hacer funcionar todo ya se encarga el fabricante.

Nosotros lo que vamos a hacer es utilizar software de alto nivel que hable con el linux que viene de fábrica así que TODO VA A FUNCIONAR. Da igual que el fabricante sea Samsung, HTC o el lucero del alba.

Ni siquiera podemos asegurar eso cuando compramos un PC nuevo.

Descripción de lo que vamos a hacer

Lo que vamos hacer es:

  • Meter la tarjeta en el ordenador
  • Crear una partición de 1G al final de la tarjeta MicroSD
  • Formatearla con ext3
  • Hacer un debootstrap sobre esa partición
  • Poner la tarjeta en el android
  • Montar la partición que hemos creado en algún lugar del sistema de archivos -> necesitas root
  • Hacer un chroot a la partición->necesitas root
  • Terminar la instalación desde el sistema
  • Configurar el sistema recién instalado
  • Instalar un gestor de ventanas y un servidor de vnc
  • Arrancarlo con el ancho y alto de la pantalla de tu dispositivo
  • Instalar un cliente de VNC para Android
  • Conectarnos al puerto 5901 de localhost con el cliente de VNC

Nos ponemos a ello

Todos los pasos que pongo a continuación los he sacado de este blog(caché).

Meter la tarjeta MicroSD en el ordenador y crear una partición de 1G al final

Para ello podemos usar el gparted. Si no lo tienes instalado pues

apt-get install gparted

.

Su funcionamiento es realmente intuitivo así que no me paro mucho: seleccionas la tarjeta SD en el desplegable de arriba a la derecha, reduces la partición FAT que vendrá creada, creas una partición al final con el sistema de archivos ext3 y le das al botón de aplicar.

Hacer un debootstrap de un sistema ARM sobre la partición recién creada

mkdir /media/android-linux
mount /dev/sdc2 /media/android-linux  
apt-get install debootstrap
debootstrap --verbose --arch armel --foreign squeeze /media/android-linux http://ftp.de.debian.org/debian
umount /media/android-linux

Terminar la instalación desde el dispositivo con android

Lo siguiente se hace desde el dispositivo con Android así que o bien ejecutamos todos los comandos en el o nos instalamos el sdk de Android para ejecutarlos desde el teclado.

Para instalar el sdk nos vamos a su página de descarga, nos lo bajamos, arrancamos android-sdk-linux_x86/tools/android y usando el interfaz gráfico nos instalamos el "Android SDK Tools" y el "Android SDK Platform-tools".

Bien usando adb o el teclado con el terminal vamos a terminar la instalación. Si usamos adb tenemos que poner:

elmanytas@yinyan:~$ adb root
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
adbd is already running as root
elmanytas@yinyan:~$ adb remount
remount succeeded
elmanytas@yinyan:~$ adb shell
# bash
localhost / #

Primero ponemos a punto unas cuantas variables de entorno:

export mnt=/system/sd
export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
export SHELL=/bin/bash

A continuación montamos el sistema en /system/sd y terminamos la instalación:

mkdir /system/sd
su -c 'mount /dev/block/vold/179:2 /system/sd'
busybox chroot $mnt /debootstrap/debootstrap --second-stage

NOTA:
El dispositivo donde estás instalando Debian es el mismo que la partición de datos mas uno. Por ejemplo, si entras en tu android y miras donde está montada la primera partición de la tarjeta sd:

elmanytas@yinyan:~$ adb shell
# bash
localhost / # mount | grep sdcard
/dev/block/vold/179:1 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /mnt/sdcard/.android_secure type tmpfs (ro,relatime,size=0k,mode=000)
localhost / #

Verás que lo está en /dev/block/vold/179:1, luego el linux estará en /dev/block/vold/179:2.

Configurar el sistema recién instalado

Primero configuramos el sistema recién instalado:

echo 'deb http://ftp.de.debian.org/debian squeeze main' > ${mnt}/etc/apt/sources.list
echo 'nameserver 8.8.8.8' > ${mnt}/etc/resolv.conf

Creación de scripts de arranque

Necesitamos un primer script de arranque con el que arranquemos una shell de debian y dentro de la shell de debian otro para arrancar las ventanitas.

Script de arranque de Debian

Tienes que crear el script de arranque de debian /system/bin/d y para ello te lo bajas de aquí y lo copias con un adb push d /system/bin/d, adb shell chmod 755 /system/bin/d.

Si quieres también puedes crearlo con el vi en /system/bin/d. Tiene que tener el siguiente contenido:

#!/system/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
export SHELL=/bin/bash
su -c 'mount /dev/block/vold/179:2 /system/sd'
su -c 'mount -t devpts /devpts /system/sd/dev/pts'
su -c 'mount -t proc /proc /system/sd/proc'
su -c 'mount -t sysfs /sysfs /system/sd/sys'
su -c 'rm -f /system/sd/etc/mtab'
su -c 'rm -rf /system/sd/tmp/*'
su -c 'rm -rf /system/sd/tmp/.X*'
su -c 'ln -s /proc/mounts /system/sd/etc/mtab'
su -c 'busybox chroot /system/sd /bin/bash'

Script de arranque de servidor VNC

Entramos en el sistema con un adb shell, te bajas el siguiente script y lo copias en /system/sd/bin/v con un adb push v /system/sd/bin/d, adb shell chmod 755 /system/sd/bin/d.

El script que pondrás en /system/sd/bin/v con el siguiente contenido:

export USER=root
running=`/bin/ps -edaf | /bin/grep Xtightvnc | grep -v grep | /usr/bin/wc -l`
if [ "$running" == "0" ]; then
    /bin/echo "Vncserver not running -> launching"
    vncserver -geometry 480x320
else
    /bin/echo "Vncserver running -> stopping"
    vncserver -kill :1
fi

Donde 480x320 es la resolución de la pantalla de tu sistema. Si es distinta cámbiala.

Este script arranca el servidor de vnc si no está arrancado o lo apaga si ya está encendido.

Instalar servidor de vnc y gestor de ventanas

Como podrás comprobar a continuación, el sistema irá más lento de lo habitual así que recomiendo usar apt-get en vez de aptitude.

Ejecutar:

apt-get update
apt-get install tightvncserver icewm xterm

Instalar y configurar visor de VNC para Android

Tienes que instalar la aplicación android-vnc-viewer cuyo código fuente está disponible aquí.

Arrancas la aplicación y pones los siguientes campos:

Nickname Debian
Password la que hayas puesto
Address localhost
Port 5901
Color Format 24-bit color (4bpp)

Arrancar Debian en modo gráfico

Ya podemos desconectar el cable del ordenador.

Abrimos un terminal para android (código fuente).
Escribimos d para entrar en Debian.
Escribimos v para lanzar el servidor de VNC con el escritorio.
Arrancamos el visor de VNC para Android.

Aplicaciones recomendadas

Si instalas el openoffice probablemente vaya muy lento. En su lugar te recomiendo instalar partes del GnomeOffice como el abiword de procesador de textos:

O el gnumeric como hoja de cálculo:

El álbum de hoy

Uno de los mejores compositores de piano contemporáneos que conozco (caché):

Comentarios

Otro método de instalar

Yo instalé hace poco debian en mi android y para hacerlo usé una aplicación llamada Linux Installer. Si tienes root en el sistema ésta ya se encarga de crear la partición y hacer el debootstrap.

Muy interesante

Un paquete genial, si señor.

Lo que estoy viendo es que en vez de crearte una partición al final te crea un archivo en /data y luego lo utiliza con -o loop.

Lo que no consigo encontrar es el código fuente por ningún sitio y lo de que haya que registrarse para acceder a ciertas funciones me mosquea bastante.

Un gran problema que le veo es que tienes que usar el sistema de archivos ext2 porque raramente tienes el mkfs.ext3 en el móvil. Usar ext2 en el móvil significa que la próxima vez que se te cuelgue se te va a corromper el sistema de archivos.

Eso si, lo de instalar directamente en el móvil en vez de la tarjeta SD me parece una gran idea, o por lo menos meter / ahí y los directorios que más ocupen como /usr en la tarjeta SD para que vaya más ligerito. Lo malo es que mi pobre G1 solo tiene 10M libres en /data.

Ojalá hubiera modo de pausar

Ojalá hubiera modo de pausar /detener el álbumo de hoy. Excelente artículo.

Hola: He seguido esta guía

Hola:

He seguido esta guía (junto a la original) en un teléfono Sony Ericsson Xperia Arc S, con Android 4.0.3.

Quería comentar varios puntos importantes para quien quiera realizar este proceso:

- Para poder instalar GNU/Linux en un teléfono Android con ICS, necesitas:

+ Tener un teléfono rooteado
+ Tener el bootloader desbloqueado
+ Instalar una custom rom con soporte de filesystems extX y que además cambie el default.prop la opción ro.debuggable a valor 1 (si no, adb root, no os funcionará saltando que no se puede utilizar en entornos productivos)

- Dicho esto, la instalación es idéntica, salvo que no podréis montar /dev/block/vold/179:2, tal y como se especifica, pero sí por ejemplo /dev/block/mmcblk0p2 (en mi caso)

El script "d", es incorrecto, ya que los mount point /devpts /proc /sysfs, no existen... estoy aquí ahora. Queda investigarlo en un momento a ver...

Muchas gracias por el tuto y un saludo

Modelos

Hola

¿Qué modelos son los que aparecen en las imágenes (el móvil de pantalla deslizante y el tablet chino)?

Muchas gracias

Modelos

El móvil es un HTC G1. Es el primer modelo de móvil que salió al mercado.

El tablet es un Ainol Novo 8 Advanced.

Trabajas con un Android y yo tengo un Symbian

Hace unos meses se me rompió la pestaña lateral de mi N97 mini, esa pestaña era la que bloqueaba/desbloqueaba el teléfono, con lo que ya no puedo usarlo como teléfono, quisiera y me da igual cargarme el sistema operativo ahora meterle debian, tu que estás en la materia cómo lo podría hacer, muchas gracias.