Когда я запускаю 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каталога . Убедитесь, что вы указали, где (или другой оболочкой) исполняемый файл находится в каталоге.bashchroot
Если у вас есть, /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