xref: /dragonfly/etc/rc.d/initrandom (revision 92fe556d)
1#!/bin/sh
2#
3# $FreeBSD: src/etc/rc.d/initrandom,v 1.1 2002/06/13 22:14:36 gordon Exp $
4#
5
6# PROVIDE: initrandom
7# REQUIRE: initdiskless
8# BEFORE: disks
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		${SYSCTL_W} kern.seedenable=1 >/dev/null
20		cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
21		${SYSCTL_W} kern.seedenable=0 >/dev/null
22	fi
23}
24
25initrandom_start()
26{
27	# First pass at reseeding /dev/random.
28	#
29	case ${entropy_file} in
30	[Nn][Oo] | '')
31		;;
32	*)
33		if [ -w /dev/random ]; then
34			feed_dev_random "${entropy_file}"
35		fi
36		;;
37	esac
38
39	# Mix in more junk.  At the very least this will make seeding a
40	# bit more machine specific.  The 'sysctl -a' will also catch the
41	# TSC, 8254, and a few other things that tend to be somewhat more
42	# random (even from a CD boot) so it isn't all that bad.
43	#
44	echo -n 'Initializing random seed: '
45	${SYSCTL_W} kern.seedenable=1 >/dev/null
46	( ps -fauxww; ${SYSCTL} -a; date; df -ib; dmesg; ps -fauxww; ) \
47	    2>&1 | dd of=/dev/random bs=8k 2>/dev/null
48	cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
49	${SYSCTL_W} kern.seedenable=0 >/dev/null
50	echo 'done. '
51}
52
53load_rc_config random
54run_rc_command "$1"
55