古いカーネルとuClibcを使用するデバイス用のコードをコンパイルするためにbuildrootを使用して構築されたファイルシステムがあります。
今fsと入力したいですchroot
。問題は、私は/bin/bash
、ちょうど/bin/busybox
。代わりに
chrootを使用することについてどうすればいいですかbusybox ash
?
chrootへのリンクを作成しようとしましたが、busybox ash
chrootがまだ表示されますfailed to run command /bin/bash. no such file or directory
。
答え1
chroot /path/to/fs /bin/ash
詳細については、マニュアルページを参照してくださいchroot
。
答え2
Busyboxにはlddスクリプトは含まれていません。代わりにこれを実行できます。
LD_TRACE_LOADED_OBJECTS=1 /bin/busybox
libresolv.so.2 => /lib/libresolv.so.2 (0xb6ece000)
libc.so.6 => /lib/libc.so.6 (0xb6d8c000)
/lib/ld-linux-armhf.so.3 (0xb6ef2000)
ご覧のとおり、この場合、busyboxは複数のライブラリに依存します。そのため、以下のようにディレクトリ構造を作成してlsコマンドを実行できるようになりました。
# pwd
/home/<jail>
# ls -R
.:
bin lib sbin
./bin:
busybox login ls sh
./lib:
ld-linux-armhf.so.3 libc.so.6 libresolv.so.2
...
# chroot /home/<jail>/ ls
bin lib sbin
答え3
「ldd busybox」を実行し、リンクされた共有ライブラリをchrootにコピーする必要があります。通常はリンクをシミュレートするので、ライブラリで「cp -L src dst」を使用します。