chroot
コマンドを実行すると、エラーが発生します。
failed to run command ‘/bin/bash’: No such file or directory
このエラーは、/bin/bash
ディレクトリがないことを意味しますchroot内。 bash
(または他のシェル)実行可能ファイルがchroot
ディレクトリ内のどこにあるかを確認してください。
/mnt/somedir/usr/bin/bash
がある場合は、chroot /mnt/somedir /usr/bin/bash
を実行します
/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/
chroot
は、デフォルトで$Shell
環境変数に設定されているシェルを起動しようとしますが、/bin/bash
が含まれていないと思われる新しいルートディレクトリでそれを探します。始められない。
パラメータとして追加するだけで、新しいルート内で別のプログラムを起動するようにchrootに指示できます。
chroot /your/new/root /bin/foo --options...
コマンドのパスが解釈されることに注意してくださいinside新しいルートなので、この例では、呼び出されたプログラムは実際には/your/new/root/bin/foo
にあります
リモートサーバーのchrootされたアカウントにsshしようとすると、同じエラーが発生しました。私の場合、リモートlib64ディレクトリに次のファイルがありませんでした。 サーバーはCentos6.9
ld-linux-x86-64.so.2
以下を実行することで修正されました。
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
クロスコンパイルを行う場合は、/ mnt/somedir/bin/bashを実行できるqemuシミュレーターを使用する必要があります。以下は、armhfクロスコンパイルの手順です。他のアーキテクチャの手順も同様です。
sudo apt-get install qemu-user-static
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
Bash elf
は、/bin
、/usr/bin/
などでは使用できません。
cp -rf --preserve=links /usr/bin/* myroot/usr/bin/; cp --preserve=links -rf /lib64/* myroot/lib64/;..
すべてのライブラリとELFをコピーします。
bdd ldd $(which bash)
に対してlddを実行する必要があります。依存関係が見つからない場合があります。たとえば、64システムでlib64をマウントまたはコピーしなかった場合、このエラーが発生します。
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にアクセスできるようにしました。