--- trunk/grubby/new-kernel-pkg 2012/03/03 15:22:47 1770 +++ trunk/grubby/new-kernel-pkg 2016/06/30 10:35:55 2993 @@ -25,6 +25,32 @@ # along with this program. If not, see . # +read_os_release() +{ + local NAME + local ID + local Version + local Version_ID + local PRETTY_NAME + local ANSI_COLOR + local CPE_NAME + + if [[ -f /etc/os-release ]] + then + source /etc/os-release + + case $1 in + name) echo "${NAME}" ;; + id) echo "${ID}" ;; + version) echo "${Version}" ;; + version_id) echo "${Version_ID}" ;; + pretty_name) echo "${PRETTY_NAME}" ;; + ansi_color) echo "${ANSI_COLOR}" ;; + cpe_name) echo "${CPE_NAME}" ;; + esac + fi +} + PATH=/sbin:/bin:$PATH lilo=/sbin/lilo @@ -53,6 +79,7 @@ grub2Config="" grub2EfiConfig="" extlinuxConfig="" +ubootScript="/boot/boot.scr" ARCH=$(uname -m) @@ -65,6 +92,7 @@ elif [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] then liloConfig=/etc/yaboot.conf + grub2Config=/boot/grub/grub.cfg bootPrefix=/boot lilo=/sbin/ybin liloFlag=yaboot @@ -85,26 +113,21 @@ lilo=/sbin/zipl runLilo="yes" isx86="" -elif [[ ${ARCH} = armv7l ]] || [[ ${ARCH} = armv7hl ]] || [[ ${ARCH} = armv5tel ]] +elif [[ ${ARCH} =~ armv[5|7].*l ]] then - machine=$(grep "^Hardware" /proc/cpuinfo | sed 's/Hardware\s*:\s*//') liloConfig="" bootPrefix=/boot - ubootDir=${UBOOT_DIR:-"/boot/uboot"} + extlinuxConfig=$(readlink -f /etc/extlinux.conf 2>/dev/null) + ubootDir=${UBOOT_DIR:-"/boot"} ubootScript=$ubootDir/${UBOOT_SCR:-"boot.scr"} ubootKList=${UBOOT_KLIST:-"klist.txt"} ubootDevice=/dev/${UBOOT_DEVICE:-"mmcblk0p1"} ubootDefaultImage=${UBOOT_UIMAGE:-"uImage"} ubootDefaultInitrd=${UBOOT_UINITRD:-"uInitrd"} + ubootAddress=${UBOOT_IMGADDR:-"0x00008000"} mounted="" liloFlag="" isx86="" - if [[ ${machine} == "OMAP3 Beagle Board" ]] || [[ ${machine} == "OMAP4 Panda board" ]] - then - ubootAddress=0x80008000 - else - ubootAddress=0x00008000 - fi else # this leaves i?86 and x86_64 liloConfig=/etc/lilo.conf @@ -123,6 +146,7 @@ dracut="" dracuthostonly="" initrdfile="" +devtreefile="" moddep="" verbose="" makedefault="" @@ -131,6 +155,7 @@ mbargs="${HYPERVISOR_ARGS}" adddracutargs="" addplymouthinitrd="" +DEBUGARG="systemd.log_level=debug systemd.log_target=kmsg" usage() { @@ -140,16 +165,64 @@ echo " [--banner=] [--multiboot=multiboot]" >&2 echo " [--mbargs=mbargs] [--make-default] [--add-dracut-args]" >&2 echo " [--add-plymouth-initrd]" >&2 - echo " [--host-only]" >&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) - if [ ! -f ${bootPrefix}/${kernelName}-${version} ] + if [ ! -f ${kernelImage} ] then [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" return @@ -167,6 +240,20 @@ 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 + # FIXME: is this a good heuristic to find out if we're on iSeries? if [ -d /proc/iSeries ] then @@ -174,9 +261,9 @@ if [[ -z ${initrdfile} ]] then [[ -n ${verbose} ]] && echo "No initrd, just adding system map" - /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${bootPrefix}/${kernelName}-${version} ${bootPrefix}/vmlinitrd-${version} + /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${kernelImage} ${bootPrefix}/vmlinitrd-${version} else - /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${bootPrefix}/${kernelName}-${version} ${bootPrefix}/vmlinux.sm-${version} + /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${kernelImage} ${bootPrefix}/vmlinux.sm-${version} /sbin/addRamDisk ${initrdfile} ${bootPrefix}/System.map-${version} ${bootPrefix}/vmlinux.sm-${version} ${bootPrefix}/vmlinitrd-${version} 2>/dev/null rm ${bootPrefix}/vmlinux.sm-${version} fi @@ -184,7 +271,11 @@ fi # get the root filesystem to use - rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab) + rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab 2>/dev/null) + if [[ -z $rootdevice ]] + then + rootdevice=$(grep -o -P "(?<=root=)\S+" /proc/cmdline) + fi if [[ -n ${mbkernel} ]] && [[ -n ${cfgLilo} ]] && [[ ${liloFlag} != elilo ]] then @@ -192,24 +283,20 @@ cfgLilo="" fi + set_title + if [[ -n ${cfgGrub} ]] then [[ -n ${verbose} ]] && echo "adding ${version} to ${grubConfig}" - if [[ -n ${banner} ]] - then - title="${banner} [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi - ${grubby} --grub -c ${grubConfig} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} ${makedefault} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97" fi @@ -217,21 +304,14 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2Config}" - if [[ -n ${banner} ]] - then - title="${banner} [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi - ${grubby} --grub2 -c ${grub2Config} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} ${makedefault} else [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2" fi @@ -239,21 +319,15 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2EfiConfig}" - if [[ -n ${banner} ]] - then - title="${banner} [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi - ${grubby} --grub2 -c ${grub2EfiConfig} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} ${makedefault} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby for grub 2 with UEFI" fi @@ -262,11 +336,14 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${liloConfig}" - ${grubby} --add-kernel=${bootPrefix}/${kernelName}-${version} ${INITRD} \ - --copy-default ${makedefault} --title ${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} ${makedefault} if [[ -n ${runLilo} ]] then @@ -286,20 +363,15 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${extlinuxConfig}" - if [[ -n ${banner} ]] - then - title="${banner} [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi - ${grubby} --extlinux -c ${extlinuxConfig} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} ${makedefault} else [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby for extlinux" fi @@ -311,7 +383,7 @@ if [ -d /proc/iSeries ] then [[ -n ${verbose} ]] && echo "On an iSeries, remove img file" - rm -f ${bootPrefix}/${kernelName}-${version}.img 2>/dev/null + rm -f ${kernelImage}.img 2>/dev/null return fi @@ -319,7 +391,7 @@ then [[ -n ${verbose} ]] && echo "removing ${version} from ${grubConfig}" ${grubby} --grub -c ${grubConfig} \ - --remove-kernel=${bootPrefix}/${kernelName}-${version} + --remove-kernel=${kernelImage} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97" fi @@ -327,15 +399,15 @@ then [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2Config}" ${grubby} --grub2 -c ${grub2Config} \ - --remove-kernel=${bootPrefix}/${kernelName}-${version} + --remove-kernel=${kernelImage} else [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2" fi if [[ -n ${cfgGrub2Efi} ]] then [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} \ - --remove-kernel=${bootPrefix}/${kernelName}-${version} + ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ + --remove-kernel=${kernelImage} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby grub 2 with UEFI" fi @@ -343,7 +415,7 @@ if [[ -n ${cfgLilo} ]] then [[ -n ${verbose} ]] && echo "removing ${version} from ${liloConfig}" - ${grubby} --remove-kernel=${bootPrefix}/${kernelName}-${version} --${liloFlag} + ${grubby} --remove-kernel=${kernelImage} --${liloFlag} if [[ -n ${runLilo} ]] then @@ -367,7 +439,7 @@ then tmpKList=$(mktemp ${ubootDir}/${ubootKList}.XXXX) curversion=$(tail -n1 ${ubootDir}/${ubootKList}) - sed "/${version}/d" ${ubootDir}/${ubootKList} > ${tmpKList} + sed "/$version$/d" ${ubootDir}/${ubootKList} > ${tmpKList} newversion=$(tail -n1 ${tmpKList}) if [ -f ${ubootDir}/uImage-${newversion} ] && [ -f ${ubootDir}/uInitrd-${newversion} ] then @@ -402,6 +474,7 @@ fi mv ${tmpKList} ${ubootDir}/${ubootKList} + [ -x /sbin/a-b-c ] && /sbin/a-b-c else [[ -n ${verbose} ]] && echo "uImage ${newversion} does not exist!" [ -f ${tmpKList} ] && rm -f ${tmpKList} @@ -417,7 +490,7 @@ then [[ -n ${verbose} ]] && echo "removing ${version} from ${extlinuxConfig}" ${grubby} --extlinux -c ${extlinuxConfig} \ - --remove-kernel=${bootPrefix}/${kernelName}-${version} + --remove-kernel=${kernelImage} else [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby for extlinux" fi @@ -425,12 +498,14 @@ update() { - if [ ! -f ${bootPrefix}/${kernelName}-${version} ] + if [ ! -f ${kernelImage} ] then [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" return fi + set_title + INITRD="" if [ -f ${initrdfile} ] then @@ -443,14 +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=${bootPrefix}/${kernelName}-${version} \ - ${INITRD} \ - ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} + ARGS="--grub -c ${grubConfig} --update-kernel=${kernelImage} ${INITRD} \ + ${kernargs:+--args=\"${kernargs}\"} \ + ${removeargs:+--remove-args=\"${removeargs}\"} \ + ${mbkernel:+--add-multiboot=\"${mbkernel}\"} \ + --title=\"${title}\${debugtitle}\"" + rungrubby --debug ${ARGS} + rungrubby ${ARGS} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby" fi @@ -458,11 +549,12 @@ if [[ -n ${cfgGrub2} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2Config}" - ${grubby} --grub2 -c ${grub2Config} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby" fi @@ -470,11 +562,12 @@ if [[ -n ${cfgGrub2Efi} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby" fi @@ -482,11 +575,12 @@ if [[ -n ${cfgLilo} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}" - ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} if [[ -n ${runLilo} ]] then @@ -509,7 +603,7 @@ [[ -n ${verbose} ]] && echo "creating uImage-${version}" mkimage -A arm -O linux -T kernel -C none -a ${ubootAddress} \ -e ${ubootAddress} -n ${version} \ - -d ${bootPrefix}/${kernelName}-${version} ${ubootDir}/uImage-${version} + -d ${kernelImage} ${ubootDir}/uImage-${version} [[ -n ${verbose} ]] && echo "creating uInitrd-${version}" mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 \ @@ -528,6 +622,7 @@ [[ -n ${verbose} ]] && echo "copy uInitrd-${version} error, kernel not installed!" && exit fi echo ${version} >> ${ubootDir}/${ubootKList} + [ -x /sbin/a-b-c ] && /sbin/a-b-c else [[ -n ${verbose} ]] && echo "cannot make ${version} the default" fi @@ -538,11 +633,12 @@ if [[ -n ${cfgExtlinux} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${extlinuxConfig}" - ${grubby} --extlinux -c ${extlinuxConfig} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ - ${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 --debug ${ARGS} + rungrubby ${ARGS} else [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby" fi @@ -581,9 +677,21 @@ doRmmoddep() { [[ -n ${verbose} ]] && echo "removing modules.dep info for ${version}" - [ -d /lib/modules/${version} ] && rm -f /lib/modules/${version}/modules.* + if [ -d /lib/modules/${version} ] + then + rm -f /lib/modules/${version}/modules.*.bin \ + /lib/modules/${version}/modules.{alias,dep,devname,symbols,softdep} + 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 @@ -596,6 +704,26 @@ initrd="remove" ;; + --devtree*) + if [[ $1 == --devtree\=* ]] + then + devtreefile="${1#--devtreefile=}" + else + devtreefile="$2" + shift + fi + ;; + + --devtreedir*) + if [[ $1 == --devtreedir\=* ]] + then + devtreedir=${1#--devtreedir=} + else + devtreedir=$2 + shift + fi + ;; + --dracut) dracut=--dracut ;; @@ -605,9 +733,9 @@ ;; --initrdfile*) - if echo $1 | grep '=' >/dev/null + if [[ $1 == --initrdfile\=* ]] then - initrdfile=$(echo $1 | sed 's/^--initrdfile=//') + initrdfile=${1#--initrdfile=} else initrdfile=$2 shift @@ -615,9 +743,9 @@ ;; --kernel-args*) - if echo $1 | grep '=' >/dev/null + if [[ $1 == --kernel-args\=* ]] then - kernargs=$(echo $1 | sed 's/^--kernel-args=//') + kernargs=${1#--kernel-args=} else kernargs=$2 shift @@ -625,9 +753,9 @@ ;; --remove-args*) - if echo $1 | grep '=' >/dev/null + if [[ $1 == --remove-args\=* ]] then - removeargs=$(echo $1 | sed 's/^--remove-args=//') + removeargs=${1#--remove-args=} else removeargs=$2 shift @@ -635,9 +763,9 @@ ;; --banner*) - if echo $1 | grep '=' >/dev/null + if [[ $1 == --banner\=* ]] then - banner=$(echo $1 | sed 's/^--banner=//') + banner=${1#--banner=} else banner=$2 shift @@ -645,9 +773,9 @@ ;; --multiboot*) - if echo $1 |grep '=' >/dev/null + if [[ $1 == --multiboot\=* ]] then - mbkernel=$(echo $1 | sed 's/^--multiboot=//') + mbkernel=${1#--multiboot=} else # can't really support having an optional second arg here # sorry! @@ -656,9 +784,9 @@ ;; --mbargs*) - if echo $1 |grep '=' >/dev/null + if [[ $1 == --mbargs\=* ]] then - mbargs=$(echo $1 | sed 's/^--mbargs=//') + mbargs=${1#--mbargs=} else mbargs="$2" shift @@ -677,10 +805,10 @@ makedefault="--make-default" ;; - --package) - if echo $1 | grep '=' >/dev/null + --package*) + if [[ $1 == --package\=* ]] then - package=$(echo $1 | sed 's/^--package=//') + package=${1#--package=} else package=$2 shift @@ -695,6 +823,32 @@ addplymouthinitrd=--add-plymouth-initrd ;; + --kernel-image*) + if [[ $1 == --kernel-image\=* ]] + then + kernelImage=${1#--kernel-image=} + else + kernelImage="$2" + shift + fi + if ! [[ -f ${kernelImage} ]] + then + echo "Can't find kernel image '${kernelImage}'" >&2 + usage + exit 1 + fi + ;; + + --kernel-name*) + if [[ $1 == --kernel-name\=* ]] + then + kernelName=${1#--kernel-name=} + else + kernelName="$2" + shift + fi + ;; + -v) verbose=-v ;; @@ -733,14 +887,7 @@ 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 if [[ -z ${initrdfile} ]] @@ -760,29 +907,76 @@ fi [[ -n ${verbose} ]] && echo "initrdfile is ${initrdfile}" +if [[ ${ARCH} =~ armv[5|7].*l ]] +then + if [[ -z ${SHIPSDTB} ]] || [[ ${SHIPSDTB} != yes ]] + then + if [[ -n ${dtbfile} ]] && [ -f ${bootPrefix}/dtb-${version}/${dtbfile} ] + then + devtreefile="${bootPrefix}/dtb-${version}/${dtbfile}" + [[ -n ${verbose} ]] && echo "devtreefile is ${devtreefile}" + elif [ -d ${bootPrefix}/dtb-${version}/ ] + then + devtreedir="${bootPrefix}/dtb-${version}/" + [[ -n ${verbose} ]] && echo "devtreedir is ${devtreedir}" + fi + fi +fi +[[ -n ${verbose} ]] && echo "devtreedir is ${devtreedir}" + # add dracut i18n, keyboard and plymouth kernel args if requested if [[ -n ${dracut} ]] || [[ -n ${adddracutargs} ]] then - [ -r /etc/conf.d/keymap ] && . /etc/conf.d/keymap - [ -r /etc/conf.d/consolefont ] && . /etc/conf.d/consolefont - - if [[ -n ${KEYMAP} ]] + if [ -r /etc/vconsole.conf ] then - kernargs="${kernargs} KEYTABLE=${KEYMAP}" + . /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 ] + then + . /etc/conf.d/consolefont + + if [[ -n ${CONSOLEFONT} ]] + then + kernargs="${kernargs} SYSFONT=${CONSOLEFONT}" + fi + fi + + if [ -r /etc/conf.d/keymap ] + then + . /etc/conf.d/keymap + + if [[ -n ${KEYMAP} ]] + then + kernargs="${kernargs} KEYTABLE=${KEYMAP}" + fi + fi fi - if [[ -n ${CONSOLEFONT} ]] + if [ -r /etc/locale.conf ] then - kernargs="${kernargs} SYSFONT=${CONSOLEFONT}" + . /etc/locale.conf + + if [[ -n ${LANG} ]] + then + kernargs="${kernargs} LANG=${LANG}" + fi fi 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 ]] @@ -831,6 +1025,21 @@ fi fi +# if we're using U-Boot, check if the default load address should change +if [[ -n ${cfguBoot} ]] && [[ -z ${UBOOT_IMGADDR} ]] +then + [[ ${version} =~ .([^.]*)$ ]] + platform=${BASH_REMATCH[1]} + # A few platforms use an alternate kernel load address + if [[ ${platform} = omap ]] + then + ubootAddress=0x80008000 + elif [[ ${platform} = imx ]] + then + ubootAddress=0x90008000 + fi +fi + # if we have a lilo config on an x86 box, see if the default boot loader # is lilo to determine if it should be run if [[ -n ${cfgLilo} ]] && [[ -n ${isx86} ]]