xref: /netbsd-src/etc/rc.d/entropy (revision cba96d16f7761373cca40f6996dfc63450933ac1)
1*cba96d16Sriastradh#!/bin/sh
2*cba96d16Sriastradh#
3*cba96d16Sriastradh# $NetBSD: entropy,v 1.1 2021/01/10 23:24:25 riastradh Exp $
4*cba96d16Sriastradh#
5*cba96d16Sriastradh
6*cba96d16Sriastradh# PROVIDE: entropy
7*cba96d16Sriastradh# REQUIRE: random_seed rndctl
8*cba96d16Sriastradh# BEFORE: ike ipsec network
9*cba96d16Sriastradh
10*cba96d16Sriastradh$_rc_subr_loaded . /etc/rc.subr
11*cba96d16Sriastradh
12*cba96d16Sriastradhname="entropy"
13*cba96d16Sriastradhstart_cmd="entropy_start"
14*cba96d16Sriastradhstop_cmd=":"
15*cba96d16Sriastradh
16*cba96d16Sriastradhentropy_start()
17*cba96d16Sriastradh{
18*cba96d16Sriastradh	case ${entropy-} in
19*cba96d16Sriastradh	'')	;;
20*cba96d16Sriastradh	check)	echo -n "Checking for entropy..."
21*cba96d16Sriastradh		# dd will print an error message `Resource temporarily
22*cba96d16Sriastradh		# unavailable' to stderr, which is a little annoying,
23*cba96d16Sriastradh		# but getting rid of it is also a little annoying.
24*cba96d16Sriastradh		if dd if=/dev/random iflag=nonblock of=/dev/null bs=1 count=1 \
25*cba96d16Sriastradh		    msgfmt=quiet; then
26*cba96d16Sriastradh			echo "done"
27*cba96d16Sriastradh		else
28*cba96d16Sriastradh			echo "not enough entropy available, aborting boot."
29*cba96d16Sriastradh			stop_boot
30*cba96d16Sriastradh		fi
31*cba96d16Sriastradh		;;
32*cba96d16Sriastradh	wait)	echo -n "Waiting for entropy..."
33*cba96d16Sriastradh		dd if=/dev/random of=/dev/null bs=1 count=1 msgfmt=quiet
34*cba96d16Sriastradh		echo "done"
35*cba96d16Sriastradh		;;
36*cba96d16Sriastradh	esac
37*cba96d16Sriastradh}
38*cba96d16Sriastradh
39*cba96d16Sriastradhload_rc_config "$name"
40*cba96d16Sriastradhrun_rc_command "$1"
41