Recientemente llego a mis manos un teléfono Nexus 5 que cuenta con hardware bastante interesante (y una bocina que convierte a Manowar en zarabanda locochona) por lo que decidí aprovecharlo e instalarle la mejor distribución Linux del universo, Gentoo Linux.
Para instalar Gentoo en un teléfono con Android, es necesario apoyarse de un proyecto desarrollado durante el GSOC-2013 denominado Gentoo RAP. RAP es una variante de Gentoo prefix que permite utilizar los ejecutables de Gentoo en paralelo a los ejecutables de Android en una ruta diferente a /, con lo que es posible utilizar Gentoo sin todas las limitaciones de un chroot como el que se crea con LinuxOnAndroid y que dicho sea de paso no soporta Gentoo.
La instalación en Android puede realizarse de dos formas, 1) haciendo bootstrap (compilando un stage desde 0 en el dispositivo) o 2) descargando un pre-compilado para ARM-v7 como se indica en la wiki. En mi caso utilicé el segundo método, el cual traduzco/comento en esta guiá.
1) Prerrequisitos
* Asegurarse que tenemos el bootloader liberado y con acceso root (acá dos guiás para obtener root);
* Instalar alguna implementación de busybox (yo recomiendo esta);
* De preferencia utilizar superuser como administrador de root;
* Habilitar el acceso ssh al dispositivo (recomiendo esta aplicación) o instalar en el dispositivo un emulador de terminal (yo recomiendo este).
2) Descomprimiendo el stage
El primer paso es obtener root
1 | $ su |
Luego procedemos a descargar el stage de Gentoo en cualquiera de los mirrors del proyecto, basta con ejecutar el siguiente comando que convenientemente realizó en /data
1 | busybox wget http://gentoo.c3sl.ufpr.br/experimental/prefix/rap/gentoo.tar.bz2 |
Una vez con el stage listo procedemos a descomprimirlo
1 | busybox bzip2 -dc gentoo.tar.bz2 | busybox tar -xf - -C /data |
Este paso deberia crear una carpeta llamada /data/gentoo que es la base de nuestro Gentoo prefix.
3) Hacks previos a usar el prefix
Una vez listo el prefix es necesario que algunos ejecutables clave para compilar sean visibles, especificamente env, sh y pwd, para esto se pueden utilizar los incluidos en el prefix mediante enlaces simbólicos, primero remontamos / con permisos de escritura
1 | /system/bin/mount -o remount,rw / |
Y creamos los enlaces simbólicos
1 2 | mkdir /bin; cd /bin; ln -s /data/gentoo/bin/sh; ln -s /data/gentoo/bin/pwd mkdir -p /usr/bin; cd /usr/bin; ln -s /data/gentoo/usr/bin/env |
Por ultimo también es recomendable crear /tmp ya que algunos ebuilds lo utilizan para compilar.
1 | mkdir /tmp; /system/bin/mount -t tmpfs tmpfs /tmp |
4) Iniciando nuestro prefix
Una vez listo el sistema, procedemos a iniciar nuestro prefix ejecutando el script en /data/gentoo/startprefix, si todo sale bien pues bienvenidos a Gentoo!
5) Usar el prefix como root
A menos que realicemos un chmod sobre /data/gentoo, por defecto la instalación y portage solo podrá ser usada por root. No entanto algunas implementaciones de su para Android como SuperSu, utilizan una shell diferente para los usuarios normales y para root, lo cual podemos verificar mediante la variable de entorno $SHELL.
Si este fuera el caso, lo más probable es que al iniciar el prefix como root el script falle, sin embargo basta con sobreescribir la variable $SHELL para usar la shell por defecto que en el caso de Android es /system/bin/sh
1 | export SHELL=/system/bin/sh |
Y listo, ahora podemos utilizar Gentoo con todo su poder
Es conveniente que antes de cualquier cosa actualicemos portage y agreguemos el overlay de heroxbd el principal desarrollador del port.
1 2 | emerge --sync layman -s heroxbd |
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko/20100101 Firefox/26.0
Vos y para que sirve instalar gentoo en un nexus 5?
Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0
Pues a mi me sirve para tener ejecutables en linea de comandos como htop, vim y otros que al usar el telefono en un monitor externo son de bastante ayuda
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
-jajaja eso esta como de asdflowekmovmwli asi entendi!