web-dev-qa-db-ja.com

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

それはどこから来たのですか?どうすれば通過できますか?

19
Grand Oxymore

適切なLive CDを使用していることを確認します。たとえば、64ビットCDではなく32ビットCDを使用していないことを確認します。 64ビットコードを実行するには64ビットカーネルが必要なので、アーキテクチャを確認してください。

システムを/ media/sda1にchrootするようにマウントしたと仮定すると、次のことができるアーキテクチャを決定できます。

ls /media/sda1/*

出力にlib64が表示されている場合は、おそらく64ビットシステムです

21
Grand Oxymore

Armhf Archのイメージを作成するときにも同じ問題がありました。 qemu-user-staticをインストールしてから、chroot binフォルダーにコピーする必要がありました。

Sudo cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin
1
Ismail Moukafih

このエラーは、jail(/mnt/temp)にbashシェルが含まれていないか、bashシェルの実行に必要なライブラリが含まれていないことを意味します。

次のようなものを使用してジェイルを作成した場合:

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に解凍します。

1
Doug

実際、これは64ビット、32ビットの非互換性です。

とはいえ

cp /bin/bash /mount/temp/tmp

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

chroot /mount/temp /tmp/bash

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

0
cosine