GNURoot: Instale o Linux no tablet Android sem Root!

Iniciado por Nosferatu Arucard, 25 de Fevereiro de 2014, 12:19

tópico anterior - próximo tópico

Nosferatu Arucard

 :)

Após algumas experiências similares como o KBOX2 ou o Pelya Ubuntu Noroot, por fim a comunidade open-source conseguiu criar um software de virtualização (ao estilo do libfakechroot, ou seja, montar um sistema Linux sobre outro sem necessidade de privilégios de root) capaz de instalar uma distro Linux completa sobre um sistema Android ARM sem precisar de ser desbloqueado (root), o que torna mais acessível e evita problemas de segurança do dispositivo.  :)

O programa em si é uma aplicação Java que habilita o sistema Linux interno do Android a montar e correr (dentro da sua área privilegiada) um sistema Linux completo, excepto o uso de kernels personalizados, drivers, módulos que operam no modo núcleo, embora inclua uma biblioteca de emulação para determinados casos (como o suporte ao Qemu User, que pode ser útil para correr programas x86, como o Wine  ;D). Exceptuando estes casos críticos, qualquer pacote binário pode ser instalado.
O GNURoot utiliza o Terminal Emulator para correr a shell do emulador, e caso necessite de gráficos poderá instalar um X Window Server para poder correr aplicações gráficas e até alguns Desktop Environment (mas atenção, sem root ao Android, a esmagadora maioria das funcionalidades de um DE simplesmente não vão funcionar, pois exigem acesso directo a módulos do kernel, e essa parte não é suportada pelo emulador GNURoot  :().

Resumindo, necessitará de um tablet com vários GB de espaço livre, um processador ARM decente com pelo menos um 1 Gb de RAM, e necessitará de instalar quatro aplicações da Google Play Store:

1. Android Terminal Emulator:
https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=pt_PT
2. GNURoot
https://play.google.com/store/apps/details?id=champion.gnuroot&hl=pt_PT
3. Escolha uma destas quatro distros (são uma imagem debootstrap), mas pode instalar as quatro se quiser  ;D
https://play.google.com/store/apps/details?id=champion.gnuroot.wheezy (Debian Wheezy, primo do Ubuntu)
https://play.google.com/store/apps/details?id=champion.gnuroot.fedora (Fedora Remix)
https://play.google.com/store/apps/details?id=champion.gnuroot.aboriginal (Aboriginal, muito minimalista)
https://play.google.com/store/apps/details?id=champion.gnuroot.gentoo (Gentoo)
4. Um servidor X para Android (é uma biblioteca de compatibilidade sobre o SurfaceFlinger)
https://play.google.com/store/apps/details?id=x.org.server (É o mais completo da loja)

Depois de instalar todos os pacotes da loja, corra o XSDL e configure a resolução e o zoom padrão (este emulador usa o SDL para a emulação do X11), depois disso fica a aguardar uma ligação remota de qualquer sistema Linux na rede.
Agora execute o GNURoot, crie os rootfs (é só clicar em Create e aguardar  :D) para cada um dos distros que instalou.
Para correr a máquina virtual, clique em "Launch as Fake Root" e depois no botão correspondente.
A última opção (Delete Rootfs) apaga a máquina virtual (se fez asneira, pode usar esta funcionalidade).

Quando escolhe para correr, vai aparecer uma janela de doação caso queira contribuir para o projecto GNURoot, mas pode clicar em Cancel para inicializar o Linux.  ;D

Considerando que escolheu o Wheezy, pode agora actualizar a lista de repositórios:
# apt-get update
# apt-get upgrade
(o sistema corre sempre em root virtual)

Se quiser pesquisar o conteúdo do SD card do Android é só escrever o comando:
# cd host-root/sdcard

Para ter um sistema mais ou menos funcional, instale o XFCE4 ou se preferir por um suporte mínimo do X11 basta o Xorg.
# apt-get install xorg
# apt-get install xcfe4
(É aí vai demorar um bom quarto de hora a instalar pacotes!)

Com o XSDL activo, corra o desktop do XCFE4 (cuidado! Pode ter problemas!)
# DISPLAY=127.0.0.1:0.0 startxcfe4
E ao alternar para a aplicação XSDL mostrará (se não teve erros!) o Desktop XCFE do Debian!

No entanto, pode correr qualquer programa X11 sem um DE, desde que substitua o argumento acima pelo nome do programa, o que pode ter maiores chances de sucesso para determinadas máquinas com menos memória, pois um DE activo não funciona correctamente neste emulador (Então Unity é para esquecer...).

Com isso, poderá instalar o LibreOffice completo, QCad, DosBox, Chromium, Okular, GIMP, GCC, Lazarus IDE (é recomendado instalar a última versão da página do projecto, pois os repositórios do Wheezy mostram uma versão obsoleta), ou mesmo o Eclipse com as ferramentas do Android SDK (e pode compilar e executar Apps Android na própria máquina  ;D), e mais uns quantos softwares que chegem a cabeça. A principal limitação é o suporte incompleto ao som e multimédia  ::), pois isso exigiria pacotes específicos que os autores do GNURoot teriam que fornecer.

