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: 37.745 ]

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


Scripts de carga e shutdown



Eu criei estes scripts para o fake boot e o shutdown do Debian, baseado em alguns que encontrei, existem "n" formas de fazê-lo. A vantagem desses, é que não precisam de parâmetros ou usar múltiplos scripts.

Atente-se ao ponto de montagem do SD e altere conforme necessário. Observe também a última linha do script de fake boot e troque debianuser pelo seu usuário anteriormente criado. Não será pedido uma senha para entrar, já que o comando é executado como root.

Para o shutdown, não podemos apenas fazer umount do Debian, vários processos podem estar em execução e a desmontagem do sistema não será permitida pelo fato do volume estar ocupado.

Então, o script força a finalização de todos os processos que o debian.stop não parou. Sempre que possível, é mais interessante finalizar pelo debian.stop, já que ele é executado dentro do chroot e, em alguns casos, pode possuir o controle adequado contra perda de dados.

Esses scripts nós criaremos no Desktop, eu notei alguns problemas com caracteres especiais codificados em UTF-8, o GT2/Cyanogen usam ISO-8859-1, não estou certo se todos os Androids são assim, então, talvez seja necessário convertê-los para o encoding correto do dispositivo.

Nos scripts anteriores não causava problemas fazer pelo terminal, mas como aqui existe uma variedade maior de caracteres especiais, não funcionou. Também observei que o Android tem alguns problemas com acentos no terminal, então eu os omiti nesses scripts.

Então, crie um arquivo start.txt em seu Home:

vi ~/start.txt

E com o seguinte conteúdo:

#!/system/bin/sh

SDCARD=/storage/sdcard1
DEBIAN=$SDCARD/debian
IMAGE=$DEBIAN/debian.img
MOUNTPOINT=/data/debian
MOUNTED=0

# Forca a execucao como root:
if [ "$(busybox id -u)" != "0" ]; then
  su -c "sh $DEBIAN/start.sh"
  exit
fi

# Verifica se o sistema ja esta montado
for i in `cat /proc/mounts | cut -d' ' -f2`; do
  if [ "$MOUNTPOINT" = "$i" ]; then
    MOUNTED=1
    break
  fi
done

# Este if eh o fake boot do Debian e deve ser executado apenas uma vez
# na sessao.

if [ $MOUNTED -eq 0 ]; then
    echo Montando os sistemas de arquivos
    busybox mount -o remount,dev "$SDCARD"
    busybox mount -o loop,noatime,nodiratime "$IMAGE" "$MOUNTPOINT"
    busybox mount -t proc proc "$MOUNTPOINT/proc/"
    busybox mount -t sysfs sys "$MOUNTPOINT/sys/"
    busybox mount -o bind /dev "$MOUNTPOINT/dev/"
    busybox mount -t devpts pts "$MOUNTPOINT/dev/pts/"
    busybox mount -o bind "$SDCARD" "$MOUNTPOINT/mnt/sdcard"

    # Inicializa os servicos internos (debian.start):
    LANG=C.UTF-8 chroot "$MOUNTPOINT" /bin/su -l -c /etc/debian.start

    # Forca a remocao dos locks do X, esses arquivos sempre ficam por la
    # se o Android for rebootado com ele em execucao:

    rm -f "$MOUNTPOINT/tmp/.X1-lock"
    rm -f "$MOUNTPOINT/tmp/.X11-unix/X1"

    # Garante que esses arquivos sempre estejam intactos, normalmente as distros
    # fazem isso. Mude o DNS do Google caso deseje.

    echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > $MOUNTPOINT/etc/resolv.conf
    echo localhost > $MOUNTPOINT/etc/hostname
fi

echo "Entrando no ambiente Debian"
LANG=C.UTF-8 chroot "$MOUNTPOINT" /bin/su -l debianuser

Agora, o script para o shutdown stop.txt, também em seu Home.

vi ~/stop.txt

#!/system/bin/sh

MOUNTPOINT=/data/debian
SDCARD=/storage/sdcard1
DEBIAN=$SDCARD/debian
MOUNTED=0

# Forca a execucao como root:
if [ "$(busybox id -u)" != "0" ]; then
  su -c "sh $DEBIAN/stop.sh"
  exit
fi

# Verifica se esta montado:
for i in `cat /proc/mounts | cut -d' ' -f2`; do
  if [ "$MOUNTPOINT" = "$i" ]; then
    MOUNTED=1
    break
  fi
done

if [ $MOUNTED -eq 0 ]; then
  echo "O Debian não esta montado"
else
  echo "Desmontando o Debian"
  LANG=C.UTF-8 chroot "$MOUNTPOINT" /bin/su -l -c /etc/debian.stop
  fuser -km /data/debian &> /dev/null
  sleep 2
  busybox umount "$MOUNTPOINT/dev/pts"
  busybox umount "$MOUNTPOINT/dev"
  busybox umount "$MOUNTPOINT/proc"
  busybox umount "$MOUNTPOINT/sys"
  busybox umount "$MOUNTPOINT/mnt/sdcard"
  busybox umount "$MOUNTPOINT"
fi

Após salvar o start.txt e stop.txt, execute os seguintes comandos para converter em ISO-8859-1:

iconv -f UTF-8 -t ISO-8859-1//TRANSLIT ~/start.txt > ~/start.sh
$ iconv -f UTF-8 -t ISO-8859-1//TRANSLIT ~/stop.txt > ~/stop.sh


Finalizando, copie o start.sh e stop.sh para o mesmo diretório debian do SD card, que contém a imagem de disco.

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

Genymotion - Emulando Android no GNU/Linux

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

Transforme seu smartphone em uma webcam no Debian, Ubuntu e derivados com Iriun Webcam

KDE Connect: Integrando o ambiente Android com o desktop Linux

Aprendendo Inglês em casa usando o Android

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts