1#!/bin/sh 2# 3# $FreeBSD: src/etc/rc.d/initrandom,v 1.1 2002/06/13 22:14:36 gordon Exp $ 4# 5 6# PROVIDE: initrandom 7# REQUIRE: initdiskless 8# BEFORE: disks 9 10. /etc/rc.subr 11 12name="initrandom" 13start_cmd="initrandom_start" 14stop_cmd=":" 15 16feed_dev_random() 17{ 18 if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then 19 ${SYSCTL_W} kern.seedenable=1 >/dev/null 20 cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null 21 ${SYSCTL_W} kern.seedenable=0 >/dev/null 22 fi 23} 24 25initrandom_start() 26{ 27 # First pass at reseeding /dev/random. 28 # 29 case ${entropy_file} in 30 [Nn][Oo] | '') 31 ;; 32 *) 33 if [ -w /dev/random ]; then 34 feed_dev_random "${entropy_file}" 35 fi 36 ;; 37 esac 38 39 # Mix in more junk. At the very least this will make seeding a 40 # bit more machine specific. The 'sysctl -a' will also catch the 41 # TSC, 8254, and a few other things that tend to be somewhat more 42 # random (even from a CD boot) so it isn't all that bad. 43 # 44 echo -n 'Initializing random seed: ' 45 ${SYSCTL_W} kern.seedenable=1 >/dev/null 46 ( ps -fauxww; ${SYSCTL} -a; date; df -ib; dmesg; ps -fauxww; ) \ 47 2>&1 | dd of=/dev/random bs=8k 2>/dev/null 48 cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null 49 ${SYSCTL_W} kern.seedenable=0 >/dev/null 50 echo 'done. ' 51} 52 53load_rc_config random 54run_rc_command "$1" 55