Pular para o conteúdo

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.
Rodrigo Morette rmorette
Hits: 40.389 Categoria: Android Subcategoria: Aplicativos
  • Indicar
  • Impressora
  • Denunciar

Parte 4: 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.

   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
Nenhum artigo encontrado.

Aprendendo Inglês em casa usando o Android

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

Devo atender? Um ótimo aplicativo para bloquear Telemarketing

DriveDroid - Transforme o seu Android em um pendrive bootável

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

#1 Comentário enviado por lcavalheiro em 11/10/2013 - 11:58h
Este artigo está do [*****]! 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

Entre na sua conta para comentar.