Ubuntu amb Android

De GiLUG
La revisió el 20:47, 4 nov 2012 per Narcisgarcia (discussió | contribucions) (Primera part)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a: navegació, cerca

Català - Castellano - English


Introducció: Aquesta és una guia per fer funcionar un contenidor de Ubuntu GNU/Linux dins una sessió del sistema operatiu Android, i tenir així la funcionalitat d'un ordinador d'escriptori. És una guia molt detallada, també útil per qui vulgui crear un assistent.

Notes:

Permisos de superusuari (root)

És un requisit tenir accés "su" per administrar el sistema operatiu. Podeu veure la guia Obrir permisos amb Android

Accés per terminal

Terminal local

Sempre és recomanable tenir una aplicació de Terminal disponible per poder fer gestions amb mobilitat, però les preparacions llargues i complexes és més còmode fer-les des d'un ordinador d'escriptori controlant l'aparell connectat per USB.

Control remot

En la distribució Ubuntu GNU/Linux, a partir de la versió 12.10 al repositori universal hi ha disponible el paquet android-tools-adb que permet el control remot a un aparell amb Android en mode de depuració USB.

Per utilitzar el Android Debug Bridge (ADB) heu de tenir l'aparell en marxa, connectat per USB, i amb el mode de «Depuració d'USB» habilitat a les opcions del desenvolupador (developer) d'Android

ADB per USB
  • Per comprovar la connectivitat:
adb devices

(ha de sortir una «llista» amb un identificador estrany que digui que és un dispositiu; device)

  • Per obrir una sessió de terminal a l'aparell:
adb shell
  • Per iniciar una sessió com a superusuari (root), i tenir permisos d'administració d'Android:
su
  • Per finalitzar com a superusuari i també tancar la sessió de terminal:
exit
exit
ADB per xarxa

