]> TLD Linux GIT Repositories - rc-scripts.git/blob - rc.d/init.d/random
- from PLD
[rc-scripts.git] / rc.d / init.d / random
1 #!/bin/sh
2 #
3 # random        Script to snapshot random state and reload it at boot time.
4 #
5 # chkconfig:    12345 20 80
6 #
7 # description:  Saves and restores system entropy pool for higher quality \
8 #               random number generation.
9 #
10
11 # Source function library.
12 . /etc/rc.d/init.d/functions
13
14 # do nothing in vserver
15 if is_yes "$VSERVER"; then
16         return
17 fi
18
19 random_seed=/var/run/random-seed
20
21 poolfile=/proc/sys/kernel/random/poolsize
22 [ -r $poolfile ] && bytes="$(cat $poolfile)" || bytes=512
23
24 start() {
25         # Check if the service is already running?
26         if [ -f /var/lock/subsys/random ]; then
27                 return
28         fi
29
30         show "Initializing random number generator"
31         busy
32         # Carry a random seed from start-up to start-up
33         if [ -f $random_seed ]; then
34                 cat $random_seed >/dev/urandom
35         else
36                 touch $random_seed
37         fi
38         chmod 600 $random_seed
39         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes 2>/dev/null
40         touch /var/lock/subsys/random
41         deltext
42         ok
43 }
44
45 stop() {
46         if [ ! -f /var/lock/subsys/random ]; then
47                 return
48         fi
49
50         # Carry a random seed from shut-down to start-up
51         show "Saving random seed"
52         busy
53         touch $random_seed
54         chmod 600 $random_seed
55         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes 2>/dev/null
56
57         rm -f /var/lock/subsys/random >/dev/null 2>&1
58         deltext
59         ok
60 }
61
62 status() {
63         entropy_avail="$(cat /proc/sys/kernel/random/entropy_avail)"
64         if [ "$entropy_avail" -eq 0 -o ! -c /dev/random ] ; then
65                 nls "The random data source is missing"
66                 RETVAL=1
67         else
68                 nls "%d bytes of entropy available" $entropy_avail
69         fi
70 }
71
72 # See how we were called.
73 case "$1" in
74   start)
75         start
76         ;;
77   stop)
78         stop
79         ;;
80   status)
81         status
82         ;;
83   *)
84         msg_usage "$0 {start|stop|status}"
85         exit 3
86 esac
87
88 exit 0