57e561c083
as part of rc. Doing this, and the sourcing of rc.subr after we have determined if we are booting diskless (and correspondingly run rc.initdiskless if necessary) are safe, and actually allow fewer files to be needed on the diskless box. This also allows variables from the configuration to be available to rc itself, such as ... Add a variable to rc.conf, early_late_divider, which designates the script which separates the early and late stages of the boot process. Default this to mountcritlocal, and add text to etc/defaults/rc.conf, rc.conf(5) and diskless(8) which describes how and why one might want to change this. Reviewed by: brooks
80 lines
1.5 KiB
Bash
80 lines
1.5 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: initrandom
|
|
# BEFORE: disks
|
|
# KEYWORD: nojail
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="initrandom"
|
|
start_cmd="initrandom_start"
|
|
stop_cmd=":"
|
|
|
|
feed_dev_random()
|
|
{
|
|
if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
|
|
cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
initrandom_start()
|
|
{
|
|
soft_random_generator=`sysctl kern.random 2>/dev/null`
|
|
|
|
echo -n 'Entropy harvesting:'
|
|
|
|
if [ \! -z "${soft_random_generator}" ] ; then
|
|
|
|
if checkyesno harvest_interrupt; then
|
|
if [ -w /dev/random ]; then
|
|
${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null
|
|
echo -n ' interrupts'
|
|
fi
|
|
fi
|
|
|
|
if checkyesno harvest_ethernet; then
|
|
if [ -w /dev/random ]; then
|
|
${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null
|
|
echo -n ' ethernet'
|
|
fi
|
|
fi
|
|
|
|
if checkyesno harvest_p_to_p; then
|
|
if [ -w /dev/random ]; then
|
|
${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null
|
|
echo -n ' point_to_point'
|
|
fi
|
|
fi
|
|
|
|
# XXX temporary until we can improve the entropy
|
|
# harvesting rate.
|
|
# Entropy below is not great, but better than nothing.
|
|
# This unblocks the generator at startup
|
|
( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) \
|
|
| dd of=/dev/random bs=8k 2>/dev/null
|
|
cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
|
|
|
|
# First pass at reseeding /dev/random.
|
|
#
|
|
case ${entropy_file} in
|
|
[Nn][Oo] | '')
|
|
;;
|
|
*)
|
|
if [ -w /dev/random ]; then
|
|
feed_dev_random "${entropy_file}"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
echo -n ' kickstart'
|
|
fi
|
|
|
|
echo '.'
|
|
}
|
|
|
|
load_rc_config random
|
|
run_rc_command "$1"
|