initrandom revision 208307
1#!/bin/sh 2# 3# $FreeBSD: head/etc/rc.d/initrandom 208307 2010-05-19 19:03:19Z dougb $ 4# 5 6# PROVIDE: initrandom 7# REQUIRE: dumpon ddb 8# BEFORE: disks 9# KEYWORD: nojail 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 cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null 21 fi 22} 23 24initrandom_start() 25{ 26 soft_random_generator=`sysctl kern.random 2>/dev/null` 27 28 echo -n 'Entropy harvesting:' 29 30 if [ \! -z "${soft_random_generator}" ] ; then 31 32 if [ -w /dev/random ]; then 33 if checkyesno harvest_interrupt; then 34 ${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null 35 echo -n ' interrupts' 36 else 37 ${SYSCTL_W} kern.random.sys.harvest.interrupt=0 >/dev/null 38 fi 39 40 if checkyesno harvest_ethernet; then 41 ${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null 42 echo -n ' ethernet' 43 else 44 ${SYSCTL_W} kern.random.sys.harvest.ethernet=0 >/dev/null 45 fi 46 47 if checkyesno harvest_p_to_p; then 48 ${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null 49 echo -n ' point_to_point' 50 else 51 ${SYSCTL_W} kern.random.sys.harvest.point_to_point=0 >/dev/null 52 fi 53 fi 54 55 # XXX temporary until we can improve the entropy 56 # harvesting rate. 57 # Entropy below is not great, but better than nothing. 58 # This unblocks the generator at startup 59 ( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww ) \ 60 | dd of=/dev/random bs=8k 2>/dev/null 61 cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null 62 63 # First pass at reseeding /dev/random. 64 # 65 case ${entropy_file} in 66 [Nn][Oo] | '') 67 ;; 68 *) 69 if [ -w /dev/random ]; then 70 feed_dev_random "${entropy_file}" 71 fi 72 ;; 73 esac 74 75 echo -n ' kickstart' 76 fi 77 78 echo '.' 79} 80 81load_rc_config random 82run_rc_command "$1" 83