--- trunk/mkinitrd-magellan/grubby/new-kernel-pkg 2009/10/28 13:26:45 924 +++ trunk/grubby/new-kernel-pkg 2011/06/03 20:56:30 1334 @@ -39,7 +39,7 @@ grubby=/sbin/grubby fi -[ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel +[ -f /etc/conf.d/grubby ] && . /etc/conf.d/grubby cfgGrub="" cfgLilo="" @@ -89,6 +89,8 @@ mode="" version="" initrd="" +dracut="" +dracuthostonly="" initrdfile="" moddep="" verbose="" @@ -96,19 +98,32 @@ package="" mbkernel="" mbargs="" +adddracutargs="" +addplymouthinitrd="" usage() { - echo "Usage: $(basename $0) [-v] [--mkinitrd] [--rminitrd]" >&2 + echo "Usage: $(basename $0) [-v] [--mkinitrd] [--rminitrd] [--dracut]" >&2 echo " [--initrdfile=] [--depmod] [--rmmoddep]" >&2 - echo " [--kernel-args=] [--remove-args=]" >&2 + echo " [--kernel-args=] [--remove-args=]" >&2 echo " [--banner=] [--multiboot=multiboot]" >&2 - echo " [--mbargs=mbargs] [--make-default]" >&2 + echo " [--mbargs=mbargs] [--make-default] [--add-dracut-args]" >&2 + echo " [--add-plymouth-initrd]" >&2 + echo " [--host-only]" >&2 echo " <--install | --remove | --update> " >&2 echo " (ex: $(basename $0) --mkinitrd --depmod --install 2.4.7-2)" >&2 exit 1 } +run_grub2() +{ + if [ -d /boot/grub2 -a -x /sbin/grub2-mkconfig ] + then + cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.old + /sbin/grub2-mkconfig -o /boot/grub2/grub.cfg + fi +} + install() { # XXX kernel should be able to be specified also (or work right on ia64) @@ -123,6 +138,11 @@ then [[ -n ${verbose} ]] && echo "found ${initrdfile} and using it with grubby" INITRD="--initrd ${initrdfile}" + + if [[ -n ${addplymouthinitrd} ]] + then + INITRD="${INITRD} --extra-initrd ${bootPrefix}/initrd-plymouth.img" + fi fi # FIXME: is this a good heuristic to find out if we're on iSeries? @@ -141,6 +161,9 @@ return fi + # Run grub2's configuration update in parallel, if it is installed + run_grub2 + # get the root filesystem to use rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab) @@ -184,7 +207,7 @@ if [[ -n ${runLilo} ]] then [[ -n ${verbose} ]] && echo "running ${lilo}" - if [ ! -x $lilo ] + if [ ! -x ${lilo} ] then [[ -n ${verbose} ]] && echo "${lilo} does not exist" else @@ -206,6 +229,9 @@ return fi + # Run grub2's configuration update in parallel, if it is installed + run_grub2 + if [[ -n ${cfgGrub} ]] then [[ -n ${verbose} ]] && echo "removing ${version} from ${grubConfig}" @@ -217,8 +243,7 @@ if [[ -n ${cfgLilo} ]] then [[ -n ${verbose} ]] && echo "removing ${version} from ${liloConfig}" - ${grubby} --remove-kernel=${bootPrefix}/${kernelName}-${version} \ - --${liloFlag} + ${grubby} --remove-kernel=${bootPrefix}/${kernelName}-${version} --${liloFlag} if [[ -n ${runLilo} ]] then @@ -237,10 +262,32 @@ update() { + if [ ! -f ${bootPrefix}/${kernelName}-${version} ] + then + [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" + return + fi + + INITRD="" + if [ -f ${initrdfile} ] + then + [[ -n ${verbose} ]] && echo "found ${initrdfile} and using it with grubby" + INITRD="--initrd ${initrdfile}" + + if [[ -n ${addplymouthinitrd} ]] + then + INITRD="${INITRD} --extra-initrd ${bootPrefix}/initrd-plymouth.img" + fi + fi + + # Run grub2's configuration update in parallel, if it is installed + run_grub2 + if [[ -n ${cfgGrub} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grubConfig}" ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \ + ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} else @@ -251,6 +298,7 @@ then [[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}" ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \ + ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ ${removeargs:+--remove-args="${removeargs}"} \ --${liloFlag} @@ -272,8 +320,14 @@ mkinitrd() { + if [[ -n ${dracut} ]] + then + tool="/sbin/dracut ${dracuthostonly} -f ${initrdfile} ${version}" + else + tool="/sbin/mkinitrd --allow-missing -f ${initrdfile} ${version}" + fi [[ -n ${verbose} ]] && echo "creating initrd ${initrdfile} using ${version}" - /sbin/mkinitrd --allow-missing -f ${initrdfile} ${version} + ${tool} rc=$? if [ ${rc} != 0 ] then @@ -312,6 +366,14 @@ initrd="remove" ;; + --dracut) + dracut=--dracut + ;; + + --host-only) + dracuthostonly=-H + ;; + --initrdfile*) if echo $1 | grep '=' >/dev/null then @@ -335,7 +397,7 @@ --remove-args*) if echo $1 | grep '=' >/dev/null then - removeargs=$(echo $1 | sed 's/^--remove-args=//') + removeargs=$(echo $1 | sed 's/^--remove-args=//') else removeargs=$2 shift @@ -395,6 +457,14 @@ fi ;; + --add-dracut-args) + adddracutargs=--add-dracut-args + ;; + + --add-plymouth-initrd) + addplymouthinitrd=--add-plymouth-initrd + ;; + -v) verbose=-v ;; @@ -433,7 +503,7 @@ kernelmajor=$(echo ${kernel} | cut -d . -f 1,2) -# kernel image for 2.4 is vmlinux +# kernel image for 2.4 is kernel if [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] then if [[ ${kernelmajor} = 2.4 ]] @@ -446,6 +516,10 @@ if [[ -z ${initrdfile} ]] then INITRD_NAME_PREFIX="initrd" + if [[ -n ${dracut} ]] + then + INITRD_NAME_PREFIX="initramfs" + fi if [[ $(uname -m) = ia64 ]] then @@ -456,6 +530,23 @@ fi [[ -n ${verbose} ]] && echo "initrdfile is ${initrdfile}" +# 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} ]] + then + kernargs="${kernargs} KEYTABLE=${KEYMAP}" + fi + + if [[ -n ${CONSOLEFONT} ]] + then + kernargs="${kernargs} SYSFONT=${CONSOLEFONT}" + 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} ]]