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