Package: kexec-tools Version: 1:2.0.3-2 Severity: wishlist I'm using Grub2's saved_entry feature: /etc/default/grub: GRUB_SAVEDEFAULT=true GRUB_DEFAULT=saved which saves the selection from grub into /boot/grub/grubenv (1st setting) and uses that setting on the next boot (2nd line). This is especially useful when multiple kernels (or variants using the Xen hypervisor) are installed in parallel.
Currently kexec-load from the kexec-tools don't handle this and fail to load the "default" kernel. I've locally patched my /etc/init.d/kexec-load to support this: --- /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 @@ -39,6 +39,9 @@ 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 It would be nice if that could be included with Debian and/or upstream. -- 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