initrandom revision 128060
198184Sgordon#!/bin/sh 298184Sgordon# 398184Sgordon# $FreeBSD: head/etc/rc.d/initrandom 128060 2004-04-09 15:56:16Z markm $ 498184Sgordon# 598184Sgordon 698184Sgordon# PROVIDE: initrandom 798184Sgordon# REQUIRE: initdiskless 898184Sgordon# BEFORE: disks 9126744Spjd# KEYWORD: FreeBSD 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 32128060Smarkm if checkyesno harvest_interrupt; then 33128060Smarkm if [ -w /dev/random ]; then 34128060Smarkm ${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null 35128060Smarkm echo -n ' interrupts' 36128060Smarkm fi 3798184Sgordon fi 3898184Sgordon 39128060Smarkm if checkyesno harvest_ethernet; then 40128060Smarkm if [ -w /dev/random ]; then 41128060Smarkm ${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null 42128060Smarkm echo -n ' ethernet' 43128060Smarkm fi 4498184Sgordon fi 4598184Sgordon 46128060Smarkm if checkyesno harvest_p_to_p; then 47128060Smarkm if [ -w /dev/random ]; then 48128060Smarkm ${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null 49128060Smarkm echo -n ' point_to_point' 50128060Smarkm fi 5198184Sgordon fi 52128060Smarkm 53128060Smarkm # XXX temporary until we can improve the entropy 54128060Smarkm # harvesting rate. 55128060Smarkm # Entropy below is not great, but better than nothing. 56128060Smarkm # This unblocks the generator at startup 57128060Smarkm ( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) \ 58128060Smarkm | dd of=/dev/random bs=8k 2>/dev/null 59128060Smarkm cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null 60128060Smarkm 61128060Smarkm # First pass at reseeding /dev/random. 62128060Smarkm # 63128060Smarkm case ${entropy_file} in 64128060Smarkm [Nn][Oo] | '') 65128060Smarkm ;; 66128060Smarkm *) 67128060Smarkm if [ -w /dev/random ]; then 68128060Smarkm feed_dev_random "${entropy_file}" 69128060Smarkm fi 70128060Smarkm ;; 71128060Smarkm esac 72128060Smarkm 73128060Smarkm echo -n ' kickstart' 7498184Sgordon fi 7598184Sgordon 7698184Sgordon echo '.' 7798184Sgordon} 7898184Sgordon 7998184Sgordonload_rc_config random 8098184Sgordonrun_rc_command "$1" 81