rngd - init 스크립트의 여러 인스턴스

rngd - init 스크립트의 여러 인스턴스

Ubuntu >=12.04에서 init 스크립트를 사용하여 여러 인스턴스에서 rngd를 실행하는 가장 정확하고 아름다운 방법은 무엇입니까? 현재는 하나의 임의 소스만 허용되므로 여러 인스턴스가 필요합니다.

rngd즉, "service" 명령으로 제어 하고 싶다 .

수동으로 시작하면 rngd원하는 방식으로 작동하여 단일 소스보다 두 배 빠른 속도로 임의성을 수집합니다.

$ 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로 배치합니다.

관련 정보