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.143 ]

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


Configuração do sistema



O Debian está instalado, mas ainda precisa ser configurado.

Vamos começar adicionando um usuário para não logar com o root sempre no ambiente. No Android, os grupos são hard coded, ou seja, estão embutidos no código e não temos o /etc/group, qualquer permissão de usuário para dispositivos, deve respeitar os GIDs do Android.

Como usuário comum, por exemplo, o X não funciona se ele não pertencer a um grupo com GID 3003, chamado inet. Relativo ao UID, o Android atribui um a cada aplicativo (app user) e o UID fica na faixa de 10000 até 19999, sendo que os estes tem o nome u0_a0 até u0_a9999, aparentemente isso é atribuído de forma sequencial a cada novo APP instalado.

Eu notei que existem algumas coisas no /proc relativas a usuários comuns. Para evitar qualquer espécie de conflito com o Android, nosso usuário no Debian terá UID 19000 - é um valor que, provavelmente, não será usado pelo sistema e fica na faixa de usuários comuns do Android.

Vamos editar o passwd, shadow e group para deixar o sistema compatível com o Android. É uma boa ideia renomear os arquivos atuais:

# mv /data/debian/etc/group /data/debian/etc/group.old
# mv /data/debian/etc/passwd /data/debian/etc/passwd.old
# mv /data/debian/etc/shadow /data/debian/etc/shadow.old


O Debian já possui grupos audio e nobody, mas seus GIDs são diferentes. Nos arquivos propostos, isso está corrigido e o grupo users também foi mudado para 19000.

Como na instalação base, nenhum arquivo usa esses grupos, então, não há problema em alterar o GID deles. Também não é interessante apagarmos grupos/usuários originais do Debian, pois estes podem ser usados por algum serviço.

Para quem não usa o Vi, é bem simples de adicionar isso: coloque-o em modo de edição (pressione i), selecione o conteúdo do arquivo e clique com o scroll do mouse no terminal, ele irá colar essas linhas.

Depois pressione Esc e digite :wq

Criando o /etc/group:

# vi /data/debian/etc/group

Conteúdo:

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:19000:
libuuid:x:101:
system:x:1000:
radio:x:1001:
bluetooth:x:1002:
graphics:x:1003:
input:x:1004:
audio:x:1005:
camera:x:1006:
log:x:1007:
compass:x:1008:
mount:x:1009:
wifi:x:1010:
adb:x:1011:
install:x:1012:
media:x:1013:
dhcp:x:1014:
sdcard_rw:x:1015:
vpn:x:1016:
keystore:x:1017:
usb:x:1018:
drm:x:1019:
mdnsr:x:1020:
gps:x:1021:
media_rw:x:1023:
mtp:x:1024:
drmrpc:x:1026:
nfc:x:1027:
sdcard_r:x:1028:19000
clat:x:1029:
loop_radio:x:1030:
shell:x:2000:
cache:x:2001:
diag:x:2002:
net_bt_admin:x:3001:
net_bt:x:3002:
inet:x:3003:
net_raw:x:3004:
net_admin:x:3005:
net_bw_stats:x:3006:
net_bw_acct:x:3007:
net_bt_stack:x:3008:
misc:x:9998:
nobody:x:9999:

Acertando os usuários no /etc/passwd:

# vi /data/debian/etc/passwd

