]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/initrandom
When stopping a chrooted named, unmount the devfs filesystem from
[FreeBSD/FreeBSD.git] / etc / rc.d / initrandom
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: initrandom
7 # REQUIRE: initdiskless
8 # BEFORE: disks
9 # KEYWORD: nojail
10
11 . /etc/rc.subr
12
13 name="initrandom"
14 start_cmd="initrandom_start"
15 stop_cmd=":"
16
17 feed_dev_random()
18 {
19         if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
20                 cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
21         fi
22 }
23
24 initrandom_start()
25 {
26         soft_random_generator=`sysctl kern.random 2>/dev/null`
27
28         echo -n 'Entropy harvesting:'
29
30         if [ \! -z "${soft_random_generator}" ] ; then
31
32                 if checkyesno harvest_interrupt; then
33                         if [ -w /dev/random ]; then
34                                 ${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null
35                                 echo -n ' interrupts'
36                         fi
37                 fi
38
39                 if checkyesno harvest_ethernet; then
40                         if [ -w /dev/random ]; then
41                                 ${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null
42                                 echo -n ' ethernet'
43                         fi
44                 fi
45
46                 if checkyesno harvest_p_to_p; then
47                         if [ -w /dev/random ]; then
48                         ${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null
49                                 echo -n ' point_to_point'
50                         fi
51                 fi
52
53                 # XXX temporary until we can improve the entropy
54                 # harvesting rate.
55                 # Entropy below is not great, but better than nothing.
56                 # This unblocks the generator at startup
57                 ( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) \
58                     | dd of=/dev/random bs=8k 2>/dev/null
59                 cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
60
61                 # First pass at reseeding /dev/random.
62                 #
63                 case ${entropy_file} in
64                 [Nn][Oo] | '')
65                         ;;
66                 *)
67                         if [ -w /dev/random ]; then
68                                 feed_dev_random "${entropy_file}"
69                         fi
70                         ;;
71                 esac
72
73                 echo -n ' kickstart'
74         fi
75
76         echo '.'
77 }
78
79 load_rc_config random
80 run_rc_command "$1"