Llevo tiempo sin escribir ningún artículo pero os aseguro que la espera ha valido la pena.
En esta ocasión vamos a instalar nuestra distro preferida en nuestro teléfono móvil, lo haremos mediante la técnica de "chrooting", de este modo conservaremos nuestro Android intacto y solo arrancaremos la Debian cuando lo deseemos.
Bueno dicho lo dicho empezamos:
Tendremos que ganar acceso root en nuestro terminal, este paso es diferente para cada móvil, para el mío(LG Optimus 2X) se puede hacer siguiendo este procedimiento.
Instalaremos un servidor ssh para acceder a nuestro Android de forma remota, el sshdroid funciona muy bien y además podremos encontrarlo de forma gratuita en el market.
Necesitaremos saber el esquema de particiones que tenemos en Android, para ello conectamos por ssh al móvil y empleamos el comando mount, buscamos la línea que corresponde con el punto de montaje /system:
/dev/block/mmcblk0p1 on /system type ext4 (ro,noatime,errors=continue,barrier=1,data=ordered)
El dato que debemos anotar es:
/dev/block/mmcblk0p1Ahora instalamos en la Debian de nuestra computadora un software llamado
debootstrap y generamos el fichero de la Debian del
chroot, este fichero puede tener el tamaño que deseemos, pero en mi caso como quiero poder almacenarlo en la tarjeta
MicroSD(
VFAT) será de 4
Gb(el máximo tamaño en
VFAT):
apt-get install debootstrap
dd if=/dev/zero of=debian.img bs=1024 count=3955078
mke2fs -F debian.img
mkdir debian
mount -o loop debian.img debian/
debootstrap --verbose --arch armel --foreign squeeze debian http://ftp.us.debian.org/debian
umount debian/
rm -r debian/Con esto ya tenemos un fichero llamado
debian.
img con un sistema Debian mínimo, lo copiamos a la tarjeta
MicroSD.
Para poder montar la imagen debemos poder escribir en la partición /
system, por defecto se monta con permisos de solo
eslectura, así que accedemos al móvil por
ssh y ejecutamos:
mount -o remount,rw -t ext4 /dev/block/mmcblk0p1 /systemMontamos la imagen de Debian en /data/local/
debian:
mkdir /data/local/debianmount -t ext2 -o rw,noatime,nodiratime,loop /mnt/sdcard/_ExternalSD/debian.img /data/local/debianVinculamos
proc y
sysfs al entorno
chroot:
mount -t proc /proc /data/local/debian/proc
mount -t sysfs /sysfs /data/local/debian/sysHabilitamos el
enrutado:
sysctl -w net.ipv4.ip_forward=1Definimos
DNS y /etc/
hosts en el
chroot:
echo "nameserver 8.8.8.8" > /data/local/debian/etc/resolv.conf
echo "nameserver 8.8.4.4" >> /data/local/debian/etc/resolv.conf
echo "127.0.0.1 localhost" > /data/local/debian/etc/hostsMontamos las Tarjetas
SD(tanto interna del móvil como la
MicroSD):
mkdir /data/local/debian/mnt/sdcard
mkdir /data/local/debian/mnt/sdcard/_ExternalSDmount --bind /mnt/sdcard/ /data/local/debian/mnt/sdcard
mount --bind /mnt/sdcard/_ExternalSD /data/local/debian/mnt/sdcard/_ExternalSDAccedemos al entorno
chroot:
chroot /data/local/debian /bin/bashTerminamos la instalación e instalamos software interesante:
/debootstrap/debootstrap --second-stage
echo 'deb http://ftp.us.debian.org/debian squeeze main' > /etc/apt/sources.list
apt-get install lxde tightvncserver ettercap-gtk nmap vim netcat
Nos pedirá la configuración de teclado.
apt-get autoclean
apt-get updateSalimos del
chroot:
exitDesmontamos el chiringuito:
umount /data/local/debian/mnt/sdcard/_ExternalSD
umount /data/local/debian/mnt/sdcard
umount /data/local/debianYa está ya tenemos una Debian
chrooteada, así de fácil, cada vez que queramos acceder a ella tendremos que realizar el proceso de montaje de la imagen, vinculación de /
proc /
sysfs,......
Para automatizar esto he escrito un
script que lo hace por nosotros.
cd
/system/xbin/vi
bootdebian.
shclearecho " "
echo " "
echo " "
echo +---------------------------------------+
echo "||||
CyberDyne Systems ||||"
echo +---------------------------------------+
echo " "
echo " "
echo " "
echo "Montando /
system como R/W"
mount -o
remount,
rw -t
ext4 /
dev/
block/
mmcblk0p1 /
systemecho ----------------------------------------
echo "Definiendo variables"
export bin=/
system/
binexport img=/
mnt/
sdcard/_
ExternalSD/
debian.
imgexport mnt=/data/local/
debianexport PATH=$
bin:/
usr/
bin:/
usr/
sbin:/
bin:$
PATHexport TERM=
linuxexport HOME=/
rootif [ ! -d $
mnt ];
thenmkdir $
mntfiecho ----------------------------------------
echo LISTADO VARIABLES:
echo
BIN: $
binecho
IMG: $
imgecho
MNT: $
mntecho
PATH: $
PATHecho
TERM: $
TERMecho
HOME: $
HOMEecho ----------------------------------------
echo ----------------------------------------
echo "Montando la imagen Debian"
echo "
mount -t
ext2 -o
rw,
noatime,
nodiratime,
loop $
img $
mnt"
busybox mount -t
ext2 -o
rw,
noatime,
nodiratime,
loop $
img $
mntecho ----------------------------------------
echo "Vinculando
pts,
proc y
sysfs al entorno
chroot"
busybox mount -t
devpts /
dev/
pts $
mnt/
dev/
ptsbusybox mount -t
proc /
proc $
mnt/
procbusybox mount -t
sysfs /
sysfs $
mnt/
sysecho ----------------------------------------
echo "Habilitando
enrutado"
echo 1 >
/proc/sys/net/ipv4/ip_forward
echo ----------------------------------------
echo "Definiendo
DNS y /etc/
hosts en el
chroot"
echo "
nameserver 8.8.8.8" > $
mnt/etc/
resolv.
confecho "
nameserver 8.8.4.4" >> $
mnt/etc/
resolv.
confecho "127.0.0.1
localhost" > $
mnt/etc/
hostsecho ----------------------------------------
echo "Montando /
mnt/
sdcard en el
chroot"
if [ ! -d $
mnt/
mnt/
sdcard ];
thenmkdir $
mnt/
mnt/
sdcardfibusybox mount --
bind /
mnt/
sdcard/ $
mnt/
mnt/
sdcardecho ----------------------------------------
echo "Montando /
mnt/
sdcard/_
ExternalSD en el
chroot"
if [ ! -d $
mnt/
mnt/
sdcard/_
ExternalSD ];
thenmkdir $
mnt/
mnt/
sdcard/_
ExternalSDfibusybox mount --
bind /
mnt/
sdcard/_
ExternalSD $
mnt/
mnt/
sdcard/_
ExternalSDecho #####################################
echo "
Entering The MATRIX... "
echo " "
chroot $
mnt /
bin/
bashecho " "
echo #####################################
echo "Saliendo
The MATRIX... "
echo " "
echo ----------------------------------------
echo "Desmontando /
mnt/
sdcard/_
ExternalSD en el
chroot"
busybox umount $
mnt/
mnt/
sdcard/_
ExternalSDecho ----------------------------------------
echo "Desmontando /
mnt/
sdcard en el
chroot"
busybox umount $
mnt/
mnt/
sdcardecho ----------------------------------------
echo "
Deshabilitando enrutamiento"
sysctl -w net.ipv4.ip_forward=0
echo ----------------------------------------
echo "
Desvinculando pts,
proc y
sysfs del
chroot"
busybox umount $
mnt/
dev/
ptsbusybox umount $
mnt/
procbusybox umount $
mnt/
sysecho ----------------------------------------
echo "Desmontando imagen Debian"
busybox umount $
mntecho ----------------------------------------
echo "Remontando /
system como solo lectura"
busybox mount -o
remount,ro -t
ext4 /
dev/
block/
mtdblock3 /
systemecho ----------------------------------------
Guardamos y salimos.
Le asignamos el 777 de la muerte:
chmod 777 /system/xbin/bootdebian.shLo ejecutamos:
bootdebian.shCon todo esto tenemos una Debian totalmente operativa, pero vamos a ponerle la guinda al pastel
consiguiendo las X en este sistema, yo
personalmente no he sido capaz de arrancar las X dentro del
chroot, lo que hago es arrancar un servidor
VNC y conectar desde
Android a la Debian del
chroot.
Para arrancar el servidor
VNC dentro del
chroot es necesario definir cierta variable y eliminar ficheros de sesiones
VNC anteriores:
export USER=root
rm /tmp/.X*-lock
rm /tmp/.X11-unix/X*
vncserver -geometry 800x480Pedirá
passwordPara no tener que hacer esto cada vez que queremos arrancar el servicio nos creamos un
mini-
script:
vi
vnc.
sh#!/
bin/
bashexport USER=
rootrm /
tmp/.X*-
lock 2>/
dev/
nullrm /tmp/.X11-unix/X* 2>/
dev/
nullvncserver -
geometry 800x480
chmod +x
vnc.
sh
./vnc.sh
Ahora desde
Android con algún cliente
VNC del estilo
androidVNC ya podremos conectar en local al servidor del
chroot y obtendremos un bonito gestor de ventanas como respuesta ;)
Cuando se salga del
chroot hay que matar
vnc y la sesión
lxde:
vi
kill_
VNC.
sh#!/
bin/
bashPIDS_
VNC=$(
pidof Xtightvnc)
echo -------------------------
echo Matando Procesos
VNCfor i
in $
PIDS_
VNCdo
echo Matando proceso: $i
kill $i
done
PIDS_
LXDE=$(
pidof lxsession)
echo -------------------------
echo Matando Procesos
LXDEfor i
in $
PIDS_
LXDEdo
echo Matando proceso: $i
kill $i
done
echo -------------------------
chmod +x kill_VNC.sh
Ahun así cuando se sale no es capaz de desmontar la imagen de Debian pero si se entra y se sale de nuevo suele funcionar.
Misterios de la vida.....
Bueno esto es todo, espero que le
saqueis provecho a todo esto y recordad que tener Linux instalado en el móvil es como llevar siempre encima un micro
portatil ;)))