#  Chroot scripts for Android 4.2/4.4; чтобы не потерять
vit01 (mira, 1) → All  –  08:07:46 2016-07-19

Еле нашёл у себя в файлах. Лучше сохраню сюда, дабы потом не искать заново, если что.

Первый - setup.sh
====
#!/system/bin/sh

runner="/system/bin/chrt"

mount -o remount,rw /
mount -o remount,rw /system

echo "#!/system/bin/sh" > $runner
echo "su -c \"sh /extSdCard/mnt.sh || bash\"" >> $runner

busybox chmod 755 $runner
====


Второй - mnt.sh

====
#!/system/bin/sh

dirname="my-chroot"
bb='busybox'
username="user"

test -d /$dirname

if [ $? -eq 1 ]; then
$bb mount -o remount,rw /
$bb mount -o remount,rw /system
$bb mkdir /$dirname
$bb mount -t ext4 /dev/block/mmcblk1p2 /$dirname # самая главная команда
$bb mount --bind /dev /$dirname/dev
$bb mount -t proc none /$dirname/proc
$bb mount -t sysfs none /$dirname/sys
$bb mount -t devpts none /$dirname/dev/pts

$bb mkdir -p /$dirname/ext # для доступа ко внешней sdcard с чрута
$bb mkdir -p /$dirname/rt # для внутренней

$bb mount --bind /extSdCard /$dirname/ext
$bb mount --bind /storage/sdcard0 /$dirname/rt
fi

cd /$dirname

export LC_ALL=ru_RU.UTF-8
export TERM=xterm-color

$bb chroot . /bin/su - $username -l -s /bin/bash -l

# $bb umount -l {rt,ext} включать по желанию
====


Итак, как этим пользоваться? Всё довольно просто. Сначала следует заменить пути /storage/sdcard0 и /extSdCard на те, которые соответствуют вашим собственным путям для накопителей. А потом подставить нужное имя пользователя. setup.sh просто запустить от рута, а mnt.sh скинуть в корень внешней карты памяти.

Здесь идёт чрут не на loop-образ, созданный dd, а на раздел номер 2 внешней microSD-карты (/dev/block/mmcblk1p2), которая изначально была разделена на VFAT на первом разделе для файлов андроида и на ext4 для GNU/Linux. Можно сделать и loop-образом, но опции тогда сами подбирайте. Да и лично мне этот способ неудобным показался.

Советую подготовить chroot на основе debian, а не arch, потому что арч придётся регулярно обновлять, а на флешке это хорошо не скажется.

Когда сидел на старых версиях андроида, использовал вместе с jackpal Terminal Emulator (есть в F-Droid), в котором в качестве команды запуска шелла указал /system/bin/chrt.

Ещё хочу рассказать о том, что перемонтирование /system и / в rw-режим не будет работать, если засунуть его в init.d. Видимо, это один из защитных механизмов андроида. Так что засунул монтирование в сам скрипт.
Кроме этого можно отметить, что после перезагрузки каталог чрута в корне системы удалится, так что скрипт всегда его пытается сначала создать, а потом делать монтирование.