--- trunk/mkinitrd-magellan/grubby/new-kernel-pkg 2009/10/28 13:29:18 925
+++ trunk/grubby/new-kernel-pkg 2017/06/27 14:22:13 3004
@@ -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,20 @@
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=""
+ubootScript="/boot/boot.scr"
ARCH=$(uname -m)
@@ -57,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
@@ -77,10 +113,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"
@@ -89,30 +143,86 @@
mode=""
version=""
initrd=""
+dracut=""
+dracuthostonly=""
initrdfile=""
+devtreefile=""
moddep=""
verbose=""
makedefault=""
package=""
-mbkernel=""
-mbargs=""
+mbkernel="${HYPERVISOR}"
+mbargs="${HYPERVISOR_ARGS}"
+adddracutargs=""
+addplymouthinitrd=""
+DEBUGARG="systemd.log_level=debug systemd.log_target=kmsg"
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] [--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
@@ -123,6 +233,25 @@
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
+
+ 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?
@@ -132,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
@@ -142,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
@@ -150,41 +283,72 @@
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} --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"
+ [[ -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}"
+
+ 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
+ if [[ -n ${cfgGrub2Efi} ]]
+ then
+ [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2EfiConfig}"
+
+ 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
if [[ -n ${cfgLilo} ]]
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
[[ -n ${verbose} ]] && echo "running ${lilo}"
- if [ ! -x $lilo ]
+ if [ ! -x ${lilo} ]
then
[[ -n ${verbose} ]] && echo "${lilo} does not exist"
else
@@ -194,6 +358,23 @@
else
[[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby"
fi
+
+ if [[ -n ${cfgExtlinux} ]]
+ then
+ [[ -n ${verbose} ]] && echo "adding ${version} to ${extlinuxConfig}"
+
+ 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
}
remove()
@@ -202,23 +383,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
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
@@ -233,27 +430,157 @@
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 ${kernelImage} ]
+ then
+ [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby"
+ return
+ fi
+
+ set_title
+
+ 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
+
+ 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} --update-kernel=${bootPrefix}/${kernelName}-${version} \
- ${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
+ if [[ -n ${cfgGrub2} ]]
+ then
+ [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2Config}"
+ 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
+
+ if [[ -n ${cfgGrub2Efi} ]]
+ then
+ [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}"
+ 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
+
if [[ -n ${cfgLilo} ]]
then
[[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}"
- ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \
- ${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
@@ -268,12 +595,65 @@
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}"
+ 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
}
-mkinitrd()
+makeinitrd()
{
+ if [[ -n ${dracut} ]]
+ then
+ tool="dracut ${dracuthostonly} -f ${initrdfile} ${version}"
+ else
+ tool="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
@@ -297,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
@@ -312,10 +704,38 @@
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
+ ;;
+
+ --host-only)
+ dracuthostonly=-H
+ ;;
+
--initrdfile*)
- if echo $1 | grep '=' >/dev/null
+ if [[ $1 == --initrdfile\=* ]]
then
- initrdfile=$(echo $1 | sed 's/^--initrdfile=//')
+ initrdfile=${1#--initrdfile=}
else
initrdfile=$2
shift
@@ -323,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
@@ -333,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
@@ -343,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
@@ -353,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!
@@ -364,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
@@ -385,16 +805,50 @@
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
fi
;;
+ --add-dracut-args)
+ adddracutargs=--add-dracut-args
+ ;;
+
+ --add-plymouth-initrd)
+ 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
;;
@@ -433,19 +887,16 @@
kernelmajor=$(echo ${kernel} | cut -d . -f 1,2)
-# kernel image for 2.4 is vmlinux
-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} ]]
then
INITRD_NAME_PREFIX="initrd"
+ if [[ -n ${dracut} ]]
+ then
+ INITRD_NAME_PREFIX="initramfs"
+ fi
if [[ $(uname -m) = ia64 ]]
then
@@ -456,12 +907,49 @@
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 kernel args if requested
+if [[ -n ${dracut} ]] && [[ -n ${adddracutargs} ]]
+ [ -r /etc/vconsole.conf ] && . /etc/vconsole.conf
+ [ -r /etc/locale.conf ] && . /etc/locale.conf
+
+ 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 ]]
@@ -474,7 +962,7 @@
if [[ ${initrd} = make ]]
then
- mkinitrd
+ makeinitrd
elif [[ ${initrd} = remove ]]
then
rminitrd
@@ -487,7 +975,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
@@ -507,4 +1031,16 @@
update
fi
+# 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