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>
Etienne CHAMPETIER 8 years ago committed by Daniel Golle
parent b8cd996d92
commit 35e423ca41

@ -1,29 +1,12 @@
#!/bin/sh /etc/rc.common #!/bin/sh /etc/rc.common
START=99 START=99
USE_PROCD=1
EXTRA_COMMANDS="save"
start_service() {
_log() { procd_open_instance "urandom_seed"
logger -t urandom_seed "$1" procd_set_param command "/sbin/urandom_seed"
} procd_set_param stdout 1
procd_set_param stderr 1
_save() { procd_close_instance
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
} }

@ -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…
Cancel
Save