Bug#426506: kexec-tools: Distinguish between DISABLED, TRY_KEXEC, FORCE_LOAD

2007-07-24 Thread Gregor Zattler
Hi Khalid,
* Khalid Aziz <[EMAIL PROTECTED]> [21. Jun. 2007]:
> On Fri, 2007-06-15 at 16:01 +0200, Philipp Matthias Hahn wrote:
>> It would be nice if "$USE_KEXEC" whould distinguish between three
>> states:
>> 
>> DISABLED:
>> TRY_EXEC: 
>> FORCE_LOAD:
> 
> I like this idea but I am concerned about implementation. TRY_KEXEC can
> be implemented cleanly on 2.6.18 and newer kernels due to the presence
> of /sys/kernel/kexec_loaded. On older kernels, there is no way to know
> if a kexec kernel has been loaded. Attempting kexec on older kernels
> without a kexec kernel loaded fails with cryptic error message - " kexec
> failed: Invalid argument". I can of course follow kexec -e with a
> regular reboot, but I am concerned about this cryptic error message.

Please enable this feature since nobody will run lenny on
kernels older than 2.6.18.1 (the oldest kernel sources I
checked for /sys/kernel/kexec_loaded).  I would like to use
your init scripts to boot a default kernel but would also
like to boot other kernels when needed.  The following simple
modification of the init scripts accomplishes this:

/etc/init.d/kexec_loaded should only load the default kernel as
defined in /etc/default/kexec if $USE_KEXEC = 1 *and*
/sys/kernel/kexec_loaded = 0.

/etc/init.d/kexec should not test $USE_KEXEC but kexec only if
/sys/kernel/kexec_loaded = 1. 

This would enable 3 different possibilities:

+--+-++
|  |kernel loaded prior  |no kernel loaded|
|  |to runtime of init   |prior to runtime of |
|  |scripts  |init-scripts|
+--+-++
|$USE_KEXEC = 1|kexec kernel loaded  |load and kexec  |
|  |from command line or |default kernel  |
|  |other script ||
+--+-++
|$USE_KEXEC = 0|kexec kernel loaded  |boot via bios   |
|  |from command line or ||
|  |other script ||
+--+-++

This proposal would change the meaning of $USE_KEXEC from "enable
kexec" to "use kexec as default".  Why should one install
kexec-tools and disable its use?

Please find attached the two slightely modified init scripts.
They work very well for me.  


Ciao, Gregor
#! /bin/sh
### BEGIN INIT INFO
# Provides: kexec
# Required-Start:   
# Required-Stop:reboot
# Should-Start:
# Should-Stop:
# Default-Start:
# Default-Stop: 6
# Short-Description: Execute the kexec -e command to reboot system
# Description:
### END INIT INFO

PATH=/usr/sbin:/usr/bin:/sbin:/bin

. /lib/lsb/init-functions

test -r /etc/default/kexec && . /etc/default/kexec

do_stop () {
test "x`cat /sys/kernel/kexec_loaded`y" == "x1y" || exit 0
test -x /sbin/kexec || exit 0

log_action_msg "Will now restart with kexec"
kexec -e
log_failure_msg "kexec failed"
}

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
#! /bin/sh
### BEGIN INIT INFO
# Provides: kexec-load
# Required-Start:
# Required-Stop:$local_fs kexec
# Should-Start:
# Should-Stop:
# Default-Start:
# Default-Stop: 6
# Short-Description: Load kernel image with kexec
# Description:
### END INIT INFO

PATH=/usr/sbin:/usr/bin:/sbin:/bin

. /lib/lsb/init-functions

test -r /etc/default/kexec && . /etc/default/kexec

do_stop () {
test "$USE_KEXEC" = 1 || exit 0
test -x /sbin/kexec || exit 0
test "x`cat /sys/kernel/kexec_loaded`y" == "x1y" && exit 0

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
kexec -l "$KERNEL_IMAGE" --append="$REAL_APPEND"
else
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


Bug#426506: kexec-tools: Distinguish between DISABLED, TRY_KEXEC, FORCE_LOAD

2007-06-29 Thread Khalid Aziz
On Fri, 2007-06-15 at 16:01 +0200, Philipp Matthias Hahn wrote:
> It would be nice if "$USE_KEXEC" whould distinguish between three
> states:

I would like to separate this enhancement request out into another bug
so it can be tracked and resolved independent of the original bug.

--
Khalid 
===
[EMAIL PROTECTED]



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Bug#426506: kexec-tools: Distinguish between DISABLED, TRY_KEXEC, FORCE_LOAD

2007-06-21 Thread Khalid Aziz
On Fri, 2007-06-15 at 16:01 +0200, Philipp Matthias Hahn wrote:
> It would be nice if "$USE_KEXEC" whould distinguish between three
> states:
> 
> DISABLED:
> TRY_EXEC: 
> FORCE_LOAD:

I like this idea but I am concerned about implementation. TRY_KEXEC can
be implemented cleanly on 2.6.18 and newer kernels due to the presence
of /sys/kernel/kexec_loaded. On older kernels, there is no way to know
if a kexec kernel has been loaded. Attempting kexec on older kernels
without a kexec kernel loaded fails with cryptic error message - " kexec
failed: Invalid argument". I can of course follow kexec -e with a
regular reboot, but I am concerned about this cryptic error message.

-- 
Khalid
===
[EMAIL PROTECTED]



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Bug#426506: kexec-tools: Distinguish between DISABLED, TRY_KEXEC, FORCE_LOAD

2007-06-15 Thread Philipp Matthias Hahn
Package: kexec-tools
Version: 1.101-kdump10-2
Followup-For: Bug #426506

It would be nice if "$USE_KEXEC" whould distinguish between three
states:

DISABLED:
/etc/init.d/kexec-load
Don't load any kernel
/etc/init.d/kexec
Don't use kexec on reboot
TRY_EXEC: 
/etc/init.d/kexec-load
Don't load any kernel
/etc/init.d/kexec
Try kexec, but continue with a regular boot if no image
was loaded. Could use /sys/kernel/kexec_loaded on newer
kernels (>= 2.6.19) or just execute kexec every time.
FORCE_LOAD:
/etc/init.d/kexec-load
Do load the specified kernel
/etc/init.d/kexec
Do execute kexec

For me, TRY_EXEC is missing. When I have to upgrade our servers kernels,
I really would like to use kexec, because they have SCSI and a reboot
takes eons. Therefor I execute
kexec --command-line="$(