File: rng-tools-debian.init

package info (click to toggle)
rng-tools-debian 2-unofficial-mt.14-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 556 kB
  • sloc: ansic: 2,667; sh: 1,184; makefile: 53
file content (152 lines) | stat: -rw-r--r-- 4,216 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/sh
### BEGIN INIT INFO
# Provides:          rng-tools-debian rng-tools
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: rng-tools (Debian variant)
# Description:       The rng-tools daemon bridges between a hardware
#                    TRNG and the kernel PRNG, verifying input data.
### END INIT INFO

# absolute basics
LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin
export LC_ALL PATH
unset LANGUAGE

# exit cleanly if disabled or not installed
test -x /usr/sbin/rngd || exit 0

# Debian/LSB init script foobar
DESC='Hardware RNG entropy gatherer daemon'
NAME=rngd
. /lib/init/vars.sh
test -t 0 && VERBOSE=yes
. /lib/lsb/init-functions

# read options
HRNGDEVICE=/dev/hwrng
HRNGSELECT=
RNGDOPTIONS=
test -r /etc/default/rng-tools-debian && . /etc/default/rng-tools-debian

finddevice() {
	test -c "$HRNGDEVICE" && return 0
	# list of devices to try/auto-detect
	for x in hwrng hw_random hwrandom intel_rng i810_rng; do
		for y in /dev /dev/misc; do
			if test -c "$y/$x"; then
				HRNGDEVICE=$y/$x
				return 0
			fi
		done
	done
	return 1
}

# prepare for actions
case $1 in
(start|restart|try-restart|force-reload)
	if ! finddevice; then
		log_daemon_msg "Configuring $DESC"
		log_progress_msg "no hardware RNG device found!"
		log_end_msg 1
		exit 1
	fi
	test -z "$HRNGSELECT" || printf '%s' "$HRNGSELECT" \
	    >/sys/devices/virtual/misc/hw_random/rng_current
	;;
(stop|status)
	;;
(reload|*)
	# not supported
	echo >&2 "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
	exit 3
	;;
esac

# take action
rv=0
case $1 in
(status)
	status_of_proc -p /var/run/rngd.pid /usr/sbin/rngd rngd
	exit $?
	;;
(start)
	test x"$VERBOSE" = x"no" || log_daemon_msg "Starting $DESC"
	if start-stop-daemon --start --quiet \
	    --pidfile /var/run/rngd.pid \
	    --startas /usr/sbin/rngd --name rngd \
	    --exec /usr/sbin/rngd --test; then
		test x"$VERBOSE" = x"no" || log_progress_msg "rngd"
		start-stop-daemon --start --quiet \
		    --pidfile /var/run/rngd.pid \
		    --startas /usr/sbin/rngd --name rngd \
		    --exec /usr/sbin/rngd -- -r $HRNGDEVICE $RNGDOPTIONS
		rv=$?
	else
		test x"$VERBOSE" = x"no" || \
		    log_progress_msg "rngd already running"
	fi
	;;
(stop)
	test x"$VERBOSE" = x"no" || log_daemon_msg "Stopping $DESC"
	test x"$VERBOSE" = x"no" || log_progress_msg "rngd"
	start-stop-daemon --stop --quiet --retry=10 \
	    --pidfile /var/run/rngd.pid \
	    --name rngd --exec /usr/sbin/rngd
	rc=$?
	if test $rc -gt 1; then
		rv=$rc
	else
		start-stop-daemon --stop --quiet --oknodo \
		    --retry=0/30/KILL/5 --exec /usr/sbin/rngd
		rc=$?
		test $rc -gt 1 && test $rv -lt $rc && rv=$rc
	fi
	rm -f /var/run/rngd.pid
	;;
(restart|force-reload)
	test x"$VERBOSE" = x"no" || log_daemon_msg "Restarting $DESC"
	test x"$VERBOSE" = x"no" || log_progress_msg "rngd"
	start-stop-daemon --stop --quiet --retry=10 \
	    --pidfile /var/run/rngd.pid \
	    --name rngd --exec /usr/sbin/rngd
	if test $? -lt 2; then
		start-stop-daemon --stop --quiet --oknodo \
		    --retry=0/30/KILL/5 --exec /usr/sbin/rngd
	fi
	rm -f /var/run/rngd.pid
	start-stop-daemon --start --quiet \
	    --pidfile /var/run/rngd.pid \
	    --startas /usr/sbin/rngd --name rngd \
	    --exec /usr/sbin/rngd -- -r $HRNGDEVICE $RNGDOPTIONS
	rv=$?
	;;
(try-restart)
	test x"$VERBOSE" = x"no" || log_daemon_msg "Trying to restart $DESC"
	if ! status_of_proc -p /var/run/rngd.pid \
	    /usr/sbin/rngd rngd >/dev/null 2>&1; then
		test x"$VERBOSE" = x"no" || log_progress_msg "is not running."
		test x"$VERBOSE" = x"no" || log_end_msg 1
		exit 0
	fi
	test x"$VERBOSE" = x"no" || log_progress_msg "rngd"
	start-stop-daemon --stop --quiet --retry=10 \
	    --pidfile /var/run/rngd.pid \
	    --name rngd --exec /usr/sbin/rngd
	if test $? -lt 2; then
		start-stop-daemon --stop --quiet --oknodo \
		    --retry=0/30/KILL/5 --exec /usr/sbin/rngd
	fi
	rm -f /var/run/rngd.pid
	start-stop-daemon --start --quiet \
	    --pidfile /var/run/rngd.pid \
	    --startas /usr/sbin/rngd --name rngd \
	    --exec /usr/sbin/rngd -- -r $HRNGDEVICE $RNGDOPTIONS
	rv=$?
	;;
esac
test x"$VERBOSE" = x"no" || log_end_msg $rv
exit $rv