198184Sgordon#!/bin/sh 298184Sgordon# 398184Sgordon# $FreeBSD$ 498184Sgordon# 598184Sgordon 698184Sgordon# PROVIDE: initrandom 7208307Sdougb# REQUIRE: dumpon ddb 898184Sgordon# BEFORE: disks 9136224Smtm# KEYWORD: nojail 1098184Sgordon 1198184Sgordon. /etc/rc.subr 1298184Sgordon 1398184Sgordonname="initrandom" 1498184Sgordonstart_cmd="initrandom_start" 1598184Sgordonstop_cmd=":" 1698184Sgordon 1798184Sgordonfeed_dev_random() 1898184Sgordon{ 1998184Sgordon if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then 2098184Sgordon cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null 2198184Sgordon fi 2298184Sgordon} 2398184Sgordon 2498184Sgordoninitrandom_start() 2598184Sgordon{ 26128060Smarkm soft_random_generator=`sysctl kern.random 2>/dev/null` 27128060Smarkm 2898184Sgordon echo -n 'Entropy harvesting:' 2998184Sgordon 30128060Smarkm if [ \! -z "${soft_random_generator}" ] ; then 31128060Smarkm 32178423Sru if [ -w /dev/random ]; then 33178423Sru if checkyesno harvest_interrupt; then 34220153Semaste ${SYSCTL} kern.random.sys.harvest.interrupt=1 >/dev/null 35128060Smarkm echo -n ' interrupts' 36178423Sru else 37220153Semaste ${SYSCTL} kern.random.sys.harvest.interrupt=0 >/dev/null 38128060Smarkm fi 3998184Sgordon 40178423Sru if checkyesno harvest_ethernet; then 41220153Semaste ${SYSCTL} kern.random.sys.harvest.ethernet=1 >/dev/null 42128060Smarkm echo -n ' ethernet' 43178423Sru else 44220153Semaste ${SYSCTL} kern.random.sys.harvest.ethernet=0 >/dev/null 45128060Smarkm fi 4698184Sgordon 47178423Sru if checkyesno harvest_p_to_p; then 48220153Semaste ${SYSCTL} kern.random.sys.harvest.point_to_point=1 >/dev/null 49128060Smarkm echo -n ' point_to_point' 50178423Sru else 51220153Semaste ${SYSCTL} kern.random.sys.harvest.point_to_point=0 >/dev/null 52128060Smarkm fi 5398184Sgordon fi 54128060Smarkm 55128060Smarkm # XXX temporary until we can improve the entropy 56128060Smarkm # harvesting rate. 57128060Smarkm # Entropy below is not great, but better than nothing. 58128060Smarkm # This unblocks the generator at startup 59169924Srse ( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww ) \ 60128060Smarkm | dd of=/dev/random bs=8k 2>/dev/null 61128060Smarkm cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null 62128060Smarkm 63128060Smarkm # First pass at reseeding /dev/random. 64128060Smarkm # 65128060Smarkm case ${entropy_file} in 66128060Smarkm [Nn][Oo] | '') 67128060Smarkm ;; 68128060Smarkm *) 69128060Smarkm if [ -w /dev/random ]; then 70128060Smarkm feed_dev_random "${entropy_file}" 71128060Smarkm fi 72128060Smarkm ;; 73128060Smarkm esac 74128060Smarkm 75128060Smarkm echo -n ' kickstart' 7698184Sgordon fi 7798184Sgordon 7898184Sgordon echo '.' 7998184Sgordon} 8098184Sgordon 8198184Sgordonload_rc_config random 8298184Sgordonrun_rc_command "$1" 83