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