]>
Commit | Line | Data |
---|---|---|
12de71be | 1 | #!/bin/sh |
7742e157 AF |
2 | # |
3 | # random Script to snapshot random state and reload it at boot time. | |
4 | # | |
8d86e6df | 5 | # chkconfig: 12345 20 80 |
7742e157 | 6 | # |
8d86e6df | 7 | # description: Saves and restores system entropy pool for higher quality \ |
8 | # random number generation. | |
38198f50 | 9 | # |
38198f50 | 10 | |
7742e157 AF |
11 | # Source function library. |
12 | . /etc/rc.d/init.d/functions | |
13 | ||
720d1741 ER |
14 | # do nothing in vserver |
15 | if is_yes "$VSERVER"; then | |
16 | return | |
17 | fi | |
18 | ||
7742e157 AF |
19 | random_seed=/var/run/random-seed |
20 | ||
2d18ddba JK |
21 | poolfile=/proc/sys/kernel/random/poolsize |
22 | [ -r $poolfile ] && bytes="$(cat $poolfile)" || bytes=512 | |
23 | ||
dad21c53 | 24 | start() { |
82594fe2 | 25 | # Check if the service is already running? |
82594fe2 | 26 | if [ -f /var/lock/subsys/random ]; then |
dad21c53 ER |
27 | return |
28 | fi | |
29 | ||
dad21c53 ER |
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 | |
82594fe2 | 36 | touch $random_seed |
dad21c53 ER |
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 | |
dad21c53 | 43 | } |
5e6dfc29 | 44 | |
dad21c53 ER |
45 | stop() { |
46 | if [ ! -f /var/lock/subsys/random ]; then | |
47 | return | |
82594fe2 | 48 | fi |
dad21c53 ER |
49 | |
50 | # Carry a random seed from shut-down to start-up | |
dad21c53 ER |
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 | ||
354b37ce | 57 | rm -f /var/lock/subsys/random >/dev/null 2>&1 |
dad21c53 ER |
58 | deltext |
59 | ok | |
dad21c53 ER |
60 | } |
61 | ||
62 | status() { | |
63 | entropy_avail="$(cat /proc/sys/kernel/random/entropy_avail)" | |
3488ca13 | 64 | if [ "$entropy_avail" -eq 0 -o ! -c /dev/random ] ; then |
38198f50 | 65 | nls "The random data source is missing" |
dad21c53 | 66 | RETVAL=1 |
3488ca13 | 67 | else |
2c25e6b5 | 68 | nls "%d bytes of entropy available" $entropy_avail |
7742e157 | 69 | fi |
dad21c53 ER |
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 | |
7742e157 | 82 | ;; |
7742e157 | 83 | *) |
5dc4b912 | 84 | msg_usage "$0 {start|stop|status}" |
c632d197 | 85 | exit 3 |
7742e157 AF |
86 | esac |
87 | ||
88 | exit 0 |