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