Ubuntu Linux su Android

Diego Stamigni

Salve cari lettori,

quest’oggi vorrei presentarvi qualche altro smanettamento per allibire la vostra curiosità, e perché no, anche per confermare ancora una volta la potenza di Android rispetto al resto in commercio (qualcuno ha parlato di Melinda ?).

Quello che andrò a spiegare è come far girare, in chroot, un sistema GNU Linux su Android, e in particolare, Ubuntu Linux.

Ciò che faremo non è una cosa nuova, questa possibilità esiste da un bel pò, ma forse non tutti ne sono a conoscenza.

NOTE: Questa non vuole essere una guida a Linux.

Requisiti:

  1. Smartphone Android Based (nel tutorial utilizzerò l’ormai mio famoso Nexus One)
  2. Root access al cellulare
  3. Almeno 2.5gb di spazio libero sulla sdcard
  4. Android Terminal Emulator installato sul nostro dipositivo (cercatelo nel Market)
  5. androidVNC installato sul nostro dipositivo (cercatelo nel Market)
  6. Android SDK installato (Leggere qui per chi non sapesse cosa sia e/o come fare)
  7. Un po di pazienza

I grandi vantaggi di avere una distribuzione sul cellulare quale può essere ?
Nessuna, è puro divertimento; ad ogni modo, un sistema operativo **vero** può sempre far comodo, si può anche sviluppare in C attraverso vim e gcc, giusto per dirne una.

Lo smartphone potrebbe venire danneggiato in qualche modo ?
Assolutamente no, la distribuzione linux si troverà in un’apposita immagine disco (.img) che quando vogliamo verrà caricata in chroot; nel caso volessimo eliminare il tutto, basterà eliminare dalla sdcard la cartella che andremo a creare.

Bene, veniamo a noi. Per prima cosa scarichiamo quest’archivio, poi estraiamolo e copiamolo nella sdcard.

Fatto questo, disattiviamo la modalità Archiviazione USB del nostro cellulare e attiviamo la modalità Debug USB (sempre nel cellulare) andando in Impostazioni -> Applicazioni -> Sviluppo -> abilitiamo Debug USB.

Continuando, andiamo ad aprire una shell con il tool “adb” dell’sdk, che spero abbiate installato e abbiate anche verificato la presenza del device con il comando “adb devices list“; se avete un’output del genere:

$ adb devices list
List of devices attached
HT9CNP811618    device
$

allora è tutto ok, lo smartphone è riconosciuto, altrimenti dovete fixare (se avete windows basta installare il driver del device, con Mac non dovete fare niente, con Linux dovete aggiungere le rules a udev che cambiano da device a device, per cui googlate).

Se finalmente tutto è riconosciuto, apriamo la shell sul dispositivo:

$ adb shell
# su
# cd /sdcard/ubuntu
# sh ./ubuntu.sh

Dunque, abbiamo aperto la shell, abbiamo ottenuto (spero) i diritti di amministratore e abbiamo avviato il root che setterà alcune importanti PATH nel nostro dispositivo e ci preparerà al chroot di Ubuntu.

Fatto ciò, possiamo dunque utilizzare il tool che eseguirà da ora in avanti il chroot per noi:

# bootubuntu
// messaggi vari di output
// ..
root@localhost:/#

Ecco fatto, non è stato difficile no ? Infondo, era tutto pronto.

..

Esperienza mi ha insegnato che a volte possono venir fuori errori del tipo loopX already exists ed errori relativi alla /bin/bash che è possibile risolvere cambiando l’indice del dispositivo di loop presente in /dev.

# cat bootubuntu | sed -e 's/loop1/loop5/' > bootubuntu_new
# mv bootubuntu bootubuntu_old
# mv bootubuntu_new bootubuntu
# sh ./ubuntu.sh
# reboot
.. riavvio del dispositivo
.. appena si riaccende ricreate la shell con "adb shell"
# su
# bootubuntu

Questi semplici passaggi di modifica del /dev/loop dovrebbero fixare l’eventuale problema classico in tal punto.

Vediamo un’esempio delle potenzialità acquisite; scriverò un piccolo programma in C che stamperà Hello AndroidWorld, lo compilerò e lo avvierò direttamente dal cellulare:

root@localhost:~# pwd
/root
root@localhost:~# ls
Desktop    Downloads               Music       Public      Videos
Documents  Firefox_wallpaper.png Pictures    Templates

root@localhost:~# uname -ar
Linux localhost 2.6.37-cyanogenmod+ #1 PREEMPT Sat Jan 8 05:08:53 EST 2011 armv7l GNU/Linux
root@localhost:~# cat > hello.c
#include <stdio.h>
int main() {
printf("Hello AndroidWorld\n!");
return 0;
}

root@localhost:~# gcc hello.c -o hello
root@localhost:~# ./hello
Hello AndroidWorld
root@localhost:~#

Davvero impressionante, non è vero ?

Una volta avviato Ubuntu, cos’altro possiamo fare ?
Per prima cosa, se ci va, installare un’ambiente grafico, tipo LXDE.

root@localhost:/# aptitude update
root@localhost:/# aptitude install lxde tightvncserver -y
root@localhost:/# export USER=root
root@localhost:/# vncserver -geometry 800x480

.. settate la pass quando richiesta e ricordatela

root@localhost:/# cat > /root/.vnc/xstartup

ora scrivete ciò che segue (stiamo configurando VNC per visualizzare X)

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
icewm
&
lxsession

Ora per chiudere il typing date un ^D (Ctrl + D).

Ancora, configuriamo un’ultimo file, il bashrc in modo che avvii a ogni chroot, il server VNC.

root@localhost:/# cat > front

e scrivete quello che segue

export USER=root
cd /
rm -r -f tmp
mkdir tmp
cd /
vncserver -geometry 800x480

Ancora una volta date un ^D (Ctrl + D) e concludiamo con quest’ultimo passaggio:

root@localhost:/# cat front /root/.bashrc
> temp
root@localhost:/# mv temp /root/.bashrc
root@localhost:/# rm -rf temp front

E usciamo dal chroot:

root@localhost:/# exit

Ora non ci resta che, dal nostro cellulare, andare ad aprire androidVNC e configurarlo per la connessione interna:

  1. come Alias mettete quello che volete per ricordavi a cosa vi state connettendo;
  2. in password quella creata precedentemente;
  3. in Indirizzo mettete “localhost”;
  4. Porta “5901” e successivamente;
  5. **finalmente**, diamo Connect e… voilà:

E firefox aperto:

E ora HTOP che ci rammenda lo stato totale della RAM e altre informazioni circa processore e processi attivi:

NOTE: Come si può notare dell’ultima immagine, dalle barre in alto in HTOP, stiamo utilizzando il 23/24% di CPU e solo 215mb di RAM su 400 disponibili..

Concludendo, spero di avervi sbalordito abbastanza così da riuscire a farmi amare ed apprezzare ancora di più Android.. alla prossima cari amici 🙂


Disclaimer (ci vuole, purtroppo): ogni cosa di cui vi ho parlato è stata testata da me in persona ma non mi assumo nessuna responsabilità di eventuali danni da voi creati sui vostri dispositivi
androidworldguidaubuntu