base-files: use procd init for urandom_seed
Previous implementation was blocking the init and breaking halt/reboot/sysupgrade (reported by Daniel Golle) v2: use procd logging, use set -e + trap for error handling Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com> Tested-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
parent
b8cd996d92
commit
35e423ca41
2 changed files with 27 additions and 24 deletions
|
@ -1,29 +1,12 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
EXTRA_COMMANDS="save"
|
||||
|
||||
_log() {
|
||||
logger -t urandom_seed "$1"
|
||||
}
|
||||
|
||||
_save() {
|
||||
touch $1.tmp || { _log "touch $1 failed"; return; }
|
||||
chown root:root $1.tmp || { _log "chown $1 failed"; return; }
|
||||
chmod 600 $1.tmp || { _log "chmod $1 failed"; return; }
|
||||
getrandom 512 > $1.tmp || { _log "getrandom failed"; return; }
|
||||
mv $1.tmp $1 || { _log "mv $1 failed"; return; }
|
||||
}
|
||||
|
||||
save() {
|
||||
SEED="$(uci -q get system.@system[0].urandom_seed)"
|
||||
[ "${SEED:0:1}" == "/" ] && _save "$SEED" && _log "Seed saved ($SEED)"
|
||||
|
||||
SEED=/etc/urandom.seed
|
||||
[ ! -f $SEED ] && _save "$SEED" && _log "Seed saved ($SEED)"
|
||||
}
|
||||
|
||||
boot() {
|
||||
save
|
||||
start_service() {
|
||||
procd_open_instance "urandom_seed"
|
||||
procd_set_param command "/sbin/urandom_seed"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
|
20
package/base-files/files/sbin/urandom_seed
Executable file
20
package/base-files/files/sbin/urandom_seed
Executable file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
trap '[ "$?" -eq 0 ] || echo "An error occured" >&2' EXIT
|
||||
|
||||
save() {
|
||||
touch "$1.tmp"
|
||||
chown root:root "$1.tmp"
|
||||
chmod 600 "$1.tmp"
|
||||
getrandom 512 > "$1.tmp"
|
||||
mv "$1.tmp" "$1"
|
||||
echo "Seed saved ($1)"
|
||||
}
|
||||
|
||||
SEED="$(uci -q get system.@system[0].urandom_seed || true)"
|
||||
[ "${SEED:0:1}" == "/" ] && save "$SEED"
|
||||
|
||||
SEED=/etc/urandom.seed
|
||||
[ ! -f $SEED ] && save "$SEED"
|
||||
true
|
Loading…
Reference in a new issue