rngd - várias instâncias do script de inicialização

2

No Ubuntu > = 12.04, qual é a maneira mais correta / mais bonita de executar o rngd em várias instâncias usando um script de inicialização? O atual aceita apenas uma fonte aleatória, portanto, várias instâncias são necessárias.

Ou seja. Eu gostaria que rngd fosse controlado com o comando "service".

Quando eu inicio manualmente o rngd , ele funciona como eu esperava e, portanto, coletando aleatoriedade duas vezes a velocidade de uma única fonte.

$ rngd --pidfile=/var/run/rngd0.pid -r /dev/hwrng0  
$ rngd --pidfile=/var/run/rngd1.pid -r /dev/hwrng1

Alguma idéia de como resolver isso?

Editar

A versão final é assim, graças a @CameronNemo : /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
    
por Bollit 06.12.2014 / 01:10

1 resposta

1

Você pode tentar escrever um trabalho do Upstart usando instâncias (o arquivo do dispositivo seria a instância) e, em seguida, outro trabalho que inicia todas as instâncias que você deseja na inicialização.

link

Seria mais fácil para você se você fizesse os pidfiles com base no nome do dispositivo, então seria algo como "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

então outro trabalho, rng-tools, assim:

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

Você coloca esses arquivos como /etc/init/rngd-instance.conf e /etc/init/rng-tools.conf.

    
por 06.12.2014 / 03:25