Debian no Android "from scratch"

Este artigo pretende demonstrar, passo a passo, a instalação do Debian em sistema Android, desde o Debootstrap até a configuração final. Algumas alterações nas linhas de comandos/scripts podem ser necessárias, dependendo do dispositivo.

[ Hits: 35.177 ]

Por: Rodrigo Morette em 11/10/2013 | Blog: http://www.morette.com.br


Criando: Imagem/Sistema base



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:
  1. No primeiro, será feito o download e a descompressão de programas essenciais.
  2. 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 [email protected]_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


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criando: Imagem/Sistema base
   3. Configuração do sistema
   4. Scripts de carga e shutdown
   5. Finalizar a configuração e instalar pacotes básicos
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Conheça o Viva o Android, site coirmão do VOL

Genymotion - Emulando Android no GNU/Linux

Aprendendo Inglês em casa usando o Android

KDE Connect: Integrando o ambiente Android com o desktop Linux

Zello - Transforme seu Android (e GNU/Linux) num Walkie Talkie

  
Comentários
[1] Comentário enviado por lcavalheiro em 11/10/2013 - 11:58h

Este artigo está do caralho! Favoritado com certeza. Pergunta: existe experiência dessa brincadeira em smartphones? Se existe, você pode nos relatar como foi?

[2] Comentário enviado por rmorette em 11/10/2013 - 15:52h

Valeu :-). Eu não cheguei a testar no smartphone, mas já vi alguns relatos de pessoas que fizeram chroot para uma distro neles. Desde que não tenha problemas no Android (como a falta suporte a EXT2), é para funcionar normalmente.

[3] Comentário enviado por oliviofarias em 13/10/2013 - 00:00h

Estou pensando em fazer isso, mas será que funciona em um Galaxy S3?

[4] Comentário enviado por Pylm em 13/10/2013 - 18:14h

Se o kernel instalado (no smart claro) tiver suporte a ext, vai.

[5] Comentário enviado por luisrcs em 15/10/2013 - 19:09h

Muito bom o artigo, parabéns. Mas eu fiz isso no meu tablet Coby com menos trabalho. Bastando instalar e configurar o Debian em um microSD pelo computador e depois montando o mesmo no tablet e executando o chroot.

Consigo rodar qualquer programa em console nele. O que me fez abandonar o projeto foi não conseguir rodar nenhum ambiente gráfico, fiquei frustrado.

E sim. Dá pra fazer o debootstrap armel num computador x86, bastando instalar o qemu e configurar corretamente.

[6] Comentário enviado por rmorette em 16/10/2013 - 22:29h

Boa cara! De fato, uma VM ARM simplifica pacas e acelera o processo de criação da imagem :-)
Valeu pela dica!

[7] Comentário enviado por mfrlinux em 05/11/2013 - 13:53h

Show Rodrigo, total hacker.
Estou montando meu cenário pelo seu passo-a-passo.

[8] Comentário enviado por psctec em 02/01/2014 - 15:41h

Se alguem souber como rootear um S3 Mini para poder usar este tutorial agradeço

[9] Comentário enviado por leoribas35 em 22/12/2014 - 12:17h

aonde abre esse de $ su ? eu to horas tentando instalar o kali no cel e da o erro de loop to ficando loco algume me ajuda

[10] Comentário enviado por purcina em 26/02/2015 - 20:51h

Muito bom o artigo. Só uma dúvida. Quando eu vou executar o comando <code> LANG=C.UTF-8 chroot /data/debian debootstrap/debootstrap --second-stage </code> da o seguinte erro <code>No pkgdetails available; either install perl, or build pkgdetails.c from the base-installer source package</>. Eu sei que isso é causado pelo fato do perl não está instalado. Mas eu devo instalar o perl no android ou na imagem de instalação??

[11] Comentário enviado por marconso em 09/02/2016 - 18:06h

Achei interessante poder colocar uma distro no celular, porém fiquei enrolado na parte da criação da base.... Fiquei confuso em qual momento devo iniciar a utilizar o cartão sd.... Uso um moto g 3 e gostaria de saber se poderia fazer todo o procedimento sem o cartão.
Vlw ta favoritado

[12] Comentário enviado por TimeinLosted em 30/10/2017 - 03:24h


[10] Comentário enviado por purcina em 26/02/2015 - 20:51h

Muito bom o artigo. Só uma dúvida. Quando eu vou executar o comando &lt;code&gt; LANG=C.UTF-8 chroot /data/debian debootstrap/debootstrap --second-stage &lt;/code&gt; da o seguinte erro &lt;code&gt;No pkgdetails available; either install perl, or build pkgdetails.c from the base-installer source package&lt;/&gt;. Eu sei que isso é causado pelo fato do perl não está instalado. Mas eu devo instalar o perl no android ou na imagem de instalação??



O perl está instalado,mas ele não acha.Digite:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

[13] Comentário enviado por Alannah358 em 19/07/2021 - 03:17h


[10] Comment sent by purcina on 02/26/2015 - 20:51h

Very good article. Just a question. When I run the command &lt;code&gt; LANG=C.UTF-8 chroot /data/debian debootstrap/debootstrap --second-stage &lt;/code&gt; it gives the following error &lt;code&gt;No pkgdetails available; https://www.targetpayandbenefits.biz/ either install perl, or build pkgdetails.c from the base-installer source package&lt;/&gt;. I know this is caused by the fact that perl is not installed. But should I install perl on android or on the install image??



"Linux from scratch on ARM" It would show a number of pages for clues. Either cross compile or build embedded or build on system.


Contribuir com comentário