#!/bin/sh # # $FreeBSD: src/etc/rc.d/initrandom,v 1.1 2002/06/13 22:14:36 gordon Exp $ # # PROVIDE: initrandom # REQUIRE: initdiskless # BEFORE: disks . /etc/rc.subr name="initrandom" start_cmd="initrandom_start" stop_cmd=":" feed_dev_random() { if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then ${SYSCTL_W} kern.seedenable=1 >/dev/null cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null ${SYSCTL_W} kern.seedenable=0 >/dev/null fi } initrandom_start() { # First pass at reseeding /dev/random. # case ${entropy_file} in [Nn][Oo] | '') ;; *) if [ -w /dev/random ]; then feed_dev_random "${entropy_file}" fi ;; esac # Mix in more junk. At the very least this will make seeding a # bit more machine specific. The 'sysctl -a' will also catch the # TSC, 8254, and a few other things that tend to be somewhat more # random (even from a CD boot) so it isn't all that bad. # echo -n 'Initializing random seed: ' ${SYSCTL_W} kern.seedenable=1 >/dev/null ( ps -fauxww; ${SYSCTL} -a; date; df -ib; dmesg; ps -fauxww; ) \ 2>&1 | dd of=/dev/random bs=8k 2>/dev/null cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null ${SYSCTL_W} kern.seedenable=0 >/dev/null echo 'done. ' } load_rc_config random run_rc_command "$1"