summaryrefslogtreecommitdiff
path: root/packages/altboot/files/altboot-menu/Advanced/70-setKernel
diff options
context:
space:
mode:
Diffstat (limited to 'packages/altboot/files/altboot-menu/Advanced/70-setKernel')
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/70-setKernel65
1 files changed, 65 insertions, 0 deletions
diff --git a/packages/altboot/files/altboot-menu/Advanced/70-setKernel b/packages/altboot/files/altboot-menu/Advanced/70-setKernel
new file mode 100644
index 0000000000..3479637ba1
--- /dev/null
+++ b/packages/altboot/files/altboot-menu/Advanced/70-setKernel
@@ -0,0 +1,65 @@
+# !/bin/sh
+M_TITLE="Choose kernel for next boot"
+
+
+
+# Only kernel 2.6 offers kexec support
+uname -r | grep -q "^2.6" || exit 0
+
+run_module() {
+
+ test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
+
+ test -z "$KEXEC_KERNEL_DIR" && KEXEC_KERNEL_DIR="/boot"
+ test -x "$KEXEC_BIN" || die "kexec-tools not found [$KEXEC_BIN]"
+
+ # Mount /proc, etc
+ # init_rootfs
+
+ if test `ls -1 $KEXEC_KERNEL_DIR | grep -v "kexec.cfg" | wc -l | tr -d " "` -gt 1
+ then
+ echo -e "\nSelect the kernel for use of the next boot:\n"
+
+ cnt=1 ; reset_pref "kexec_klist"
+ for k in `ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `
+ do
+ echo -e "\t[$cnt] $k"
+ set_pref "kexec_klist" "$cnt" "$k"
+
+ let cnt=$cnt+1
+ done
+
+ echo ""
+
+ while true
+ do
+ echo -n "Select a kernel: "
+ read junk
+
+ #echo_pref kexec_klist
+
+ get_pref "kexec_klist" "$junk" KEXEC_SELECTED_KERNEL && break
+
+ done
+
+ echo "Using [$KEXEC_SELECTED_KERNEL]"
+ fi
+
+ if ! test -e "$KEXEC_SELECTED_KERNEL.kexec.cfg"
+ then
+ echo -e "\nWARNING: This kernel has not been configured."
+ echo -e "It will only boot correctly if CMDLINE is compiled in.\n"
+ fi
+
+ export USE_KEXEC_ON_NEXT_BOOT=yes
+ export KEXEC_SELECTED_KERNEL
+ show_menu
+}
+
+
+
+case "$1" in
+title) echo "$M_TITLE";;
+run) run_module;;
+esac
+