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