Ubuntu Linux su Android
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:
- Smartphone Android Based (nel tutorial utilizzerò l'ormai mio famoso Nexus One)
- Root access al cellulare
- Almeno 2.5gb di spazio libero sulla sdcard
- Android Terminal Emulator installato sul nostro dipositivo (cercatelo nel Market)
- androidVNC installato sul nostro dipositivo (cercatelo nel Market)
- Android SDK installato (Leggere qui per chi non sapesse cosa sia e/o come fare)
- 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:
- come Alias mettete quello che volete per ricordavi a cosa vi state connettendo;
- in password quella creata precedentemente;
- in Indirizzo mettete "localhost";
- Porta "5901" e successivamente;
- **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