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