#!/sbin/runscript # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/sys-apps/kexec-tools/files/kexec.init,v 1.13 2008/12/18 01:06:32 dsd Exp $ depend() { need localmount } image_path() { local x= kver=$(uname -r) for x in "${KNAME:-bzImage}" vmlinuz \ bzImage-"${kver}" vmlinuz-"${kver}" ; do if [ -e "${BOOTPART}/${x}" ] ; then echo "${BOOTPART}/${x}" return 0 fi done return 1 } load_image() { if [ "${KNAME}" = "-" ] ; then ebegin "Disabling kexec" kexec -u eend $? return $? fi BOOTPART="${BOOTPART:-/boot}" local img="$(image_path)" mounted=false initrdopt= if [ -z "${img}" ] ; then # If we cannot find our image, try mounting ${BOOTPART} if ! grep -q " ${BOOTPART} " /proc/mounts ; then ebegin "Mounting ${BOOTPART}" mount "${BOOTPART}" && mounted=true eend $? || return $? img="$(image_path)" fi fi if [ -z "${img}" ] ; then eerror "No kernel image found in ${BOOTPART}!" ${mounted} && umount "${BOOTPART}" return 1 fi ebegin "Loading kernel image ${img} for kexec" if [ -z "${ROOTPART}" ] ; then ROOTPART="$(readlink -f "$(sed -n '/^\/[^ ]* \/ / s,^\([^ ]*\).*,\1,p' /etc/mtab)")" fi if [ -z "${KPARAM}" ] ; then KPARAM="$(sed -e 's/ /\n/g' /proc/cmdline | grep -v -e "^root=" | tr '\n' ' ')" fi # Use the default initrd if it exists and none other given if [ -z "${INITRD}" -a -e "${BOOTPART}"/initrd ] ; then INITRD="${BOOTPART}/initrd" fi if [ -e "${INITRD}" ] ; then initrdopt="--initrd=${INITRD}" fi kexec -l "${img}" --append="root=${ROOTPART} ${KPARAM}" ${initrdopt} local res=$? ${mounted} && umount "${BOOTPART}" eend ${res} return ${res} } start() { [ "${LOAD_DURING_SHUTDOWN:-yes}" = "yes" ] && return 0 ebegin "Configuring kexec" load_image eend 0 } stop() { [ "${LOAD_DURING_SHUTDOWN:-yes}" != "yes" ] && return 0 ebegin "Configuring kexec" if [ "${RC_SOFTLEVEL:-${SOFTLEVEL:-${RC_RUNLEVEL:-${RUNLEVEL}}}}" != "reboot" ]; then einfo "Not rebooting, so disabling" kexec -u return 0 fi load_image eend $? }