Criando a imagem
De início, no PC, iremos precisar do root para criar a base Debian. Então, no terminal:
su
Ou, para sistemas baseados no
sudo, como o
Ubuntu:
sudo -s
Vamos criar um arquivo de imagem que irá conter o Debian e, posteriormente, será montado no Android.
A vantagem de fazer isso, é que não precisamos reparticionar o SD card, mas em contrapartida, estaremos limitados a 4 GB de espaço, sendo esse o tamanho máximo de arquivos que
FAT32 suporta.
Se precisar de mais espaço, é possível fazer algumas jogadas como criar uma segunda imagem e montá-la em
/usr, por exemplo. Neste artigo, iremos trabalhar com um arquivo de 3 GB.
Criando a imagem e atribuindo um
loop device para ela:
# dd if=/dev/zero of=/tmp/debian.img bs=1024 count=3M
# mknod /dev/loop0 b 7 0
# losetup /dev/loop0 /tmp/debian.img
Hora de formatar e montar a imagem. Vários Androids suportam até
ext4, mas iremos trabalhar com
ext2 por uma razão importante: o
journaling utilizado pelos
ext3/ext4 aumenta significativamente as operações de escrita no sistema de arquivos, e isso reduz o tempo de vida do SD card.
Se isso não for um problema para você, vá de
ext4, por ser mais seguro contra perda de dados - neste caso, um SWAP seria bem-vindo também, existem alguns tutoriais na internet sobre como criar um SWAP file no Android (SD classe 10 recomendado). Aqui estou poupando o SD:
# mkfs -t ext2 /dev/loop0
# mkdir /mnt/debian
# mount -t ext2 /dev/loop0 /mnt/debian
Criação do sistema base via debootstrap
O
debootstrap é uma ferramenta de instalação do Debian, que permite criar uma raiz com os pacotes básicos do sistema dentro de outra distribuição e/ou arquitetura.
A esmagadora maioria dos dispositivos Android trabalha com processadores ARM, portanto, copiar a raiz de um Debian "comum" compilado para PC x86, não irá funcionar. A não ser que você tenha um dispositivo Intel. No geral, precisamos da versão específica ARM.
O debootstrap é um pacote Deb padrão. Se a sua distribuição for o Debian ou similar, a instalação é, como sempre:
# apt-get install debootstrap
Para quem está em outras distribuições, uma solução é instalá-lo manualmente, conforme a documentação menciona.
Nota: se o
Wget não encontrar o pacote, acesse
aqui e veja qual a versão mais recente, precisa ser essa
all.
# mkdir ~/dbs
# cd ~/dbs
# wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.53_all.deb
# ar -x debootstrap_1.0.53_all.deb
# cd /
# zcat ~/dbs/data.tar.gz | tar xv
# rm -rf ~/dbs
Isso poderia ser feito pelo
Alien, que converte pacotes para o padrão da distribuição corrente. Apesar de não ser muito recomendado instalar pacotes Deb em distribuições baseadas no RPM e vice-versa, o debootstrap é apenas uma coleção de scripts e não oferece riscos ao sistema, como quebrar alguma dependência.
A instalação do Debian se baseará em dois estágios:
- No primeiro, será feito o download e a descompressão de programas essenciais.
- No segundo, ele precisa executar algumas ferramentas previamente descompactadas pelo debootstrap e isso deverá ser feito pelo Android, já que o PC não será capaz de executar nativamente os binários ARM.
Um ponto de atenção, é qual arquitetura ARM será utilizada. Para dispositivos com processador ARMv7, podemos usar
armhf, para
ARMv6 devemos usar
armel.
Se não tiver certeza qual arquitetura é seu processador, use
armel, que funciona na v7 também, só não é otimizado para ela. Os dispositivos mais modernos são ARMv7, então
armhf seria o mais recomendado.
Observe o parâmetro
--arch armel e mude, caso deseje:
# debootstrap --variant=minbase --foreign --arch armel wheezy /mnt/debian http://ftp.us.debian.org/debian
Hora de desmontar a imagem:
# umount /mnt/debian
# rmdir /mnt/debian
# exit
Agora crie um diretório
debian na raiz do SD card no Android e copie o
/tmp/debian.img para este local. Apenas por uma questão de praticidade, inicie o SSHDroid, assim podemos continuar trabalhando do Desktop mesmo.
Um ponto importante aqui, são os diretórios em que trabalharemos. No meu Tablet, está assim:
- SD: /storage/sdcard1
- Data (onde os Apps residem): /data
Isso pode mudar no seu dispositivo, então, verifique estes caminhos antes de continuar. Eu tive alguns problemas com o
mount no meu, e estou sempre o executando como
busybox mount, desta forma sempre funciona.
Vamos nos conectar no SSHDroid e executar o segundo estágio do debootstrap. Posteriormente, teremos que montar o
/dev, /dev/pts, /sys e
/proc também.
Usar os parâmetros
noatime e
nodiratime no
mount é interessante, pois além de acelerar o sistema, isso reduz o número de gravações no SD card:
ssh root@ANDROID_IP
# mkdir /data/debian
# busybox mount -o loop,noatime,nodiratime /storage/sdcard1/debian/debian.img /data/debian
# LANG=C.UTF-8 chroot /data/debian debootstrap/debootstrap --second-stage