rngd
Raspberry Pi Zero環境で実行してみてくださいrng-tools
。chroot
ldd
同じコマンドを実行すると、すべての依存関係がchroot
満たされているとマークされます。
pi@raspberrypi:~/rngd_chroot $ sudo chroot /home/pi/rngd_chroot/ ldd /sbin/rngd
libpthread.so.0 => /lib/libpthread.so.0 (0xb6f77000)
libc.so.6 => /lib/libc.so.6 (0xb6e29000)
/lib/arm-linux-gnueabihf/ld-linux.so.3 => /lib/ld-linux-armhf.so.3 (0xb6fa1000)
chroot
同じ実行可能ファイルの非インスタンスを実行するために使用される実際のライブラリも、このrngd
フォルダchroot
の下にあります。
pi@raspberrypi:~/rngd_chroot $ ps -aux | grep rngd
root 262 0.0 0.3 27640 1432 ? SLsl 14:05 0:00 /usr/sbin/rngd -r /dev/hwrng
pi@raspberrypi:~/rngd_chroot $ sudo cat /proc/262/maps
00008000-00010000 r-xp 00000000 b3:02 20512 /usr/sbin/rngd
00010000-00011000 rw-p 00008000 b3:02 20512 /usr/sbin/rngd
0197c000-0197d000 rw-p 00000000 00:00 0 [heap]
0197d000-01981000 rw-p 00000000 00:00 0 [heap]
01981000-0199d000 rw-p 00000000 00:00 0 [heap]
b5400000-b5421000 rw-p 00000000 00:00 0
b5421000-b5500000 ---p 00000000 00:00 0
b55c0000-b55c1000 ---p 00000000 00:00 0
b55c1000-b5dc1000 rw-p 00000000 00:00 0
b5dc1000-b5dc2000 ---p 00000000 00:00 0
b5dc2000-b65c2000 rw-p 00000000 00:00 0
b65c2000-b65c3000 ---p 00000000 00:00 0
b65c3000-b6dc3000 rw-p 00000000 00:00 0
b6dc3000-b6efb000 r-xp 00000000 b3:02 5239 /usr/lib/arm-linux-gnueabihf/libc-2.28.so
b6efb000-b6f0b000 ---p 00138000 b3:02 5239 /usr/lib/arm-linux-gnueabihf/libc-2.28.so
b6f0b000-b6f0d000 r--p 00138000 b3:02 5239 /usr/lib/arm-linux-gnueabihf/libc-2.28.so
b6f0d000-b6f0e000 rw-p 0013a000 b3:02 5239 /usr/lib/arm-linux-gnueabihf/libc-2.28.so
b6f0e000-b6f11000 rw-p 00000000 00:00 0
b6f11000-b6f28000 r-xp 00000000 b3:02 5412 /usr/lib/arm-linux-gnueabihf/libpthread-2.28.so
b6f28000-b6f37000 ---p 00017000 b3:02 5412 /usr/lib/arm-linux-gnueabihf/libpthread-2.28.so
b6f37000-b6f38000 r--p 00016000 b3:02 5412 /usr/lib/arm-linux-gnueabihf/libpthread-2.28.so
b6f38000-b6f39000 rw-p 00017000 b3:02 5412 /usr/lib/arm-linux-gnueabihf/libpthread-2.28.so
b6f39000-b6f3b000 rw-p 00000000 00:00 0
b6f3b000-b6f3d000 r-xp 00000000 b3:02 5217 /usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so
b6f3d000-b6f4c000 ---p 00002000 b3:02 5217 /usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so
b6f4c000-b6f4d000 r--p 00001000 b3:02 5217 /usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so
b6f4d000-b6f4e000 rw-p 00002000 b3:02 5217 /usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so
b6f4e000-b6f6e000 r-xp 00000000 b3:02 5130 /usr/lib/arm-linux-gnueabihf/ld-2.28.so
b6f7b000-b6f7d000 rw-p 00000000 00:00 0
b6f7e000-b6f7f000 r--p 00020000 b3:02 5130 /usr/lib/arm-linux-gnueabihf/ld-2.28.so
b6f7f000-b6f80000 rw-p 00021000 b3:02 5130 /usr/lib/arm-linux-gnueabihf/ld-2.28.so
bebb6000-bebd7000 rw-p 00000000 00:00 0 [stack]
becab000-becac000 r-xp 00000000 00:00 0 [sigpage]
ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors]
pi@raspberrypi:~/rngd_chroot $ sudo find . | grep -v -e "/dev/" -e "/sys/" -e "/proc/"
.
./sbin
./sbin/rngd
./usr
./usr/share
./usr/share/lintian
./usr/share/lintian/overrides
./usr/share/lintian/overrides/rng-tools
./bin
./bin/rngtest
./bin/sh
./bin/bash
./bin/ldd
./lib
./lib/libarmmem-v6l.so
./lib/libpthread.so.0
./lib/ld-linux-armhf.so.3
./lib/ld-2.28.so
./lib/libtinfo.so.6
./lib/libc.so.6
./lib/libc-2.28.so
./lib/libtinfo.so.6.1
./lib/libpthread-2.28.so
./lib/libdl.so.2
./lib/libdl-2.28.so
./sys
./dev
./var
./var/run
./proc
しかし、実行しようとすると次のようにrngd
なりましたchroot
。
pi@raspberrypi:~/rngd_chroot $ sudo chroot /home/pi/rngd_chroot/ /sbin/rngd
chroot: failed to run command ‘/sbin/rngd’: No such file or directory
有効な実行可能ファイルがあることを証明するためにrngd
実行するには、以下は必要ありませんchroot
。
pi@raspberrypi:~/rngd_chroot $ sudo sbin/rngd
can't lock /var/run/rngd.pid, running daemon's pid may be 262
この問題をデバッグする方法について提案をいただきありがとうございます。
ベストアンサー1
TL;博士学位
rngd
必須/lib/arm-linux-gnueabihf/ld-linux.so.3(プログラム通訳)は実行可能ファイルを実行するときに正しい場所に存在しますが、ldd
次のように解決されません。/lib/ld-linux-armhf.so.3
これ良い答えプログラムソルバーメカニズムに関する何かが私に正しい方向を伝えました。
この問題を解決するために、まず見つけて使ってみました。LD_DEBUG環境変数:
sudo chroot /home/pi/rngd_chroot/ bash
bash-5.0# LD_DEBUG=libs rngd
bash: /sbin/rngd: No such file or directory
結果を設定すると出力がないのにLD_DEBUG
出力があってrng
ロードbash
もできないようです。プログラム通訳図書館(ld-Linux)。
図書館の検索が次のように行われると仮定ld-Linux見つけることができないことは当然ですld-Linux正確な位置にない場合(/lib/arm-linux-gnueabihf/ld-linux.so.3私は)。
ldd
不足しているライブラリとして報告されていない理由がわかりません。私の考えでは、これがバグ機能のようですldd
。
ldd
また、合計の出力を比較すると、次のようになります。bash
rng
pi@raspberrypi:~/rngd_chroot $ ldd bin/bash
...
/lib/ld-linux-armhf.so.3 (0xb6f9b000)
pi@raspberrypi:~/rngd_chroot $ ldd sbin/rngd
...
/lib/arm-linux-gnueabihf/ld-linux.so.3 => /lib/ld-linux-armhf.so.3 (0xb6f10000)
bash
左側の部分がないため、実際のローカルパスのみが表示されます。プログラム通訳。
実行ファイルのリンク方法に関連しているようです。
正確に何が起こっているのか、そしてこれら2つのタイプの正しい用語が何であるかをより深く理解している人がいる場合プログラム通訳リンクを回答やコメントで投稿してください(ここに追加します)。