Ubuntu> = 12.04でinitスクリプトを使用して複数のインスタンスでrngdを実行する最も正確で美しい方法は何ですか?現在、1つのランダムなソースしか許可されていないため、複数のインスタンスが必要です。
rngd
つまり、「service」コマンドで制御したい。
手動で起動すると、rngd
必要な方法で動作し、単一のソースよりも2倍速い速度でランダム性を収集します。
$ rngd --pidfile=/var/run/rngd0.pid -r /dev/hwrng0
$ rngd --pidfile=/var/run/rngd1.pid -r /dev/hwrng1
この問題を解決する方法についてのアイデアはありますか?
編集する
最終バージョンは次のとおりです。ありがとうございます。@cameronnimo:/etc/init/rng-tools.conf:
description "rng-tools daemon"
start on runlevel [2345]
stop on runlevel [016]
env DEVLIST="$(find /dev/hwrng* -follow -type c)"
pre-start script
for device in $DEVLIST; do
start rngd-instance DEVICE=$device || failed="${failed}$device "
done
test -n "$failed" || { echo "Failed to start instances: $failed"; exit 1; }
end script
/etc/init/rngd-instance.conf:
stop on stopping rng-tools or runlevel [016]
description "rngd instance"
usage "DEVICE=full path to rng device"
instance $DEVICE
pre-start script
test -c "$DEVICE" || { echo "Not a device: $DEVICE"; exit 1; }
mkdir -p /var/run/rngd
end script
exec rngd --foreground --pidfile=/var/run/rngd/$(basename "$DEVICE") -r $DEVICE
/etc/init.d/rng-tools:
$ cd /etc/init.d/
$ sudo ln -sf /lib/init/upstart-job rng-tools
答え1
インスタンス(デバイスファイルはインスタンスです)を使用してUpstartジョブを作成し、起動時に必要なすべてのインスタンスを起動する別のジョブを作成できます。
http://upstart.ubuntu.com/cookbook/#instance
デバイス名に基づいてpidfileを作成すると簡単になりますので、「rngd-instance」と同じです。
stop on stopping rng-tools or runlevel [016]
instance $DEVICE
usage "DEVICE=full path to rng device"
pre-start script
test -c $DEVICE || { echo "Not a device: $DEVICE"; exit 1; }
mkdir -p $(dirname /var/run/rngd/$DEVICE)
end script
exec rngd --foreground --pidfile=/var/run/rngd/$DEVICE -r $DEVICE
その後、次のようにrng-toolsという別のタスクがあります。
start on runlevel [2345]
stop on runlevel [016]
env DEVLIST="/dev/hwrng0 /dev/hwrng1"
pre-start script
for d in $DEVLIST; do
initctl start rngd-instance DEVICE=$d || failed="${failed}$d "
done
test -n "$failed" || { echo "Failed to start instances: $failed"; exit 1; }
end script
これらのファイルを /etc/init/rngd-instance.conf および /etc/init/rng-tools.conf として配置します。