--- trunk/grubby/new-kernel-pkg 2011/07/19 17:02:36 1431
+++ trunk/grubby/new-kernel-pkg 2014/07/16 10:54:46 2704
@@ -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
@@ -40,11 +66,19 @@
fi
[ -f /etc/conf.d/grubby ] && . /etc/conf.d/grubby
+[ -f /etc/conf.d/grubby-uboot ] && . /etc/conf.d/grubby-uboot
+cfgGrub2=""
+cfgGrub2Efi=""
cfgGrub=""
cfgLilo=""
+cfgExtlinux=""
+cfguBoot=""
runLilo=""
grubConfig=""
+grub2Config=""
+grub2EfiConfig=""
+extlinuxConfig=""
ARCH=$(uname -m)
@@ -57,6 +91,7 @@
elif [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]]
then
liloConfig=/etc/yaboot.conf
+ grub2Config=/boot/grub/grub.cfg
bootPrefix=/boot
lilo=/sbin/ybin
liloFlag=yaboot
@@ -77,10 +112,28 @@
lilo=/sbin/zipl
runLilo="yes"
isx86=""
+elif [[ ${ARCH} =~ armv[5|7].*l ]]
+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"}
+ ubootDevice=/dev/${UBOOT_DEVICE:-"mmcblk0p1"}
+ ubootDefaultImage=${UBOOT_UIMAGE:-"uImage"}
+ ubootDefaultInitrd=${UBOOT_UINITRD:-"uInitrd"}
+ ubootAddress=${UBOOT_IMGADDR:-"0x00008000"}
+ mounted=""
+ liloFlag=""
+ isx86=""
else
# this leaves i?86 and x86_64
liloConfig=/etc/lilo.conf
grubConfig=/boot/grub/grub.conf
+ grub2Config=/boot/grub/grub.cfg
+ grub2EfiConfig=/boot/grub/grub-efi.cfg
+ extlinuxConfig=/boot/extlinux/extlinux.conf
bootPrefix=/boot
liloFlag=lilo
isx86="yes"
@@ -92,12 +145,13 @@
dracut=""
dracuthostonly=""
initrdfile=""
+devtreefile=""
moddep=""
verbose=""
makedefault=""
package=""
-mbkernel=""
-mbargs=""
+mbkernel="${HYPERVISOR}"
+mbargs="${HYPERVISOR_ARGS}"
adddracutargs=""
addplymouthinitrd=""
@@ -109,25 +163,16 @@
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
}
-run_grub2()
-{
- if [ -d /boot/grub -a -x /sbin/grub-mkconfig ]
- then
- cp /boot/grub/grub.cfg /boot/grub/grub.cfg.old
- /sbin/grub-mkconfig -o /boot/grub/grub.cfg
- 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
@@ -145,6 +190,13 @@
fi
fi
+ DEVTREE=""
+ if [[ x${devtreefile} != x ]] && [ -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
@@ -152,20 +204,21 @@
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
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)
+ 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
@@ -173,33 +226,72 @@
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})"
+ title=$(echo ${banner} | sed 's/ /_/g')
else
- title="Magellan Linux (${version})"
+ title="${banner} [ ${version} ]"
fi
- ${grubby} --add-kernel=${bootPrefix}/${kernelName}-${version} \
+ 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=${kernelImage} \
${INITRD} --copy-default ${makedefault} --title "${title}" \
${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \
--args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}"
else
- [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby"
+ [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97"
+ fi
+ if [[ -n ${cfgGrub2} ]]
+ 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}"
+ else
+ [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2"
+ fi
+ if [[ -n ${cfgGrub2Efi} ]]
+ 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}"
+ else
+ [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby for grub 2 with UEFI"
fi
if [[ -n ${cfgLilo} ]]
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}
@@ -217,6 +309,19 @@
else
[[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby"
fi
+
+ if [[ -n ${cfgExtlinux} ]]
+ 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}"
+ else
+ [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby for extlinux"
+ fi
}
remove()
@@ -225,25 +330,39 @@
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
- # Run grub2's configuration update in parallel, if it is installed
- run_grub2
-
if [[ -n ${cfgGrub} ]]
then
[[ -n ${verbose} ]] && echo "removing ${version} from ${grubConfig}"
- ${grubby} --remove-kernel=${bootPrefix}/${kernelName}-${version}
+ ${grubby} --grub -c ${grubConfig} \
+ --remove-kernel=${kernelImage}
else
- [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby"
+ [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97"
+ fi
+ if [[ -n ${cfgGrub2} ]]
+ then
+ [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2Config}"
+ ${grubby} --grub2 -c ${grub2Config} \
+ --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} --efi \
+ --remove-kernel=${kernelImage}
+ else
+ [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby grub 2 with UEFI"
fi
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
@@ -258,11 +377,75 @@
else
[[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby"
fi
+
+ if [[ -n ${cfguBoot} ]]
+ then
+ [[ -n ${verbose} ]] && echo "removing ${version} from ${ubootDir}..."
+
+ if [ -f ${ubootDir}/${ubootKList} ]
+ then
+ tmpKList=$(mktemp ${ubootDir}/${ubootKList}.XXXX)
+ curversion=$(tail -n1 ${ubootDir}/${ubootKList})
+ sed "/$version$/d" ${ubootDir}/${ubootKList} > ${tmpKList}
+ newversion=$(tail -n1 ${tmpKList})
+ if [ -f ${ubootDir}/uImage-${newversion} ] && [ -f ${ubootDir}/uInitrd-${newversion} ]
+ then
+ if [[ ${curversion} != ${newversion} ]]
+ then
+ cp -fp ${ubootDir}/uImage-${newversion} ${ubootDir}/${ubootDefaultImage}
+ if [ $? -ne 0 ]
+ then
+ [[ -n ${verbose} ]] && echo "copy uImage-${newversion} error, default kernel not replaced!" && exit
+ fi
+ cp -fp ${ubootDir}/uInitrd-${newversion} ${ubootDir}/${ubootDefaultInitrd}
+ if [ $? -ne 0 ]
+ then
+ [[ -n ${verbose} ]] && echo "copy uInitrd-${newversion} error, default Initrd not replaced!" && exit
+ fi
+ fi
+
+ [[ -n ${verbose} ]] && echo "removing uImage-${version}"
+ if [ -f ${ubootDir}/uImage-${version} ]
+ then
+ rm -f ${ubootDir}/uImage-${version}
+ else
+ [[ -n ${verbose} ]] && echo "uImage-${version} did not exist!"
+ fi
+
+ [[ -n ${verbose} ]] && echo "removing uInitrd-${version}"
+ if [ -f ${ubootDir}/uInitrd-${version} ]
+ then
+ rm -f ${ubootDir}/uInitrd-${version}
+ else
+ [[ -n ${verbose} ]] && echo "uInitrd-${version} did not exist!"
+ 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}
+ fi
+ else
+ [[ -n ${verbose} ]] && echo "No previous kernel version. U-Boot images not removed!"
+ fi
+ else
+ [[ -n ${verbose} ]] && echo "${ubootScript} does not exist, not modifying ${ubootDir}"
+ fi
+
+ if [[ -n ${cfgExtlinux} ]]
+ then
+ [[ -n ${verbose} ]] && echo "removing ${version} from ${extlinuxConfig}"
+ ${grubby} --extlinux -c ${extlinuxConfig} \
+ --remove-kernel=${kernelImage}
+ else
+ [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby for extlinux"
+ fi
}
update()
{
- if [ ! -f ${bootPrefix}/${kernelName}-${version} ]
+ if [ ! -f ${kernelImage} ]
then
[[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby"
return
@@ -280,24 +463,47 @@
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} \
+ ${grubby} --grub -c ${grubConfig} \
+ --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
+ 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}"}
+ else
+ [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby"
+ fi
+
+ 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}"}
+ else
+ [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby"
+ fi
+
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}"} \
@@ -316,15 +522,61 @@
else
[[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby"
fi
+
+ if [[ -n ${cfguBoot} ]]
+ then
+ [[ -n ${verbose} ]] && echo "adding $version to ${ubootDir}..."
+
+ [[ -n ${verbose} ]] && echo "creating uImage-${version}"
+ mkimage -A arm -O linux -T kernel -C none -a ${ubootAddress} \
+ -e ${ubootAddress} -n ${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 \
+ -n initramfs -d ${initrdfile} ${ubootDir}/uInitrd-${version}
+
+ if [ -f ${ubootDir}/uImage-${version} ] && [ -f ${ubootDir}/uInitrd-${version} ]
+ then
+ cp -fp ${ubootDir}/uImage-${version} ${ubootDir}/${ubootDefaultImage}
+ if [ $? -ne 0 ]
+ then
+ [[ -n ${verbose} ]] && echo "copy uImage-${version} error, kernel not installed!" && exit
+ fi
+ cp -fp ${ubootDir}/uInitrd-${version} ${ubootDir}/${ubootDefaultInitrd}
+ if [ $? -ne 0 ]
+ then
+ [[ -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
+ else
+ [[ -n ${verbose} ]] && echo "${ubootScript} does not exist, not setting up ${ubootDir}"
+ fi
+
+ 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}"}
+ else
+ [[ -n ${verbose} ]] && echo "${extlinuxConfig} does not exist, not running grubby"
+ fi
}
-mkinitrd()
+makeinitrd()
{
if [[ -n ${dracut} ]]
then
- tool="/sbin/dracut ${dracuthostonly} -f ${initrdfile} ${version}"
+ tool="dracut ${dracuthostonly} -f ${initrdfile} ${version}"
else
- tool="/sbin/mkinitrd --allow-missing -f ${initrdfile} ${version}"
+ tool="mkinitrd --allow-missing -f ${initrdfile} ${version}"
fi
[[ -n ${verbose} ]] && echo "creating initrd ${initrdfile} using ${version}"
${tool}
@@ -351,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
}
@@ -366,6 +622,16 @@
initrd="remove"
;;
+ --devtree*)
+ if [[ $1 == --devtree\=* ]]
+ then
+ devtreefile="${1#--devtreefile=}"
+ else
+ devtreefile="$2"
+ shift
+ fi
+ ;;
+
--dracut)
dracut=--dracut
;;
@@ -375,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
@@ -385,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
@@ -395,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
@@ -405,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
@@ -415,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!
@@ -426,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
@@ -447,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
@@ -465,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
;;
@@ -512,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
@@ -533,17 +817,45 @@
# 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
@@ -565,7 +877,7 @@
if [[ ${initrd} = make ]]
then
- mkinitrd
+ makeinitrd
elif [[ ${initrd} = remove ]]
then
rminitrd
@@ -578,7 +890,43 @@
fi
[[ -n ${grubConfig} ]] && [ -f ${grubConfig} ] && cfgGrub=1
+[[ -n ${grub2Config} ]] && [ -f ${grub2Config} ] && cfgGrub2=1
+[[ -n ${grub2EfiConfig} ]] && [ -f ${grub2EfiConfig} ] && cfgGrub2Efi=1
[[ -n ${liloConfig} ]] && [ -f ${liloConfig} ] && cfgLilo=1
+[[ -n ${extlinuxConfig} ]] && [ -f ${extlinuxConfig} ] && cfgExtlinux=1
+
+# if we have a U-Boot directory, but no boot script, check if the directory
+# is mounted. If not, mount it, and then check if a boot script exists.
+if [[ -n ${ubootDir} ]]
+then
+ if [ -f ${ubootScript} ]
+ then
+ cfguBoot=1
+ else
+ mountEntry=$(mount | grep ${ubootDir})
+ if [[ -z ${mountEntry} ]]
+ then
+ mount ${ubootDevice} ${ubootDir}
+ mounted=1
+ fi
+ [ -f ${ubootScript} ] && cfguBoot=1
+ 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
@@ -598,4 +946,7 @@
update
fi
+# if we mounted the U-Boot directory, unmount it.
+[[ -n ${mounted} ]] && umount ${ubootDir}
+
exit 0