Package: kexec-tools
Version: 1:2.0.3-2
Severity: whishlist

Since I switched to Systemd, /etc/init.d/kexec-load no longer works as I
expect. This is caused by /lib/lsb/init-functions being changed by
Systemd to integrate traditional LSB init scripts into how Systemd
works.

My current work-around was to juse out-comment that line:
-- /tmp/x/etc/init.d/kexec-load        2013-01-12 23:04:53.000000000 +0100
+++ /etc/init.d/kexec-load      2013-01-16 22:50:55.969207479 +0100
@@ -13,7 +13,7 @@
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 NOKEXECFILE=/tmp/no-kexec-reboot
 
-. /lib/lsb/init-functions
+#. /lib/lsb/init-functions
 
 test -r /etc/default/kexec && . /etc/default/kexec
 
That now produces some warnings about the log_* functions being no
longer found, but otherwise works okay (for me).

I've done that because I like the easy way of just invoking
 /etc/init.d/kexec-load stop
to load my next kernel after an kernel update, because that script
figures out the right name of the vmlinux and initrd files, and kernel
command line. I could do that by invoking kexec myself with the right
arguments, but I find the init script easier.

It would be nice if the init script would work again with systemd
installed or if the logic would be moved to an sbin/ script callable by
hand.

-- System Information:
Debian Release: 7.0
  APT prefers unstable
  APT policy: (990, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.7.4 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages kexec-tools depends on:
ii  debconf [debconf-2.0]  1.5.49
ii  libc6                  2.13-38

kexec-tools recommends no packages.

kexec-tools suggests no packages.

-- Configuration Files:
/etc/init.d/kexec-load changed:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
NOKEXECFILE=/tmp/no-kexec-reboot
test -r /etc/default/kexec && . /etc/default/kexec
process_grub_entry() {
        initrd_image=
        while read command args; do
                if [ "$command" = "linux" ]; then
                        echo "$args" | while read kernel append; do
                        echo KERNEL_IMAGE=\"${prefix}${kernel}\"
                        echo APPEND=\"${append}\"
                        done
                elif [ "$command" = "initrd" ]; then
                        initrd_image=${prefix}${args}
                fi
        done
        echo INITRD=\"$initrd_image\"
}
get_grub_kernel() {
        test -f /boot/grub/grub.cfg || return
        local prefix
        mountpoint -q /boot && prefix=/boot || prefix=
        data=$(cat /boot/grub/grub.cfg)
        default=$(echo "$data" | awk '/^set default/ {print $2}' | cut -d'"' 
-f2)
        if [ "$default" = '${saved_entry}' ]; then
                default=$(sed -ne 's/^saved_entry=//p' /boot/grub/grubenv)
        fi
        if [ -z "$default" ]; then
                default=0
        fi
        start_offset=$((default + 1))
        end_offset=$((default + 2))
        # grub entries start with "menuentry" commands.  Get the line 
        # numbers that surround the first entry
        offsets=$(echo "$data" | grep -n ^menuentry | cut -d: -f1)
        begin=$(echo "$offsets" | tail -n+$start_offset | head -n1)
        end=$(echo "$offsets" | tail -n+$end_offset | head -n1)
        # If this is the last entry, we need to read to the end of the file
        # or to the end of boot entry section
        if [ -z "$end" ]; then
                numlines=$(echo "$data" | tail --lines=+$begin | grep -n "^### 
END" | head -1 | cut -d: -f1)
                end=$((begin + numlines - 1))
        fi
        length=$((end - begin))
        entry=$(echo "$data" | tail -n+$begin | head -n$length)
        eval $(echo "$entry" | process_grub_entry)
}
do_stop () {
        test "$LOAD_KEXEC" = "true" || exit 0
        test -x /sbin/kexec || exit 0
        test "x`cat /sys/kernel/kexec_loaded`y" = "x1y" && exit 0
        if [ -f $NOKEXECFILE ]
        then
                /bin/rm -f $NOKEXECFILE
                exit 0
        fi
        test "$USE_GRUB_CONFIG" = "true" && get_grub_kernel
        REAL_APPEND="$APPEND"
        test -z "$REAL_APPEND" && REAL_APPEND="`cat /proc/cmdline`"
        log_action_begin_msg "Loading new kernel image into memory"
        if [ -z "$INITRD" ]
        then
                /sbin/kexec -l "$KERNEL_IMAGE" --append="$REAL_APPEND"
        else
                /sbin/kexec -l "$KERNEL_IMAGE" --initrd="$INITRD" 
--append="$REAL_APPEND"
        fi
        log_action_end_msg $?
}
case "$1" in
  start)
        # No-op
        ;;
  restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
  stop)
        do_stop
        ;;
  *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac
exit 0


-- debconf information:
* kexec-tools/use_grub_config: true
* kexec-tools/load_kexec: true


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to