diff --git a/sys-apps/kexec-tools/files/kexec.init b/sys-apps/kexec-tools/files/kexec.init new file mode 100755 --- /dev/null +++ b/sys-apps/kexec-tools/files/kexec.init @@ -0,0 +1,94 @@ +#!/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.14 2009/04/12 04:45:19 darkside 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 [ "`/sbin/runlevel|/bin/cut -c 3`" != "6" ]; then + einfo "Not rebooting, so disabling" + kexec -u + return 0 + fi + + load_image + eend $? +}