Причина сбоя chroot: tmp-mksh: chroot: не найдено

Введение:

Я отформатировал SDCard в ext4 и скопировал на нее ArchVersion, чтобы запустить ее с Android, как в этом руководстве (шаг 6). Конечно, мое устройство рутировано, и я запускаю следующие сценарии и команды в эмуляторе терминала как суперпользователь.

Информация об устройстве:

  • Телефон: Sony Xperia Z1
  • Номер модели: C6903
  • Версия Android: 5.1.1
  • Номер сборки: 14.6.A.1.236

Проблема:

Когда я выполняю, появляется sh chroot_bashonly.shошибка tmp-mksh: chroot: not found. Конечно, я посмотрел в сценарии, чтобы понять это самостоятельно:

chroot_bashonly.sh:

#!/bin/sh

export LINUXROOT=/data/local/mnt
export TMPDIR=/tmp
export HOME=/root
export USER=root
export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH
export TERM=vt100


sh ./mount.sh

echo "******* Your chroot-environment is starting now ********"
chroot $LINUXROOT /bin/bash # tmp-mksh: chroot: not found
echo "******* You exited the chroot-environment, unmounting... ********"

sh ./umount.sh

echo " ## DONE"

mount.sh:

#!/bin/sh

export LINUXROOT=/data/local/mnt
export TMPDIR=/tmp
export HOME=/root
export USER=root
export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH
export TERM=vt100

# mount /
mkdir $LINUXROOT #works
mount -t ext4 -o noatime,rw /dev/block/mmcblk1p2 $LINUXROOT #works

# mount other stuff
mkdir -p $LINUXROOT/proc 
mkdir -p $LINUXROOT/sys 
mkdir -p $LINUXROOT/dev 
mkdir -p $LINUXROOT/dev/pts 
mkdir -p $LINUXROOT/var/lib/dbus
mkdir -p $LINUXROOT/android_storage/sdcard0
mkdir -p $LINUXROOT/android_storage/sdcard1
mkdir -p $LINUXROOT/system
mount -t proc proc $LINUXROOT/proc
mount -t sysfs sysfs $LINUXROOT/sys
mount -o bind /dev $LINUXROOT/dev 
mount -t devpts devpts $LINUXROOT/dev/pts
mount -o bind /system $LINUXROOT/system
mount -o bind /storage/sdcard0 $LINUXROOT/android_storage/sdcard0
mount -o bind /storage/sdcard1 $LINUXROOT/android_storage/sdcard1

echo "******* everything mounted ********"

Я думаю, что часть mount.sh работает, по крайней мере, я не получаю ошибок и mkdirсуществующих папок. Итак, следующее, что я попытался сделать, это запустить chrootвне сценария во многих формах с той же ошибкой.

  1. chroot /data/local/mnt /bin/bash

  2. chroot /data/local/mnt /system/bin/sh

  3. chroot /data/local/mnt /bin/sh

У всех одна и та же проблема: tmp-mksh: chroot: not found.

Так что же не так?

Доступен ли chroot на Android?

Попробуйте ввести type chrootили whence -v chroot, и сообщите нам результат.
Итак, я попытался type chroot /data/local/mnt /bin/bash. Результат (ошибка): 1. chroot not found, 2. /data/local/mnt not found(но он есть), 3. /bin/bash not found. Я пытался type chroot /data/local/mnt /system/bin/sh. Результат (ошибка): 1. тот же , 2. тот же , 3. /system/bin/sh is /system/bin/sh.... Результаты whence -v chrootэквивалентны.
Прежде всего, сказал я type, с одним-единственным аргументом в пользу этого, который был chroot. Кроме того, вам может потребоваться установить BusyBox , чтобы иметь возможность использовать chroot , поскольку на вашем устройстве его нет.
Спасибо. Я шаг вперед. Теперь type chrootссылается chroot is /system/xbin/chroot. Но теперь я получаю сообщение об ошибке chroot: cant execute '/bin/bash': No such file or directoryили для /system/bin/sh chroot: cant execute '/system/bin/sh': No such file or directory . Хорошо, я проверил файл /system/bin/sh . Как указано в этом посте , он существует
Как и раньше, issue type sh: это сообщит вам расположение бинарного файла оболочки, которым вам нужно будет заменить любой экземпляр /bin/bash .
type shссылается sh is tracked alias for /system/bin/sh, но, как я уже говорил, прежде чем он говоритNo such file or directory
Похоже, мы выходим за рамки вашего вопроса, который касался только chroot .

Ответы (1)

Причина этого сбоя в том, что Android по какой-то причине заблокировал chroot . Как указал продавец масок смерти , можно получить информацию о типе команды, например, type commandNameв этом случае type chroot.

Для устранения tmp-mksh: chroot: not foundошибки требуется только установить BusyBox .

Я установил busyBox, но проблема все еще появляется !!!
@user197885 user197885 Под словом «установлено» вы подразумеваете, что вы установили busyBox из магазина приложений, затем запустили busyBox и установили версию busyBox в /system/xbin?