Когда я запускаю chroot
команду, выдается ошибка:
failed to run command ‘/bin/bash’: No such file or directory
executable
chroot
USER3254789
источник
источник
Ответы:
Эта ошибка означает, что внутри 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, чтобы не повредить их, вот так:источник
chroot
пытается запустить оболочку, установленную в$SHELL
переменной среды по умолчанию, но ищет ее в новом корневом каталоге, который, похоже, не содержит/bin/bash
, поэтому не может запуститься.Вы можете указать chroot запустить другую программу внутри нового корня, просто добавив его в качестве параметра:
Обратите внимание, что путь к команде интерпретируется внутри вашего нового корня, поэтому в этом примере вызываемая программа фактически находится в
/your/new/root/bin/foo
источник
Я получал ту же ошибку при попытке ssh к учетной записи chrooted на удаленном сервере. В моем случае я пропустил следующий файл в удаленном каталоге lib64. Сервер Centos6.9
Это было исправлено путем выполнения следующего:
источник
cp -r /lib /lib64 /secure/jail
исправил это для меня, но выполнил исправление, мне нужно было что-то из lib и lib64, и я не удосужился выяснить, что именно. (вероятно, потому что у меня был включен multiarch)вам нужно запустить ldd для bash
ldd $(which bash)
, тогда вы можете найти недостающую зависимость, например, если вы не монтировали / не копировали lib64, для 64 систем это произойдет из-за этой ошибки.источник
Если вы выполняете кросс-компиляцию, вам нужно использовать симулятор 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
источник