]> git.pld-linux.org Git - packages/kexec-tools.git/blob - kexec.init
- updated to 2.0.9
[packages/kexec-tools.git] / kexec.init
1 #!/bin/sh
2 #
3 # kexec-load    Load kernel image with kexec
4 #
5 # chkconfig:    345 99 01
6 #
7 # description:  This tool is used to load a kernel in memory and reboot into the kernel \
8 #                               loaded in memory using the kexec system call.
9 #
10 # $Id$
11
12 # Source function library
13 . /etc/rc.d/init.d/functions
14
15 LOAD_KEXEC=yes
16 KERNEL_IMAGE="/boot/vmlinuz"
17 INITRD="/boot/initrd"
18 APPEND=""
19
20 # Get service config - may override defaults
21 [ -f /etc/sysconfig/kexec ] && . /etc/sysconfig/kexec
22
23 load() {
24         if [ -z "$APPEND" ]; then
25                 local a
26                 for a in $(cat /proc/cmdline); do
27                         case "$a" in
28                                 kexec_*=)
29                                         # skip entries like:
30                                         # kexec_jump_back_entry=0x01000201a4814e49
31                                         ;;
32                                 *)
33                                         APPEND="$APPEND $a"
34                         esac
35                 done
36         fi
37
38         # convert to real file for readability
39         if [ -L "$KERNEL_IMAGE" ]; then
40                 KERNEL_IMAGE=$(readlink -f "$KERNEL_IMAGE")
41         fi
42         if [ -L "$INITRD" ]; then
43                 INITRD=$(readlink -f "$INITRD")
44         fi
45
46         if [ -z "$INITRD" ]; then
47                 show "Loading kernel image: %s, args [%s]" "$KERNEL_IMAGE" "$APPEND"
48                 kexec -l "$KERNEL_IMAGE" --append="$APPEND"
49         else
50                 show "Loading kernel image: %s, initrd %s, args [%s]" "$KERNEL_IMAGE" "$INITRD" "$APPEND"
51                 kexec -l "$KERNEL_IMAGE" --initrd="$INITRD" --append="$APPEND"
52         fi
53         RETVAL=$?
54         [ $RETVAL = 0 ] && ok || fail
55 }
56
57 start() {
58         if [ -f /var/lock/subsys/kexec ]; then
59                 return
60         fi
61         touch /var/lock/subsys/kexec
62 }
63
64 stop() {
65         if ! is_yes "$LOAD_KEXEC" || [ ! -f /sys/kernel/kexec_loaded ]; then
66                 return
67         fi
68
69         # skip if already loaded something
70         if [ "$(cat /sys/kernel/kexec_loaded 2>/dev/null)" = "1" ]; then
71                 return
72         fi
73
74         load
75         rm -f /var/lock/subsys/kexec
76 }
77
78 status() {
79         if [ "$(cat /sys/kernel/kexec_loaded 2>/dev/null)" = "1" ]; then
80                 show "Kexec image loaded"; ok
81         else
82                 show "Kexec image is not loaded"; fail
83         fi
84         if [ "$(cat /sys/kernel/kexec_crash_loaded 2>/dev/null)" = 1 ]; then
85                 show "Kexec image for kernel crash loaded"; ok
86         else
87                 show "Kexec image for kernel crash is not loaded"; fail
88         fi
89
90         # convert to real file for readability
91         if [ -L "$KERNEL_IMAGE" ]; then
92                 KERNEL_IMAGE=$(readlink -f "$KERNEL_IMAGE")
93         fi
94         if [ -L "$INITRD" ]; then
95                 INITRD=$(readlink -f "$INITRD")
96         fi
97         INIT_COL=0 show "Configured kernel: %s" "$KERNEL_IMAGE"; echo
98         if [ -n "$INITRD" ]; then
99                 INIT_COL=0 show "Configured initrd: %s" "$INITRD"; echo
100         fi
101 }
102
103 RETVAL=0
104 # See how we were called.
105 case "$1" in
106   start)
107         start
108         ;;
109   stop)
110         stop
111         ;;
112   restart)
113         stop
114         start
115         ;;
116   load)
117         load
118         ;;
119   status)
120         status
121         ;;
122   *)
123         msg_usage "$0 {start|stop|load|restart|status}"
124         exit 3
125 esac
126
127 exit $RETVAL
This page took 0.076959 seconds and 3 git commands to generate.