]> git.pld-linux.org Git - projects/rc-scripts.git/blob - rc.d/init.d/random
de45e1b2c0880b5e2122db26308b72dc7402246e
[projects/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 upstart_controlled start stop
20
21 random_seed=/var/run/random-seed
22
23 poolfile=/proc/sys/kernel/random/poolsize
24 [ -r $poolfile ] && bytes="$(cat $poolfile)" || bytes=512
25
26 start() {
27         # Check if the service is already running?
28         if [ -f /var/lock/subsys/random ]; then
29                 return
30         fi
31
32         emit starting JOB=random
33         show "Initializing random number generator"
34         busy
35         # Carry a random seed from start-up to start-up
36         if [ -f $random_seed ]; then
37                 cat $random_seed >/dev/urandom
38         else
39                 touch $random_seed
40         fi
41         chmod 600 $random_seed
42         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes 2>/dev/null
43         touch /var/lock/subsys/random
44         deltext
45         ok
46         emit --nowait started JOB=random
47 }
48
49 stop() {
50         if [ ! -f /var/lock/subsys/random ]; then
51                 return
52         fi
53
54         # Carry a random seed from shut-down to start-up
55         emit stopping JOB=random
56         show "Saving random seed"
57         busy
58         touch $random_seed
59         chmod 600 $random_seed
60         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes 2>/dev/null
61
62         rm -f /var/lock/subsys/random >/dev/null 2>&1
63         deltext
64         ok
65         emit --no-wait stopped JOB=random
66 }
67
68 status() {
69         entropy_avail="$(cat /proc/sys/kernel/random/entropy_avail)"
70         if [ "$entropy_avail" -eq 0 -o ! -c /dev/random ] ; then
71                 nls "The random data source is missing"
72                 RETVAL=1
73         else
74                 nls "%d bytes of entropy available" $entropy_avail
75         fi
76 }
77
78 # See how we were called.
79 case "$1" in
80   start)
81         start
82         ;;
83   stop)
84         stop
85         ;;
86   status)
87         status
88         ;;
89   *)
90         msg_usage "$0 {start|stop|status}"
91         exit 3
92 esac
93
94 exit 0
This page took 0.120917 seconds and 2 git commands to generate.