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