Superposar directoris sobre Android
Català - Castellano - English
Introducció: Android és un sistema operatiu al qual l'empresa Google li ha retallat molt les eines per administrar Linux com un sistema GNU. Per esmenar la mancança de Chroot podem superposar directoris de sistemes operatius GNU/Linux. Aquesta guia ajuda a fer aquesta «debianització» amb Ubuntu.
Notes:
- Amb aquest procediment, Android ja no troba el contingut esperat en alguns dels directoris (com /etc o /lib), i és normal que no funcioni bé. Per tornar a la situació anterior, cal aturar i tornar a engegar l'aparell.
Contingut
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 (que es pot obtenir lliurement amb F-Droid) 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. També hi ha un repositori independent que proporciona android-tools per anteriors versions.
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 després 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 (default... dev -->):
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 una de les següents instruccions:
uname -m cat /proc/cpuinfo
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. Aquí un exemple de la informació que pot donar (en negreta la informació que ens interessa):
rootfs / rootfs ro,relatime 0 0 tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 none /acct cgroup rw,relatime,cpuacct 0 0 tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0 tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0 none /dev/cpuctl cgroup rw,relatime,cpu 0 0 /dev/block/platform/omap/omap_hsmmc.1/by-name/FACTORYFS /system ext4 ro,relatime,barrier=1,data=ordered 0 0 /dev/block/platform/omap/omap_hsmmc.1/by-name/DATAFS /data ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc,discard 0 0 /dev/block/platform/omap/omap_hsmmc.1/by-name/CACHE /cache ext4 rw,nosuid,nodev,noatime,errors=panic,barrier=1,nomblk_io_submit,data=ordered 0 0 /dev/block/platform/omap/omap_hsmmc.1/by-name/EFS /efs ext4 rw,relatime,barrier=1,data=ordered 0 0 /sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0 /dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
(s'ha destacat cada ruta d'accés per l'usuari i el format de cada partició)
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» i el seu contingut pot ser esborrat.
Necessiteu almenys 100MiB per una instal·lació elemental (core sol), o cap a 250MiB per un debootstrap, però es pot arribar a utilitzar 2 o 3GiB si instal·leu 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 Ubuntu 12.10 per arquitectura amb armhf) en una partició Ext2/Ext3:
sudo debootstrap --verbose --arch=armhf --foreign quantal ubuntu
Alternativa: Podeu descarregar un paquet .tar.gz en un altre ordinador i desempaquetar-lo també amb permisos de superusuari:
- Ubuntu 14.04 per ARMHF (elemental)
- Ubuntu 12.10 per ARMHF (elemental)
- Ubuntu 11.10 per ARMEL (elemental)
- Ubuntu 12.04 per ARMHF (amb escriptori)
- Ubuntu 11.10 per ARMEL (amb escriptori)
(es publicaran més versions a cdimage.ubuntu.com, i altres distribucions tenen equivalents)
Copieu la carpeta sencera:
- A) En una memòria externa de format Ext2/Ext3 per després ficar-la a l'aparell i copiar des d'allà a /data/ubuntu. 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».
- B) Mitjançant adb directament al directori de destinació de l'aparell, i fer crear els directoris buits:
DirAparell="/data/ubuntu" DirDesempaquetat="ubuntu-core-12.10-core-armhf" adb push "$DirDesempaquetat" "$DirAparell" cd "$DirDesempaquetat" Dirs="$(find . -type d)" for Actual in $Dirs ; do if [ "$(ls $Actual)" = "" ] ; then echo "mkdir -p \"$DirAparell/$Actual\"" >> /tmp/mkdirs.tmp ; fi ; done adb push /tmp/mkdirs.tmp "$DirAparell" adb shell su -c $DirAparell/mkdirs.tmp adb shell su -c rm $DirAparell/mkdirs.tmp rm /tmp/mkdirs.tmp cd ..
Adaptar la base
A l'aparell d'Android, corregiu alguns enllaços dins el directori de la base, per adequar-los més a la situació:
su PuntArrel="/data/ubuntu" cd "$PuntArrel" 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 (aquest pas potser no sigui imprescindible):
if [ -d proc ] ; then rm -R proc/* ; fi if [ -d dev ] ; then rm -R dev/* ; fi if [ -d sys ] ; then rm -R sys/* ; fi
Muntar directoris sobre Android
Munteu els directoris d'interès, i obriu una sessió com a usuari d'Ubuntu (root)
mount -o remount,rw / Directoris="bin etc lib sbin usr var" if [ ! -d /tmp ] && [ -d tmp ] ; then Directoris="$Directoris tmp" ; fi if [ -x debootstrap/debootstrap ] ; then Directoris="$Directoris debootstrap" ; fi for Actual in $Directoris ; do mkdir -p "/$Actual" ; mount -o bind "$PuntArrel/$Actual" "/$Actual" ; done /bin/su export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$PATH"
Restabliu el propietari (root) de l'arbre de directoris:
chown -R 0:0 .
Completeu el debootstrap si és el cas, a la mateixa arquitectura:
if [ -x /debootstrap/debootstrap ] ; then /debootstrap/debootstrap --second-stage ; fi
Pedaç per evitar error d'inici de serveis Upstart (per confirmar si és necessari):
dpkg-divert --local --rename --add /sbin/initctl ln -s /bin/true /sbin/initctl
Configureu la xarxa:
echo "nameserver 4.2.2.2" > /etc/resolv.conf echo "nameserver 8.8.8.8" >> /etc/resolv.conf echo "nameserver 8.8.4.4" >> /etc/resolv.conf echo "127.0.0.1 localhost" > /etc/hosts
Comproveu si hi ha repositoris establerts (exemple per Ubuntu 12.10, anomenat «quantal»):
cat /etc/apt/sources.list
(Si no hi havia res, o els «universe» estan deshabilitats amb #, escriviu-los amb les següents instruccions)
echo "deb http://ports.ubuntu.com/ quantal main universe" > /etc/apt/sources.list echo "# deb-src http://ports.ubuntu.com/ quantal main universe" >> /etc/apt/sources.list echo "" >> /etc/apt/sources.list echo "deb http://ports.ubuntu.com/ quantal-updates main universe" >> /etc/apt/sources.list echo "# deb-src http://ports.ubuntu.com/ quantal-updates main universe" >> /etc/apt/sources.list echo "" >> /etc/apt/sources.list echo "deb http://ports.ubuntu.com/ quantal-security main universe" >> /etc/apt/sources.list echo "# deb-src http://ports.ubuntu.com/ quantal-security main universe" >> /etc/apt/sources.list apt-get update
Instal·leu serveis i eines per evitar queixes (els paquets -ca són per la llengua catalana):
- Nota: si apareix algun requadre de pregunta o missatge, es canvia d'opció amb el TABulador i es polsen els botons amb l'espai.
apt-get install dbus wireless-tools mkdir -p /var/run/dbus apt-get install language-pack-ca update-locale LlenguaPredeterminada="ca_ES.UTF-8" export LANG="$LlenguaPredeterminada" export LANGUAGE="$LlenguaPredeterminada" echo "LANG=\"$LlenguaPredeterminada\"" >> /etc/default/locale echo "LANGUAGE=\"$LlenguaPredeterminada\"" >> /etc/default/locale
Inicieu el servei DBus del qual en depenen moltes aplicacions (no es pot aprofitar el d'Android):
DbusPid="$(dbus-daemon --system --print-pid --fork)"