jlec        15/06/29 07:49:24

  Added:                kexec.init-2.0.4-r3
  Log:
  Correctly handle loaded image during reboot with LOAD_DURING_SHUTDOWN, bug 
#553372; thanks AaylaSecura for the patch
  
  (Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key 
E9402A79B03529A2!)

Revision  Changes    Path
1.1                  sys-apps/kexec-tools/files/kexec.init-2.0.4-r3

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-apps/kexec-tools/files/kexec.init-2.0.4-r3?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-apps/kexec-tools/files/kexec.init-2.0.4-r3?rev=1.1&content-type=text/plain

Index: kexec.init-2.0.4-r3
===================================================================
#!/sbin/runscript
# Copyright 1999-2015 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-2.0.4-r3,v 1.1 
2015/06/29 07:49:24 jlec Exp $

depend() {
        need localmount
}

image_path() {
        local x= kver=$(uname -r) karch=$(uname -m)
        BOOTPART="${BOOTPART:-/boot}"
        KNAME="${KNAME:-bzImage}"
        if [ -e "${KNAME}" ]; then
                echo "${KNAME}"
                return 0
        fi
        for x in "${KNAME#${BOOTPART}}" vmlinuz \
                bzImage-${kver} vmlinuz-${kver} \
                kernel-genkernel-${karch}-${kver} \
                kernel-${kver} kernel-${karch}; do
                if [ -e "${BOOTPART}/${x}" ]; then
                        echo "${BOOTPART}/${x}"
                        return 0
                fi
        done

        return 1
}

initrd_path() {
        local x= kver=$(uname -r) karch=$(uname -m)
        BOOTPART="${BOOTPART:-/boot}"
        INITRD="${INITRD:-initrd}"
        if [ -e "${INITRD}" ]; then
                echo "${INITRD}"
                return 0
        fi
        for x in "${INITRD#${BOOTPART}}" \
                initrd.img-${kver} initrd-${kver}.img \
                initrd-${kver} initramfs-${kver}.img \
                initramfs-genkernel-${karch}-${kver} ; do
                if [ -e "${BOOTPART}/${x}" ]; then
                        echo "${BOOTPART}/${x}"
                        return 0
                fi
        done

        return 1
}

mount_boot(){
        local ret

        [ "${DONT_MOUNT_BOOT:-no}" = "no" ] || return 1
        grep -q " ${BOOTPART:-/boot} " /proc/mounts && return 1

        BOOTPART="${BOOTPART:-/boot}"
        ebegin "Mounting ${BOOTPART}"
        mount "${BOOTPART}"; ret=$?
        eend ${ret}
        return ${ret}
}

load_image() {
        local ret
        if [ "${KNAME}" = "-" ]; then
                ebegin "Disabling kexec"
                kexec -u; ret=$?
                eend ${ret}
                return ${ret}
        fi

        BOOTPART="${BOOTPART:-/boot}"
        local img= initrd="$(initrd_path)" mounted=false initrdopt=

        if ! img="$(image_path)"; then
                if mount_boot; then
                        if img="$(image_path)"; then
                                mounted=true
                                initrd="$(initrd_path)"
                        else
                                eerror "No kernel image found in ${BOOTPART}!"
                                umount "${BOOTPART}"
                                return 1
                        fi
                else
                        eerror "No kernel image found in ${BOOTPART}!"
                        return 1
                fi
        fi

        if [ -n "${INITRD}" ] && \
                ! [ "${BOOTPART}/${INITRD#${BOOTPART}}" = "${initrd}" ]; then
                eerror "Requested initrd: ${INITRD#${BOOTPART}}"
                eerror "could not be found"
                return 1
        fi

        [ -n "${ROOTPART}" ] || \
                ROOTPART="$(readlink -f "$(sed -n '/^\/[^ ]* \/ / s,^\([^ 
]*\).*,\1,p' /proc/mounts)")"

        [ -n "${KPARAM}" ] || KEXEC_OPT_ARGS="${KEXEC_OPT_ARGS} --reuse-cmdline"

        [ -n "${initrd}" ] && [ -e "${initrd}" ] && 
initrdopt="--initrd=${initrd}"

        local msg=
        [ -n "${initrd}" ] && \
                msg="with ${initrd}"
        einfo "Using kernel image ${img} ${msg} for kexec"

        ebegin "Setting kexec with ${KEXEC_OPT_ARGS} -l ${img} root=${ROOTPART} 
${KPARAM} ${initrdopt}"
        kexec ${KEXEC_OPT_ARGS} -l "${img}" --append="root=${ROOTPART} 
${KPARAM}" ${initrdopt}
        local res=$?

        ${mounted} && umount "${BOOTPART}"
        eend ${res}
        return ${res}
}

start() {
        if [ "${LOAD_DURING_SHUTDOWN:-yes}" = "yes" ]; then
                local ret=0
                BOOTPART="${BOOTPART:-/boot}"
                if mount_boot; then
                        mounted=true
                fi
                if ! image_path > /dev/null; then
                        ewarn "Cannot find kernel image!"
                        ewarn "Please make sure a valid kernel image is present 
before reboot."
                        return 0
                fi
                if [ -n "${mounted}" ]; then
                        ebegin "Unmounting ${BOOTPART}"
                        umount "${BOOTPART}"; ret=$?
                        eend ${ret}
                fi
                return ${ret}
        else
                ebegin "Configuring kexec"
                load_image
                eend $?
        fi
}

stop() {
        if ! yesno $RC_REBOOT; then
                einfo "Not rebooting, so disabling"
                kexec -u
                return 0
        fi

        if [ -f /nokexec ]; then
                einfo "Not using kexec during reboot"
                rm -f /nokexec
                kexec -u
                return 0
        fi

        [ "${LOAD_DURING_SHUTDOWN:-yes}" != "yes" ] && return 0

        ebegin "Configuring kexec"
        load_image
        eend $?
}




Reply via email to