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