--- trunk/grubby/new-kernel-pkg 2014/07/16 10:54:46 2704 +++ trunk/grubby/new-kernel-pkg 2017/06/27 14:26:38 3006 @@ -79,6 +79,7 @@ grub2Config="" grub2EfiConfig="" extlinuxConfig="" +ubootScript="/boot/boot.scr" ARCH=$(uname -m) @@ -154,6 +155,7 @@ mbargs="${HYPERVISOR_ARGS}" adddracutargs="" addplymouthinitrd="" +DEBUGARG="systemd.log_level=debug systemd.log_target=kmsg" usage() { @@ -163,12 +165,60 @@ echo " [--banner=] [--multiboot=multiboot]" >&2 echo " [--mbargs=mbargs] [--make-default] [--add-dracut-args]" >&2 echo " [--add-plymouth-initrd]" >&2 - echo " [--host-only] [--devtree=]" >&2 + echo " [--host-only] [--devtree=] [--devtreedir=]" >&2 echo " <--install | --remove | --update> " >&2 echo " (ex: $(basename $0) --mkinitrd --depmod --install 2.4.7-2)" >&2 exit 1 } +rungrubby() +{ + if [[ $1 == --debug ]] + then + [[ ${MAKEDEBUG} != yes ]] && return 0 + [[ -n ${verbose} ]] && echo "- First, making a debug entry." + if [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] + then + declare -x debugtitle="_with_debugging" + else + declare -x debugtitle=" with debugging" + fi + declare -x debugargs="${DEBUGARG}" + shift + else + [[ -n ${verbose} ] && echo "- Making a normal entry." + fi + $(eval $grubby $@) + export -n debugargs + export -n debugtitle + unset debugargs + unset debugtitle +} + +set_title() +{ + if [[ -n ${banner} ]] + then + if [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] + then + title=$(echo ${banner} | sed 's/ /_/g') + else + title="${banner} [ ${version} ]" + fi + elif [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] + then + title=$(echo ${version} | sed 's/ /_/g') + elif [ -f /etc/os-release ] + then + title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" + elif [ -f /etc/mageversion ] + then + title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" + else + title="Magellan Linux [ ${version} ]" + fi +} + install() { # XXX kernel should be able to be specified also (or work right on ia64) @@ -191,12 +241,19 @@ fi DEVTREE="" - if [[ x${devtreefile} != x ]] && [ -f "${devtreefile}" ] + if [[ -n ${devtreefile} ]] && [ -f ${devtreefile} ] then [[ -n ${verbose} ]] && echo "found ${devtreefile} and using it with grubby" DEVTREE="--devtree ${devtreefile}" fi + DEVTREEDIR="" + if [[ -n ${devtreedir} ]] && [ -d ${devtreedir} ] + then + [ -n ${verbose} ] && echo "found ${devtreedir} and using it with grubby" + DEVTREEDIR="--devtreedir ${devtreedir}" + fi + # FIXME: is this a good heuristic to find out if we're on iSeries? if [ -d /proc/iSeries ] then @@ -226,36 +283,20 @@ cfgLilo="" fi - if [[ -n ${banner} ]] - then - if [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] - then - title=$(echo ${banner} | sed 's/ /_/g') - else - title="${banner} [ ${version} ]" - fi - elif [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] - then - title=$(echo ${version} | sed 's/ /_/g') - elif [ -f /etc/os-release ] - then - title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi + set_title if [[ -n ${cfgGrub} ]] then [[ -n ${verbose} ]] && echo "adding ${version} to ${grubConfig}" - ${grubby} --grub -c ${grubConfig} \ - --add-kernel=${kernelImage} \ - ${INITRD} --copy-default ${makedefault} --title "${title}" \ - ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ - --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" + ARGS="--grub -c ${grubConfig} --add-kernel=${kernelImage} ${INITRD} \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + ${mbargs:+--mbargs=\"${mbargs}\"} \ + --title=\"${title}\${debugtitle}\" --copy-default \ + --args=\"root=${rootdevice} ${kernargs} \${debugargs}\" \ + --remove-kernel=\"TITLE=${title}\${debugtitle}\"" + rungrubby ${ARGS} ${makedefault} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97" fi @@ -263,12 +304,14 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2Config}" - ${grubby} --grub2 -c ${grub2Config} \ - --add-kernel=${kernelImage} \ - ${INITRD} --copy-default ${makedefault} --title "${title}" \ - ${mbkernel:+--add-multiboot="${mbkernel}"} \ - ${mbargs:+--mbargs="${mbargs}"} \ - --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" + ARGS="--grub2 -c ${grub2Config} --add-kernel=${kernelImage} ${INITRD} \ + --copy-default --title \"${title}\${debugtitle}\" \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + ${mbargs:+--mbargs=\"${mbargs}\"} \ + --args=\"root=${rootdevice} ${kernargs} \${debugargs}\" \ + --remove-kernel=\"TITLE=${title}\${debugtitle}\"" + rungrubby ${ARGS} ${makedefault} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2" fi @@ -276,12 +319,15 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ - --add-kernel=${kernelImage} ${DEVTREE} \ - ${INITRD} --copy-default ${makedefault} --title "${title}" \ - ${mbkernel:+--add-multiboot="${mbkernel}"} \ - ${mbargs:+--mbargs="${mbargs}"} \ - --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" + ARGS="--grub2 -c ${grub2EfiConfig} --efi \ + --add-kernel=${kernelImage} ${DEVTREE} ${INITRD} \ + --copy-default --title \"${title}\${debugtitle}\" \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + ${mbargs:+--mbargs=\"${mbargs}\"} \ + --args=\"root=${rootdevice} ${kernargs} \${debugargs}\" \ + --remove-kernel=\"TITLE=${title}\${debugtitle}\"" + rungrubby ${ARGS} ${makedefault} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby for grub 2 with UEFI" fi @@ -290,11 +336,14 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${liloConfig}" - ${grubby} --add-kernel=${kernelImage} ${INITRD} \ - --copy-default ${makedefault} --title "${title}" \ - ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ - --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${version}" \ - --${liloFlag} + ARGS="--${liloFlag} --add-kernel=${kernelImage} ${INITRD} \ + --copy-default --title \"${title}\${debugtitle}\" \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + ${mbargs:+--mbargs=\"${mbargs}\"} \ + --args=\"root=${rootdevice} ${kernargs} \${debugargs}\" \ + --remove-kernel=\"TITLE=${version}\"" + rungrubby ${ARGS} ${makedefault} + rungrubby --debug ${ARGS} if [[ -n ${runLilo} ]] then @@ -314,11 +363,15 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${extlinuxConfig}" - ${grubby} --extlinux -c ${extlinuxConfig} \ - --add-kernel=${kernelImage} \ - ${INITRD} --copy-default ${makedefault} --title "${title}" \ - ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ - --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" + ARGS="--extlinux -c ${extlinuxConfig} --add-kernel=${kernelImage} \ + ${DEVTREEDIR} ${DEVTREE} \ + ${INITRD} --copy-default --title \"${title}\${debugtitle}\" \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + ${mbargs:+--mbargs=\"${mbargs}\"} \ + --args=\"root=${rootdevice} ${kernargs} \${debugargs}\" \ + --remove-kernel=\"TITLE=${title}\${debugtitle}\"" + rungrubby ${ARGS} ${makedefault} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby for extlinux" fi @@ -451,6 +504,8 @@ return fi + set_title + INITRD="" if [ -f ${initrdfile} ] then @@ -463,15 +518,30 @@ fi fi + DEVTREE="" + if [[ -n ${devtreefile} ]] && [ -f ${devtreefile} ] + then + [[ -n ${verbose} ]] && echo "found ${devtreefile} and using it with grubby" + DEVTREE="--devtree ${devtreefile}" + fi + + DEVTREEDIR="" + if [[ -n ${devtreedir} ]] && [ -d ${devtreedir} ] + then + [[ -n ${verbose} ]] && echo "found ${devtreedir} and using it with grubby" + DEVTREEDIR="--devtreedir ${devtreedir}" + fi + if [[ -n ${cfgGrub} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grubConfig}" - ${grubby} --grub -c ${grubConfig} \ - --update-kernel=${kernelImage} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} \ - ${mbkernel:+--add-multiboot="${mbkernel}"} + ARGS="--grub -c ${grubConfig} --update-kernel=${kernelImage} ${INITRD} \ + ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby ${ARGS} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby" fi @@ -479,11 +549,12 @@ if [[ -n ${cfgGrub2} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2Config}" - ${grubby} --grub2 -c ${grub2Config} \ - --update-kernel=${kernelImage} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} + ARGS="--grub2 -c ${grub2Config} --update-kernel=${kernelImage} ${INITRD} \ + ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby ${ARGS} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby" fi @@ -491,11 +562,12 @@ if [[ -n ${cfgGrub2Efi} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ - --update-kernel=${kernelImage} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} + ARGS="--grub2 -c ${grub2EfiConfig} --efi --update-kernel=${kernelImage} \ + ${INITRD} ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby ${ARGS} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby" fi @@ -503,11 +575,12 @@ if [[ -n ${cfgLilo} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}" - ${grubby} --update-kernel=${kernelImage} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} \ - --${liloFlag} + ARGS="--${liloFlag} --update-kernel=${kernelImage} ${INITRD} \ + ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby ${ARGS} + rungrubby --debug ${ARGS} if [[ -n ${runLilo} ]] then @@ -560,11 +633,12 @@ if [[ -n ${cfgExtlinux} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${extlinuxConfig}" - ${grubby} --extlinux -c ${extlinuxConfig} \ - --update-kernel=${kernelImage} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} + ARGS="--extlinux -c ${extlinuxConfig} --update-kernel=${kernelImage} \ + ${DEVTREE} ${DEVTREEDIR} ${INITRD} ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby ${ARGS} + rungrubby --debug ${ARGS} else [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby" fi @@ -610,6 +684,14 @@ fi } +# kernel image for 2.4 is kernel +if [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] +then + if [[ ${kernelmajor} = 2.4 ]] + then + kernelName=kernel + fi +fi while [ $# -gt 0 ] do @@ -632,6 +714,16 @@ fi ;; + --devtreedir*) + if [[ $1 == --devtreedir\=* ]] + then + devtreedir=${1#--devtreedir=} + else + devtreedir=$2 + shift + fi + ;; + --dracut) dracut=--dracut ;; @@ -747,6 +839,16 @@ fi ;; + --kernel-name*) + if [[ $1 == --kernel-name\=* ]] + then + kernelName=${1#--kernel-name=} + else + kernelName="$2" + shift + fi + ;; + -v) verbose=-v ;; @@ -785,15 +887,6 @@ kernelmajor=$(echo ${kernel} | cut -d . -f 1,2) -# kernel image for 2.4 is kernel -if [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] -then - if [[ ${kernelmajor} = 2.4 ]] - then - kernelName=kernel - fi -fi - [[ ${kernelImage} ]] || kernelImage="${bootPrefix}/${kernelName}-${version}" # set the initrd file based on arch; ia64 is the only currently known oddball @@ -814,57 +907,49 @@ fi [[ -n ${verbose} ]] && echo "initrdfile is ${initrdfile}" -# add dracut i18n, keyboard and plymouth kernel args if requested -if [[ -n ${dracut} ]] || [[ -n ${adddracutargs} ]] +if [[ ${ARCH} =~ armv[5|7].*l ]] then - if [ -r /etc/vconsole.conf ] + if [[ -z ${SHIPSDTB} ]] || [[ ${SHIPSDTB} != yes ]] then - . /etc/vconsole.conf - - for i in SYSFONT SYSFONTACM UNIMAP KEYTABLE - do - val=$(eval echo \$$i) - [[ -n ${val} ]] && kernargs="${kernargs} ${i}=${val}" - done - else - if [ -r /etc/conf.d/consolefont ] + if [[ -n ${dtbfile} ]] && [ -f ${bootPrefix}/dtb-${version}/${dtbfile} ] then - . /etc/conf.d/consolefont - - if [[ -n ${CONSOLEFONT} ]] - then - kernargs="${kernargs} SYSFONT=${CONSOLEFONT}" - fi - fi - - if [ -r /etc/conf.d/keymap ] + devtreefile="${bootPrefix}/dtb-${version}/${dtbfile}" + [[ -n ${verbose} ]] && echo "devtreefile is ${devtreefile}" + elif [ -d ${bootPrefix}/dtb-${version}/ ] then - . /etc/conf.d/keymap - - if [[ -n ${KEYMAP} ]] - then - kernargs="${kernargs} KEYTABLE=${KEYMAP}" - fi + devtreedir="${bootPrefix}/dtb-${version}/" + [[ -n ${verbose} ]] && echo "devtreedir is ${devtreedir}" fi fi +fi +[[ -n ${verbose} ]] && echo "devtreedir is ${devtreedir}" - if [ -r /etc/locale.conf ] - then - . /etc/locale.conf +# add dracut kernel args if requested +if [[ -n ${dracut} ]] && [[ -n ${adddracutargs} ]] + [ -r /etc/vconsole.conf ] && . /etc/vconsole.conf + [ -r /etc/locale.conf ] && . /etc/locale.conf - if [[ -n ${LANG} ]] - then - kernargs="${kernargs} LANG=${LANG}" - fi - fi + while read opt rd_opt + do + [ -n "${!opt}" ] && kernargs="$kernargs $rd_opt=\"${!opt}\"" + done <<< 'KEYMAP rd.vconsole.keymap + FONT rd.vconsole.font + FONT_MAP rd.vconsole.font.map + FONT_UNIMAP rd.vconsole.font.unimap + UNICODE rd.vconsole.font.unicode + EXT_KEYMAP rd.vconsole.keymap.ext + LANG rd.locale.LANG + LC_ALL rd.locale.LC_ALL' fi # set this as the default if we have the package and it matches -if [[ ${mode} = --install ]] && [[ ${UPDATEDEFAULT} = yes ]] && [[ -n ${package} ]] && - [[ -n ${DEFAULTKERNEL} ]] && [[ ${package} = ${DEFAULTKERNEL} ]] +if [[ ${mode} = --install ]] && [[ ${UPDATEDEFAULT} = yes ]] && [[ -n ${package} ]] && [[ -n ${DEFAULTKERNEL} ]] then - makedefault="--make-default" - [[ -n ${verbose} ]] && echo "making it the default based on config" + if [[ ${package} = ${DEFAULTKERNEL} ]] || [[ ${package}-core = ${DEFAULTKERNEL} ]] + then + makedefault="--make-default" + [[ -n ${verbose} ]] && echo "making it the default based on config" + fi fi if [[ ${moddep} = make ]] @@ -949,4 +1034,13 @@ # if we mounted the U-Boot directory, unmount it. [[ -n ${mounted} ]] && umount ${ubootDir} +# make sure changes make it to the disk. +# if /boot is a mountpoint, force the meta data on disk +# to by-pass writeback delay. +# PPC64LE-only to deal with Petitboot issues +if [[ ${ARCH} = ppc64le ]] +then + sync && mountpoint -q /boot && fsfreeze -f /boot && fsfreeze -u /boot +fi + exit 0