在 chroot 尝试期间,我收到此错误:“chroot:无法运行命令‘/bin/bash’:可执行格式错误”

在 chroot 尝试期间,我收到此错误:“chroot:无法运行命令‘/bin/bash’:可执行格式错误”

我按照本教程的说明进行操作如何从 Live CD 中清除并重新安装 Grub 2,当我在步骤 1 启动命令时遇到错误

sudo chroot /mnt/temp

错误如下:

chroot: failed to run command `/bin/bash': Exec format error

这是从哪里来的?我该如何通过?

答案1

验证您使用的是正确的 Live CD。例如,验证您使用的不是 32 位 CD,而是 64 位 CD。您需要 64 位内核才能运行 64 位代码,因此请检查您的架构。

假设你安装了 chroot 系统/媒体/sda1,要确定架构,您可以:

ls /media/sda1/*

如果你在输出中看到 lib64,那么它可能是一个 64 位系统

答案2

我在为 armhf arch 制作图像时遇到了同样的问题。我必须安装qemu-user-static然后将其复制到 chroot bin 文件夹。

sudo cp /usr/bin/qemu-arm-static /path/to/mount/usr/bin

你可能得跑

systemctl restart systemd-binfmt.service

然后你就可以 chroot 进入环境了

答案3

该错误意味着你的jail(/mnt/temp)不包含bash shell,或者不包含运行bash shell所需的库。

如果你使用类似下面的方法创建了你的监狱:

debootstrap --variant=buildd --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

你可能想这样做:

debootstrap --variant=minbase --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

但是,作为您的问题的技术答案,请尝试:

cp -r /bin /lib /mnt/temp

这应该允许您成功 chroot,此时您可以做其他事情。

但是这样做有上百万个错误,而且你几乎肯定不想这样做。创建 jail 时使用 minbase,或者在空白目标(例如虚拟机)上安装 ubuntu,然后创建整个系统的 tar 存档,然后将其解压到/mnt/temp

答案4

确实,这是 64 位与 32 位的不兼容。

尽管

cp /bin/bash /mount/temp/tmp

(将 32 位 exec 复制到tmp目录中的新根

chroot /mount/temp /tmp/bash

chroot没问题,但所有命令仍然失败。您必须将它们全部复制过来。

相关内容