web-dev-qa-db-ja.com

chroot:コマンド ‘/ bin / bash’の実行に失敗しました:そのようなファイルまたはディレクトリはありません

chrootコマンドを実行すると、エラーが発生します。

failed to run command ‘/bin/bash’: No such file or directory 
59
USER3254789

このエラーは、/bin/bashディレクトリがないことを意味しますchroot内bash(または他のシェル)実行可能ファイルがchrootディレクトリ内のどこにあるかを確認してください。

/mnt/somedir/usr/bin/bashがある場合は、chroot /mnt/somedir /usr/bin/bashを実行します

35
phoops

/bin/bash chrootされたディレクトリ内に、/ libと/ lib64がありませんでした。 chrootからのメッセージは、より説明的になる可能性があります。 「そのようなファイルやディレクトリはありません」とは、「これを実行できない...」という意味です。

/bin/bashもちろんlibc、ld-linux、libdlなどに依存します。ldd /bin/bash必要なライブラリを確認します。

1)mount -o bind chrootの下のこれらのディレクトリ2)または、次のように、chrootされたenvが破損しないことを信頼しない場合は、これらのライブラリをchrootにコピーできます。

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
17
Dalibor Filus

chrootは、デフォルトで$Shell環境変数に設定されているシェルを起動しようとしますが、/bin/bashが含まれていないと思われる新しいルートディレクトリでそれを探します。始められない。

パラメータとして追加するだけで、新しいルート内で別のプログラムを起動するようにchrootに指示できます。

chroot /your/new/root /bin/foo --options...

コマンドのパスが解釈されることに注意してくださいinside新しいルートなので、この例では、呼び出されたプログラムは実際には/your/new/root/bin/fooにあります

4
crater2150

リモートサーバーのchrootされたアカウントにsshしようとすると、同じエラーが発生しました。私の場合、リモートlib64ディレクトリに次のファイルがありませんでした。 サーバーはCentos6.9

ld-linux-x86-64.so.2

以下を実行することで修正されました。

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
2
shawn

クロスコンパイルを行う場合は、/ mnt/somedir/bin/bashを実行できるqemuシミュレーターを使用する必要があります。以下は、armhfクロスコンパイルの手順です。他のアーキテクチャの手順も同様です。

  1. 最初にqemu-user-staticをインストールします

sudo apt-get install qemu-user-static

  1. 次に 'qemu-arm-static'バイナリをchrootディレクトリにコピーします

Sudo cp/usr/bin/qemu-arm-static/mnt/usr/bin /

Qemu-arm-staticを/ mnt/usr/binにコピーすると、chrootを実行できるようになります。

詳細はこちらをご覧ください: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html

1
Jainam MJ

Bash elfは、/bin/usr/bin/などでは使用できません。

cp -rf --preserve=links  /usr/bin/* myroot/usr/bin/; cp --preserve=links  -rf /lib64/*  myroot/lib64/;..

すべてのライブラリとELFをコピーします。

0
Feanix

bdd ldd $(which bash)に対してlddを実行する必要があります。依存関係が見つからない場合があります。たとえば、64システムでlib64をマウントまたはコピーしなかった場合、このエラーが発生します。

0
Error

Lddで見つけたライブラリのコピーを保持することが目的でない場合は、まだ誰も言及していません。 busyboxをビルドするとき、それはLDFLAGS=--staticを尊重します [〜#〜] faq [〜#〜] 。これにより、必要なすべてのライブラリがバイナリにビルドされます。これはバイナリのサイズを増やしますが、とにかくlddで探しているものを保存するには、このディスク領域のほとんどが必要になります。

Cライブラリ(libc.so.6)、コア数学ライブラリ(libm.so.6)、名前空間解決ライブラリ(libresolv.so.2)、およびカーネルライブラリ(私の場合)をコピーする必要があることに注意してください。私はRaspberry Pi、ld-linux-armhf.so.3)を使用しています。静的busyboxバイナリの他の回答で指示されているようにlddツールを使用して、これが当てはまるかどうかを確認できます。

これらは、他のライブラリに依存する場合があります。これが当てはまるかどうかを確認するには、ファイルツールを使用できます。例として、Raspberry Piのlibm.so.6へのフルパスを使用しています。

file /chroot/lib/arm-linux-gnueabihf/libm.so.6

私の場合、ARM=プロセッサには多くのライブラリが必要なので、arm-linux-gnueabihfフォルダ全体をlibフォルダにコピーして、chrootにアクセスできるようにしました。

0
Jessica Pennell