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