De qualquer forma, este programa merecia plena publicidade, pois para determinados tablets Android equipados com teclado e grandes ecrãs, este programa habilitaria um Desktop Linux com milhentas ferramentas úteis. Ou mesmo para contrapor o Surface RT, pois neste quesito, era cilindrado. (salvo o suporte para impressão que teria que ser melhorado, embora exista solução para determinados casos)

Turritopsis nutricula

Qual a graça de usar Debian em um tablet? O repositório Stable nem tem o handbrake pra instalar com facilidade. Antes instalar Ubuntu aí.

Nosferatu Arucard

Para quem tenha um ASUS Transformer Infinity que custa tanto como um netbook, instalar Debian ou Fedora libera o uso do tablet a outros níveis.
A respeito do Debian, a versão e´o Debian Wheezy que e´o mais recente. Quando ao handbrake, pode instalar se activar os repositórios ou compilar a partir do código-fonte, mas o principal limite e´o facto de existir duas distros ARM (armel e armhf) e a maioria do software mais avançado prefere o armhf, e o armel (escolhida pelo GNURoot) destina-se mais a equipamentos baratos.

Outro motivo para ter Debian no tablet e´que tera´muito mais software livre que toda a loja do Android, e o facto de terem conseguido implementar um loader sem necessitar de root evita muitos problemas de segurança.

Nosferatu Arucard

Outro dos factores que podem impedir a instalação rápida dos programas favoritos é que o número de programas em pacotes binários para a arquitectura ARM é bem menor que para o x86, e mesmo assim (no caso de Debian Wheezy) não é difícil encontrar nos seus repositórios, algum software já desfasado em relação às versões x86 da mesma distribuição.
E repositórios de terceiros para ARM são quase inexistente, restringindo a apenas alguns casos particulares.
Um exemplo é o Lazarus IDE, que é um front-end do Free Pascal Compiler, do qual vão na versão 1.0.14, e nos repositórios estava a versão 0.9.x  ;D
Ao entrar no site oficial do projecto Lazarus, este continha o pacote binário para ARM (apenas o FPC na sua versão estável 2.6.2), mas o Lazarus teria que ser compilado a partir do código-fonte, pois segundo eles, não é muito comum instalar o Lazarus directamente num computador ARM (e quando compilam, usam o cross-compiling num x86).
Isto significa que teria que compilar muitos mais programas num sistema ARM que num computador x86.

De qualquer forma, isso seria igualmente interessante se a Canonical desenhasse um Ubuntu Light que pudesse ser instalado em tablets Android sem a necessitar de root (existe um que o exige), o que podia ser necessário sacrificar boa parte das tecnologias (Se o Unity não funcionasse, então era improvável existir uma versão oficial), mas era mais provável um Lubuntu ou um Xubuntu comunitário ser lançado para Android, mas com um X11 incorporado e alguns refinamentos.

Nosferatu Arucard

