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.