Conteúdo:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
system:x:1000:1000:system:/dev/null:/bin/false
radio:x:1001:1001:radio:/dev/null:/bin/false
bluetooth:x:1002:1002:bluetooth:/dev/null:/bin/false
graphics:x:1003:1003:graphics:/dev/null:/bin/false
input:x:1004:1004:input:/dev/null:/bin/false
audio:x:1005:1005:audio:/dev/null:/bin/false
camera:x:1006:1006:camera:/dev/null:/bin/false
log:x:1007:1007:log:/dev/null:/bin/false
compass:x:1008:1008:compass:/dev/null:/bin/false
mount:x:1009:1009:mount:/dev/null:/bin/false
wifi:x:1010:1010:wifi:/dev/null:/bin/false
adb:x:1011:1011:adb:/dev/null:/bin/false
install:x:1012:1012:install:/dev/null:/bin/false
media:x:1013:1013:media:/dev/null:/bin/false
dhcp:x:1014:1014:dhcp:/dev/null:/bin/false
sdcard_rw:x:1015:1015:sdcard_rw:/dev/null:/bin/false
vpn:x:1016:1016:vpn:/dev/null:/bin/false
keystore:x:1017:1017:keystore:/dev/null:/bin/false
usb:x:1018:1018:usb:/dev/null:/bin/false
drm:x:1019:1019:drm:/dev/null:/bin/false
mdnsr:x:1020:1020:mdnsr:/dev/null:/bin/false
gps:x:1021:1021:gps:/dev/null:/bin/false
media_rw:x:1023:1023:media_rw:/dev/null:/bin/false
mtp:x:1024:1024:mtp:/dev/null:/bin/false
drmrpc:x:1026:1026:drmrpc:/dev/null:/bin/false
nfc:x:1027:1027:nfc:/dev/null:/bin/false
sdcard_r:x:1028:1028:sdcard_r:/dev/null:/bin/false
clat:x:1029:1029:clat:/dev/null:/bin/false
loop_radio:x:1030:1030:loop_radio:/dev/null:/bin/false
shell:x:2000:2000:shell:/dev/null:/bin/false
cache:x:2001:2001:cache:/dev/null:/bin/false
diag:x:2002:2002:diag:/dev/null:/bin/false
net_bt_admin:x:3001:3001:net_bt_admin:/dev/null:/bin/false
net_bt:x:3002:3002:net_bt:/dev/null:/bin/false
inet:x:3003:3003:inet:/dev/null:/bin/false
net_raw:x:3004:3004:net_raw:/dev/null:/bin/false
net_admin:x:3005:3005:net_admin:/dev/null:/bin/false
net_bw_stats:x:3006:3006:net_bw_stats:/dev/null:/bin/false
net_bw_acct:x:3007:3007:net_bw_acct:/dev/null:/bin/false
net_bt_stack:x:3008:3008:net_bt_stack:/dev/null:/bin/false
misc:x:9998:9998:misc:/dev/null:/bin/false
nobody:x:9999:9999:nobody:/dev/null:/bin/false

Por fim, o /etc/shadow:

# vi /data/debian/etc/shadow

Conteúdo:

root:*:15882:0:99999:7:::
daemon:*:15882:0:99999:7:::
bin:*:15882:0:99999:7:::
sys:*:15882:0:99999:7:::
sync:*:15882:0:99999:7:::
games:*:15882:0:99999:7:::
man:*:15882:0:99999:7:::
lp:*:15882:0:99999:7:::
mail:*:15882:0:99999:7:::
news:*:15882:0:99999:7:::
uucp:*:15882:0:99999:7:::
proxy:*:15882:0:99999:7:::
www-data:*:15882:0:99999:7:::
backup:*:15882:0:99999:7:::
list:*:15882:0:99999:7:::
irc:*:15882:0:99999:7:::
gnats:*:15882:0:99999:7:::
libuuid:!:15882:0:99999:7:::
system:*:15882:0:99999:7:::
radio:*:15882:0:99999:7:::
bluetooth:*:15882:0:99999:7:::
graphics:*:15882:0:99999:7:::
input:*:15882:0:99999:7:::
audio:*:15882:0:99999:7:::
camera:*:15882:0:99999:7:::
log:*:15882:0:99999:7:::
compass:*:15882:0:99999:7:::
mount:*:15882:0:99999:7:::
wifi:*:15882:0:99999:7:::
adb:*:15882:0:99999:7:::
install:*:15882:0:99999:7:::
media:*:15882:0:99999:7:::
dhcp:*:15882:0:99999:7:::
sdcard_rw:*:15882:0:99999:7:::
vpn:*:15882:0:99999:7:::
keystore:*:15882:0:99999:7:::
usb:*:15882:0:99999:7:::
drm:*:15882:0:99999:7:::
mdnsr:*:15882:0:99999:7:::
gps:*:15882:0:99999:7:::
media_rw:*:15882:0:99999:7:::
mtp:*:15882:0:99999:7:::
drmrpc:*:15882:0:99999:7:::
nfc:*:15882:0:99999:7:::
sdcard_r:*:15882:0:99999:7:::
clat:*:15882:0:99999:7:::
loop_radio:*:15882:0:99999:7:::
shell:*:15882:0:99999:7:::
cache:*:15882:0:99999:7:::
diag:*:15882:0:99999:7:::
net_bt_admin:*:15882:0:99999:7:::
net_bt:*:15882:0:99999:7:::
inet:*:15882:0:99999:7:::
net_raw:*:15882:0:99999:7:::
net_admin:*:15882:0:99999:7:::
net_bw_stats:*:15882:0:99999:7:::
net_bw_acct:*:15882:0:99999:7:::
net_bt_stack:*:15882:0:99999:7:::
misc:*:15882:0:99999:7:::
nobody:*:15882:0:99999:7:::

