--- trunk/grubby/new-kernel-pkg 2013/02/20 14:28:56 2059 +++ trunk/grubby/new-kernel-pkg 2014/07/16 10:38:09 2685 @@ -116,6 +116,7 @@ then liloConfig="" bootPrefix=/boot + extlinuxConfig=$(readlink -f /etc/extlinux.conf 2>/dev/null) ubootDir=${UBOOT_DIR:-"/boot"} ubootScript=$ubootDir/${UBOOT_SCR:-"boot.scr"} ubootKList=${UBOOT_KLIST:-"klist.txt"} @@ -144,6 +145,7 @@ dracut="" dracuthostonly="" initrdfile="" +devtreefile="" moddep="" verbose="" makedefault="" @@ -161,7 +163,7 @@ 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=]" >&2 echo " <--install | --remove | --update> " >&2 echo " (ex: $(basename $0) --mkinitrd --depmod --install 2.4.7-2)" >&2 exit 1 @@ -170,7 +172,7 @@ 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 @@ -188,6 +190,13 @@ fi fi + DEVTREE="" + if [ -f ${devtreefile} ] + then + [[ -n ${verbose} ]] && echo "found ${devtreefile} and using it with grubby" + DEVTREE="--devtree ${devtreefile}" + fi + # FIXME: is this a good heuristic to find out if we're on iSeries? if [ -d /proc/iSeries ] then @@ -195,9 +204,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 @@ -205,7 +214,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 @@ -213,24 +226,33 @@ cfgLilo="" fi - if [[ -n ${cfgGrub} ]] + if [[ -n ${banner} ]] then - [[ -n ${verbose} ]] && echo "adding ${version} to ${grubConfig}" - - if [[ -n ${banner} ]] + if [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] then - title="${banner} [ ${version} ]" - elif [ -f /etc/mageversion ] - then - title="Magellan Linux $(< /etc/mageversion) [ ${version} ]" - elif [[ $(read_os_release id) = magellan ]] - then - title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" + title=$(echo ${banner} | sed 's/ /_/g') else - title="Magellan Linux [ ${version} ]" + 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 + + if [[ -n ${cfgGrub} ]] + then + [[ -n ${verbose} ]] && echo "adding ${version} to ${grubConfig}" + ${grubby} --grub -c ${grubConfig} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ + --add-kernel=${kernelImage} \ ${INITRD} --copy-default ${makedefault} --title "${title}" \ ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" @@ -241,20 +263,8 @@ 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} ]" - elif [[ $(read_os_release id) = magellan ]] - then - title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi ${grubby} --grub2 -c ${grub2Config} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ + --add-kernel=${kernelImage} \ ${INITRD} --copy-default ${makedefault} --title "${title}" \ ${mbkernel:+--add-multiboot="${mbkernel}"} \ ${mbargs:+--mbargs="${mbargs}"} \ @@ -266,20 +276,8 @@ 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} ]" - elif [[ $(read_os_release id) = magellan ]] - then - title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ + --add-kernel=${kernelImage} \ ${INITRD} --copy-default ${makedefault} --title "${title}" \ ${mbkernel:+--add-multiboot="${mbkernel}"} \ ${mbargs:+--mbargs="${mbargs}"} \ @@ -292,8 +290,8 @@ then [[ -n ${verbose} ]] && echo "adding ${version} to ${liloConfig}" - ${grubby} --add-kernel=${bootPrefix}/${kernelName}-${version} ${INITRD} \ - --copy-default ${makedefault} --title ${version} \ + ${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} @@ -316,20 +314,8 @@ 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} ]" - elif [[ $(read_os_release id) = magellan ]] - then - title="$(read_os_release name) $(read_os_release version_id) [ ${version} ]" - else - title="Magellan Linux [ ${version} ]" - fi ${grubby} --extlinux -c ${extlinuxConfig} \ - --add-kernel=${bootPrefix}/${kernelName}-${version} \ + --add-kernel=${kernelImage} \ ${INITRD} --copy-default ${makedefault} --title "${title}" \ ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" @@ -344,7 +330,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 @@ -352,7 +338,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 @@ -360,7 +346,7 @@ 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 @@ -368,7 +354,7 @@ then [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2EfiConfig}" ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ - --remove-kernel=${bootPrefix}/${kernelName}-${version} + --remove-kernel=${kernelImage} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby grub 2 with UEFI" fi @@ -376,7 +362,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 @@ -435,6 +421,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} @@ -450,7 +437,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 @@ -458,7 +445,7 @@ update() { - if [ ! -f ${bootPrefix}/${kernelName}-${version} ] + if [ ! -f ${kernelImage} ] then [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" return @@ -480,10 +467,11 @@ then [[ -n ${verbose} ]] && echo "updating ${version} from ${grubConfig}" ${grubby} --grub -c ${grubConfig} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ + --update-kernel=${kernelImage} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ - ${removeargs:+--remove-args="${removeargs}"} + ${removeargs:+--remove-args="${removeargs}"} \ + ${mbkernel:+--add-multiboot="${mbkernel}"} else [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby" fi @@ -492,7 +480,7 @@ then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2Config}" ${grubby} --grub2 -c ${grub2Config} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ + --update-kernel=${kernelImage} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} @@ -504,7 +492,7 @@ then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}" ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ + --update-kernel=${kernelImage} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} @@ -515,7 +503,7 @@ if [[ -n ${cfgLilo} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}" - ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \ + ${grubby} --update-kernel=${kernelImage} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} \ @@ -542,7 +530,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 \ @@ -561,6 +549,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 @@ -572,7 +561,7 @@ then [[ -n ${verbose} ]] && echo "updating ${version} from ${extlinuxConfig}" ${grubby} --extlinux -c ${extlinuxConfig} \ - --update-kernel=${bootPrefix}/${kernelName}-${version} \ + --update-kernel=${kernelImage} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} @@ -614,7 +603,11 @@ 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 } @@ -629,6 +622,16 @@ initrd="remove" ;; + --devtree*) + if [[ $1 == --devtree\=* ]] + then + devtreefile="${1#--devtreefile=}" + else + devtreefile="$2" + shift + fi + ;; + --dracut) dracut=--dracut ;; @@ -638,9 +641,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 @@ -648,9 +651,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 @@ -658,9 +661,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 @@ -668,9 +671,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 @@ -678,9 +681,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! @@ -689,9 +692,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 @@ -710,10 +713,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 @@ -728,6 +731,22 @@ 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 + ;; + -v) verbose=-v ;; @@ -775,6 +794,8 @@ fi fi +[[ ${kernelImage} ]] || kernelImage="${bootPrefix}/${kernelName}-${version}" + # set the initrd file based on arch; ia64 is the only currently known oddball if [[ -z ${initrdfile} ]] then