Uma dica importante para quem necessite de usar programas para outras arquitecturas no Debian Wheezy ARM, tomando o meu tablet com o programa Gnuroot como base.  :D

A forma mais simples e rápida para usar um programa binário compilado para x86 numa máquina Debian ARM (por corolário, se temos uma máquina Ubuntu 14.04 x86-64  :D), podemos usar os repositórios da nossa distribuição mas para outra arquitectura usando o comando (em root):
(Activar a arquitectura x86)
# dpkg --add-architecture i386
(Activar a arquitectura ARM com suporte de virgula flutuante)
# dpkg --add-architecture armhf

E depois basta actualizar a base de repositórios:
# apt-get update
# apt-get upgrade

Desta forma, uma máquina ARM poderá usar pacotes binários disponíveis para a arquitectura x86, como por exemplo:
# apt-get install rar:i386

Se o processador suportar nativamente a nova arquitectura, então basta correr o programa e temos o problema resolvido. (Um CPU ARMv7 pode correr sem problemas os programas compilados para armel e armhf, da mesma forma que um CPU x86-64 executa os programas i386 e amd64)

Caso isso não aconteça (basta ver o exemplo trivial do ARM tentar correr um programa x86  ;D), então temos que instalar o suporte de emulação user mode, que nos sistemas Debian/Ubuntu e outras distribuições Linux chama-se Qemu User Mode.
Para isso, basta instalar:
# apt-get install qemu-user

E depois basta invocar o programa com esse emulador:
$ qemu-i386 <programa x86>
$ qemu-arm <programa ARM>
etc...

O Qemu User Mode não é um emulador "completo", ele traduz o programa-objecto para as instruções nativas do CPU da máquina e traduz em particular as API do Kernel Linux do sistema real, e se necessário combina as bibliotecas do sistema Linux base (que são os da arquitectura nativa da máquina), com as bibliotecas da arquitectura emulada, desde que não sejam do modo núcleo, extensões do Kernel, ou drivers.

Em muitos casos, será necessário indicar o caminho do programa para que o emulador execute o programa, assim deverá usar:
$ qemu-i386 /usr/bin/rar
Para este funcionar.

Nosferatu Arucard

Uma pequena actualização: um fork deste projecto foi lançado com o nome de Debian noroot.

https://play.google.com/store/apps/details?id=com.cuntubuntu&hl=pt_PT

Que basicamente integra o XSDL Server do próprio Pelya com o proot do GnuRoot no mesmo programa. Este transfere uma imagem básica do Debian Wheezy para armhf ou x86 (consoante a arquitectura do processador, mas podia meter o qemu para correr as duas variantes  ;D) com o XFCE4 Desktop e depois efectua algumas configurações básicas (com o locale e o /sdcard como área padrão do utilizador, o que torna mais fácil a partilha de dados com outros programas Android).
O que é positivo é que desta vez o ambiente Desktop arranca normalmente, e desta vez o sistema arranca como um utilizador padrão, restando a emulação do root fictício remetido para um ícone próprio do Terminal (xterm). Também é neste fork que o Libre Office 4 corre directamente (basta introduzir no terminal o comando: apt-get -t wheezy-backports libreoffice, para o instalar).
Mas ao contrário do GnuRoot, o Java não funciona por um erro bizarro no ld.so.  :(

Portanto é recomendando manter os dois programas a funcionar, embora isso já significa que o AndrOpenOffice (que juntou um X11 básico à versão 3.4 do OpenOffice) já está a meio caminho de ser removido do tablet por pura redundância.  ;D

Nosferatu Arucard

Já resolvi o problema do java, pois basta editar o ficheiro de configuração do emulador proot.sh, dentro do Linux:
Para isso abre-se este ficheiro com o nano, e acrescenta-se a seguinte linha:
export LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-arm/jre/lib/arm/jli

Salva-se o ficheiro e reinicia-se a aplicação. Depois, disso o Java já funciona perfeitamente! Agora, as extensões em Java do LibreOffice funcionam!  ;D