Agora, vamos ao ambiente do Debian para definir a senha do root e criar o nosso usuário:

# LANG=C.UTF-8 chroot /data/debian /bin/bash -l

Acertando as permissões do shadow, passwd e group:

# chown root.shadow /etc/shadow
# chmod 640 /etc/shadow
# chmod 644 /etc/passwd /etc/group


Atribuindo uma senha para o root:

# passwd

Criando o usuário, substitua o nome debianuser pelo nome que quiser:

# useradd -u 19000 -d /home/debianuser -s /bin/bash -g users -G sdcard_rw,sdcard_r,inet,graphics,input,audio -m debianuser

Definindo uma senha para o novo usuário:

# passwd debianuser

Vamos sair do ambiente chroot para continuar a configuração, esta imagem é tão reduzida que sequer o Vi está disponível:

# exit

Agora, iremos fazer algumas configurações básicas no sistema. Vamos começar criando um ponto de montagem para o SD card, acertar o mtab e o hosts:

# mkdir /data/debian/mnt/sdcard
# ln -sf /proc/self/mounts /data/debian/etc/mtab
# echo 127.0.0.1 localhost > /data/debian/etc/hosts


Adicionando os repositórios do apt-get. Eu estou usando os repos US, mesmo:

# vi /data/debian/etc/apt/sources.list

Conteúdo:

deb http://ftp.us.debian.org/debian stable main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free

Agora, iremos criar dois pequenos scripts para inicializar e finalizar o X, que serão chamados startx e stopx. Nós não teremos acesso ao X diretamente, mas sim via conexão VNC local disponível no display :1.

Para o startx, observe o parâmetro -geometry 1024x550, o meu Tablet possui uma resolução de 1024x600 mas 50 pixels são utilizados pela barra inferior, então, estou os descontando. Se isso não for feito, será necessário ficar rolando a tela, como em um Desktop virtual.

Adapte essa linha ao seu dispositivo:

# vi /data/debian/bin/startx

#!/bin/sh
export XAUTHORITY=~/.Xauthority
vncserver :1 -geometry 1024x550 -dpi 96 -localhost

Agora o stopx, que apenas finaliza o VNC e exclui os locks do X:

# vi /data/debian/bin/stopx

#!/bin/sh
vncserver -kill :1
rm -f /tmp/.X1-lock
rm -f /tmp/.X11-unix/X1

O próximo passo será criar scripts para o startup e shutdown internos do Debian. Esses scripts são auxiliares aos que criaremos posteriormente no SD card. Com eles, será possível inicializar/finalizar algum serviço como SSH, Apache e etc.

No momento que o X for instalado, será interessante carregar o D-Bus, então ele já está incluso nos scripts iniciais. Não execute o startx/stopx por esses arquivos, pois ele serão executados como root no script de carga:

# vi /data/debian/etc/debian.start

#!/bin/sh
if [ -e /etc/inid.d/dbus ]; then
  /etc/inid.d/dbus start
fi

# vi /data/debian/etc/debian.stop

#!/bin/sh
if [ -e /etc/inid.d/dbus ]; then
  /etc/inid.d/dbus stop
fi

Um exemplo de utilização desses arquivos, seria incluir /etc/init.d/ssh start em debian.start, e /etc/init.d/ssh stop em debian.stop para o servidor SSH, por exemplo.

Permissão de execução para os scripts:

# chmod 755 /data/debian/bin/startx /data/debian/bin/stopx
# chmod 744 /data/debian/etc/debian.start /data/debian/etc/debian.stop


Configurado! Vamos desmontar o sistema de arquivos para remontar via script depois, sair do chroot e do SSH.

# umount /data/debian
# exit
# exit


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

Devo atender? Um ótimo aplicativo para bloquear Telemarketing

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

Aprendendo Inglês em casa usando o Android

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

  
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