Когда я запускаю chroot
команду, выдается ошибка:
failed to run command ‘/bin/bash’: No such file or directory
Когда я запускаю chroot
команду, выдается ошибка:
failed to run command ‘/bin/bash’: No such file or directory
Ответы:
Эта ошибка означает, что внутри chroot нет /bin/bash
каталога . Убедитесь, что вы указали, где (или другой оболочкой) исполняемый файл находится в каталоге.bash
chroot
Если у вас есть, /mnt/somedir/usr/bin/bash
то выполнитеchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
или /root/.bash_profile
в вашей chroot
. Можете ли вы временно переименовать эти файлы? Также вы можете убедиться, что bash
исполняемый ( chmod +x /chroot/bin/bash
)?
Я имел /bin/bash
внутри chrooted каталог, но у меня не было / lib и / lib64 внутри него. Сообщение от chroot может быть более наглядным. «нет такого файла или каталога» действительно означает «я не могу запустить это ...».
/bin/bash
зависит, конечно, от libc, ld-linux, libdl и т. д., вы можете использовать, ldd /bin/bash
чтобы увидеть, какие библиотеки ему требуются.
1) Вы можете mount -o bind
эти каталоги в chroot 2) Или вы можете скопировать эти библиотеки в chroot, если вы не доверяете chrooted env, чтобы не повредить их, вот так:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
пытается запустить оболочку, установленную в $SHELL
переменной среды по умолчанию, но ищет ее в новом корневом каталоге, который, похоже, не содержит /bin/bash
, поэтому не может запуститься.
Вы можете указать chroot запустить другую программу внутри нового корня, просто добавив его в качестве параметра:
chroot /your/new/root /bin/foo --options...
Обратите внимание, что путь к команде интерпретируется внутри вашего нового корня, поэтому в этом примере вызываемая программа фактически находится в/your/new/root/bin/foo
Я получал ту же ошибку при попытке ssh к учетной записи chrooted на удаленном сервере. В моем случае я пропустил следующий файл в удаленном каталоге lib64. Сервер Centos6.9
ld-linux-x86-64.so.2
Это было исправлено путем выполнения следующего:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
исправил это для меня, но выполнил исправление, мне нужно было что-то из lib и lib64, и я не удосужился выяснить, что именно. (вероятно, потому что у меня был включен multiarch)
Если вы выполняете кросс-компиляцию, вам нужно использовать симулятор qemu, который может запустить / mnt / somedir / bin / bash, как только вы скопируете qemu-arm-static (я делаю это для armhf) в / mnt / somedir / usr / bin вы сможете делать chroot.
Проверьте это для более подробной информации: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html