chroot の試行中に、次のエラーが発生しました: 「chroot: コマンド '/bin/bash' の実行に失敗しました: Exec 形式エラー」

chroot の試行中に、次のエラーが発生しました: 「chroot: コマンド '/bin/bash' の実行に失敗しました: Exec 形式エラー」

私はこのチュートリアルの指示に従っていましたHOWTO: Live CD から Grub 2 を削除して再インストールする、ステップ1でエラーが発生したとき、コマンドを実行した際に

sudo chroot /mnt/temp

エラーは次の通りです:

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

それはどこから来たのですか? どうすれば通り抜けられるのですか?

答え1

適切な Live CD を使用していることを確認します。たとえば、64 ビット CD ではなく 32 ビット 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 シェルが含まれていないか、bash シェルを実行するために必要なライブラリが含まれていないことを意味します。

次のような方法で jail を作成した場合:

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 が正常に実行できるようになり、その時点で他の作業を実行できるようになります。

ただし、これを行うと、約 100 万の間違いがあり、おそらく、これを行うことは望ましくないでしょう。 jail を作成するときに minbase を使用するか、空のターゲット (仮想マシンなど) に ubuntu をインストールして、システム全体の tar アーカイブを作成し、それを に解凍します/mnt/temp

答え4

確かにこれは 64 ビットと 32 ビットの非互換性です。

ただし、

cp /bin/bash /mount/temp/tmp

(32ビットexecをtmpディレクトリの新しいルートにコピーします

chroot /mount/temp /tmp/bash

chroot問題ありませんが、すべてのコマンドは失敗します。すべてをコピーする必要があります。

関連情報