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