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