Existem vários tutoriais explicando como instalar o
Debian no
Android, mas no geral, estão em inglês ou não demonstram o passo a passo sobre como criar a imagem, ou maiores detalhes sobre o que está sendo feito. Normalmente, pedem para baixar uma imagem pré-configurada.
Outro ponto, é que em muitos está sendo utilizado apenas o root, prática não recomendada. Neste projeto também não há a necessidade de remontar a raiz como RW, tornando-o mais seguro.
Isso não é dual-boot, nem máquina virtual. O que iremos fazer, será instalar o Debian em uma imagem e criar uma gaiola
chroot para ela. No final, teremos um sistema muito parecido com um Debian "real", mas rodando concorrentemente com o Android e utilizando o seu kernel.
Em alguns sistemas Android, isso pode ser um problema, alguns não possuem suporte a
ext2 nativo ou tiveram algumas funções do kernel cortadas. Acredito que este tutorial seja aplicável com poucas ou nenhuma modificação para a maioria dos dispositivos Android 4.
Isso foi feito em um
Galaxy Tab 2 com o
CyanogenMod 10.1 (JB 4.2.2), e dadas as diferenças entre as customizações dos fabricantes nas ROMs "stock", algumas partes deste tutorial, provavelmente, precisem ser revistas para o seu dispositivo, em especial o ponto de montagem do SD card.
Como teremos uso intenso de root, sempre tome muito cuidado com o que está fazendo, especialmente no Android para não "brickar" o aparelho. Analise cada linha de comando deste tutorial e certifique-se que ela é aplicável ao seu dispositivo, embora não seja algo muito complexo, certa experiência com o terminal de comandos e scripts será necessária.
Vamos precisar de:
PC com
GNU/Linux, não precisa ser necessariamente o Debian.
Android com
root/BusyBox, mais os seguintes aplicativos:
- Android Terminal Emulator;
- AndroidVNC;
- SSHDroid;
- Hacker's Keyboard.
Este último não é obrigatório, mas facilita bastante ter um teclado padrão PC, já que os teclados Android normalmente não possuem
Ctrl, Alt, Esc, teclas de função, etc.
Como funciona
Uma explicação rápida sobre o gaiola chroot: a ideia é mudar a raiz para algum outro ponto do sistema de arquivos. Vou usar um exemplo simples para demonstrar o funcionamento (apenas conceitual, isso exige outros detalhes que serão abordados depois). Suponhamos que isso seja feito:
# mkdir /gaiola
# cp -R /* /gaiola
# touch /gaiola/exemplo
Agora temos um clone do nosso sistema de arquivos no diretório
/gaiola. Note que foi criado um arquivo
/gaiola/exemplo, ele servirá para esta demonstração. Agora, se executarmos o comando:
# chroot /gaiola /bin/bash
Aparentemente nada muda, mas se executarmos:
# ls /
Veremos que o arquivo
/gaiola/exemplo agora é
/exemplo, e não temos mais o diretório
gaiola.
Como assim? Simples: a raiz do sistema (para essa seção do bash e qualquer processo filho dela) está usando o diretório
gaiola como a raiz, ignorando a original. Se carregarmos algum servidor, como por exemplo o
SSH, ele ficará confinado nesta gaiola.
Exemplo:
# /etc/init.d/ssh start
# exit
OK, iniciamos o SSH e fechamos o bash que estava no chroot. Mas o SSH continua em execução, e dentro do ambiente chroot. Se remontarmos via SSH na máquina onde isso foi feito, notaremos que ele exibirá o arquivo
/exemplo e não terá o diretório
/gaiola. Agora, observe o seguinte:
# chroot /gaiola /bin/bash
# /etc/inid.d/ssh stop
# exit
Isso irá retornar a nossa gaiola, parar o SSH e sair dela.
Um problema que encontrei nos scripts de
fake boot foi nesse conceito, muitos consideram que só é possível entrar "uma vez" no ambiente, outros declaram uma série de variáveis, como
$PATH, o que não é interessante.
O mais correto, é sempre entrar na gaiola a partir de um
login shell (
bash -l ou
su -l) ao invés de fazer "remendos" no script responsável pela carga do chroot.