Moltes connexions per USB són poc estables (es tallen molt sovint i te n'adones que escrius al teu ordinador), i en aquests casos es resol per xarxa (wifi). Quan es fa això és important que l'aparell no tingui connexió directa a internet (per exemple amb l'operador telefònic) i es tracti d'una comunicació pel Wifi local.

  • Des d'Android, per veure els dispositius de xarxa que té activats:
ip route list
  • Des d'Android, per veure l'adreça IP d'un dispositiu de xarxa (per exemple wlan0):
ifconfig wlan0
  • Per establir des de l'ordinador que la comunicació serà via xarxa (per exemple a la IP 192.168.1.122):
adb connect 192.168.1.122
  • Per obrir una sessió de terminal a l'aparell:
adb shell
  • Per iniciar una sessió com a superusuari (root), i tenir permisos d'administració d'Android:
su
  • Per finalitzar com a superusuari i també tancar la sessió de terminal:
exit
exit
Notes addicionals
  • En aquesta guia, on s'indiquen instruccions escrites són per executar en una finestra de terminal local o remot.
  • Si teniu missatges de tipus «Operation not permitted» sol ser perquè no heu iniciat com a superusuari (su)

Anotar l'arquitectura

Es pot mirar quina generació de processador utilitza Android amb la instrucció:

uname -m

Si el processador ARM de l'aparell suporta coma flotant (ARMv7 o superior, per exemple armv7l seria el cas), aleshores es poden utilitzar paquets «armhf» en comptes de «armel». Això millora la velocitat d'alguns processos.

Preparar l'espai

Per a què funcionin els enllaços i accessos a dispositiu cal que el nou contenidor estigui en una partició apropiada per GNU/Linux, com per exemple Ext3 o Ext4. Amb la instrucció mount es pot veure el format de cada volum, i amb aquesta sintaxi es veu molt clar:

mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' '

I es pot filtrar veure només les que ens interessa:

mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' ' | sed -e '/ext.$/!d'

Una vegada vistes les rutes compatibles, cal que valoreu l'espai lliure que hi ha amb aquesta instrucció:

df

Si a l'espai lliure (Free) no s'anota la unitat de mesura (100K, 100M, 100G), vol dir que s'expressa en K (KiB). A tenir en compte també que la ruta /cache funciona «com una paperera interna» el seu contingut pot ser esborrat.

Necessiteu almenys 100MiB per una instal·lació elemental (core sol), però podem arribar a utilitzar 2 o 3GiB si instal·lem totes les grans aplicacions d'escriptori d'ús comú, apart de comptar amb una mica d'espai de treball. Igualment es poden fer instal·lacions «per totes les butxaques».

Per la resta de guia suposarem que heu escollit la partició /data, i aleshores el nou sistema operatiu el poseu a /data/ubuntu. Heu d'habilitar doncs els permisos d'escriptura, execució, dispositius i superusuari a la partició, i crear el subdirectori:

mount -o remount,rw,dev,exec,suid,noatime /data
PuntArrel="/data/ubuntu"
mkdir "$PuntArrel"
cd "$PuntArrel"

Obtenir una base de sistema operatiu

Aquesta seria la manera de construïr-lo des d'un altre ordinador (suposant arquitectura per armhf):

sudo debootstrap --verbose --arch=armhf --foreign precise precise-armhf
  • Per transportar l'arbre de directoris d'un dispositiu a un altre, cal copiar-ho amb permisos de superusuari, per tal que els atributs i propietaris de fitxers i directoris no es perdin pel camí. Per obrir així un explorador de carpetes amb Ubuntu, es pot executar (Alt+F2) «gksudo nautilus».

Però aquí també proposem la manera de fer-ho completament des de l'aparell amb Android: descarregant una base preparada (del web oficial) amb només una d'aquestes instruccions, segons la versió i variant que necessiteu (es publicaran més versions a cdimage.ubuntu.com):

wget http://cdimage.ubuntu.com/ubuntu-core/releases/quantal/release/ubuntu-core-12.10-core-armhf.tar.gz
wget http://cdimage.ubuntu.com/ubuntu-core/releases/precise/release/ubuntu-core-12.04.1-core-armhf.tar.gz
wget http://cdimage.ubuntu.com/ubuntu-core/releases/oneiric/release/ubuntu-core-11.10-core-armel.tar.gz
wget http://cdimage.ubuntu.com/releases/precise/release/ubuntu-12.04-preinstalled-desktop-armhf+ac100.tar.gz
wget http://cdimage.ubuntu.com/releases/oneiric/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.tar.gz

Nota: Les «preinstaled» porten tot el programari d'una instal·lació típica, però també elements que cal netejar per engegar el contenidor.

I ara toca desempaquetar aquell fitxer que hagueu descarregat:

tar -xzf ubuntu-core-12.04.1-core-armhf.tar.gz
rm ubuntu-core-12.04.1-core-armhf.tar.gz

Adaptar la base

Corregiu alguns enllaços dins el directori de la base, per adequar-los més a la situació:

if [ -d /acct ] ; then mkdir -p acct ; fi
cd var
if [ -L run ] ; then rm run ; ln -s ../run run ; fi
if [ -L lock ] ; then rm lock ; ln -s ../run/lock lock ; fi
cd "$PuntArrel"

Netegeu directoris que de vegades venen amb contingut per una instal·lació nadiua:

if [ -d sys ] ; then rm -R sys/* ; fi
if [ -d sys ] ; then rm -R sys/* ; fi

Muntar recursos d'Android

mount -o bind "/proc" "$PuntArrel/proc"
mount -o bind "/dev" "$PuntArrel/dev"
mount -o bind "/dev/pts" "$PuntArrel/dev/pts"
mount -o bind "/sys" "$PuntArrel/sys"
if [ -d /acct ] ; then mount -o bind "/acct" "$PuntArrel/acct" ; fi
if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "/data/amoreos/precise-preinstaled/dev/cpuctl" ; fi

Si voleu fer disponibles les carpetes d'usuari d'Android, cal mirar quines particions hi ha muntades. Es pot fer amb un simple mount o amb aquesta instrucció que simplifica la informació:

mount | sed -e '/ \/mnt\//!d' | sed -e '/^\//!d' | cut -f 2,3 -d ' ' | cut -f 2- -d '/' | cut -f 1 -d ' ' | sed -e 's/^/\//g'

Si per exemple volem muntar /mnt/sdcard fem:

mkdir -p "$PuntArrel/mnt/sdcard"
mount -o bind "/mnt/sdcard" "$PuntArrel/mnt/sdcard"

Entrar al nou sistema i iniciar serveis elementals

chroot "$PuntArrel"
mount -a

Assegurar-se que hi figuri alguna cosa muntada, per a què no fallin algunes utilitats:

if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi

Inicieu el servei DBus del qual en depenen moltes aplicacions (no es pot aprofitar el d'Android):

DbusPid="$(dbus-daemon --system --print-pid --fork)"

Habilitar interfície gràfica

Tot i que ja ha aparegut alguna eina X-Server per utilitzar aplicacions en pantalla directament sense control remot, de moment exposem el mètode tradicional 2011-2012 (suposant que la pantalla té una resolució de 1280x720):

apt-get install xvfb x11vnc xtightvncviewer
if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" else CrOptions="-ncache" fi
MesOpcions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared"
x11vnc $MesOpcions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile "$HOME/.x11vnc.log"

Obrir l'escriptori d'Ubuntu des d'Android

Es pot utilitzar qualsevol programa de control remot per VNC, que es pot trobar fàcilment amb el gestor de paquets F-Droid.

Es connecta a l'adreça localhost i amb el port normal 5900. Sense usuari (nickname) ni tampoc contrasenya (password). Teniu un accés prou segur perquè només admetrà connexions des del mateix aparell.

Sortida

Si voleu tornar a utilitzar Android n'hi ha prou amb tancar el VNC, o símplement minimitzar-lo per fer altres coses. Si atureu l'aparell amb Android no passa res; és com si també aturéssiu l'escriptori d'Ubuntu com si fos un ordinador.

Si voleu aturar el sistema Ubuntu sense aturar ni reiniciar Android

kill $DbusPid
rm -f /var/run/dbus/pid

Per repetir l'experiència

reconnectar icones directes (VNC, chroot+VNC) instruccions actuals