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