--- trunk/grubby/new-kernel-pkg 2012/02/18 00:46:32 1716 +++ trunk/grubby/new-kernel-pkg 2013/02/20 13:57:53 2051 @@ -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 @@ -65,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 @@ -85,16 +112,17 @@ lilo=/sbin/zipl runLilo="yes" isx86="" -elif [[ ${ARCH} = armv7l ]] +elif [[ ${ARCH} =~ armv[5|7].*l ]] then liloConfig="" bootPrefix=/boot - ubootDir=${UBOOT_DIR:-"/boot/uboot"} + 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="" @@ -191,12 +219,15 @@ if [[ -n ${banner} ]] then - title="${banner} (${version})" + title="${banner} [ ${version} ]" elif [ -f /etc/mageversion ] then - title="Magellan Linux $(< /etc/mageversion) (${version})" + 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})" + title="Magellan Linux [ ${version} ]" fi ${grubby} --grub -c ${grubConfig} \ --add-kernel=${bootPrefix}/${kernelName}-${version} \ @@ -212,12 +243,15 @@ if [[ -n ${banner} ]] then - title="${banner} (${version})" + title="${banner} [ ${version} ]" elif [ -f /etc/mageversion ] then - title="Magellan Linux $(< /etc/mageversion) (${version})" + 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})" + title="Magellan Linux [ ${version} ]" fi ${grubby} --grub2 -c ${grub2Config} \ --add-kernel=${bootPrefix}/${kernelName}-${version} \ @@ -234,14 +268,17 @@ if [[ -n ${banner} ]] then - title="${banner} (${version})" + title="${banner} [ ${version} ]" elif [ -f /etc/mageversion ] then - title="Magellan Linux $(< /etc/mageversion) (${version})" + 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})" + title="Magellan Linux [ ${version} ]" fi - ${grubby} --grub2 -c ${grub2EfiConfig} \ + ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ --add-kernel=${bootPrefix}/${kernelName}-${version} \ ${INITRD} --copy-default ${makedefault} --title "${title}" \ ${mbkernel:+--add-multiboot="${mbkernel}"} \ @@ -281,12 +318,15 @@ if [[ -n ${banner} ]] then - title="${banner} (${version})" + title="${banner} [ ${version} ]" elif [ -f /etc/mageversion ] then - title="Magellan Linux $(< /etc/mageversion) (${version})" + 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})" + title="Magellan Linux [ ${version} ]" fi ${grubby} --extlinux -c ${extlinuxConfig} \ --add-kernel=${bootPrefix}/${kernelName}-${version} \ @@ -327,7 +367,7 @@ if [[ -n ${cfgGrub2Efi} ]] then [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} \ + ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ --remove-kernel=${bootPrefix}/${kernelName}-${version} else [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby grub 2 with UEFI" @@ -360,7 +400,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 @@ -400,7 +440,7 @@ [ -f ${tmpKList} ] && rm -f ${tmpKList} fi else - [[ -n ${verbose} ]] && echo "No previous kernel version. uBoot images not removed!" + [[ -n ${verbose} ]] && echo "No previous kernel version. U-Boot images not removed!" fi else [[ -n ${verbose} ]] && echo "${ubootScript} does not exist, not modifying ${ubootDir}" @@ -463,7 +503,7 @@ if [[ -n ${cfgGrub2Efi} ]] then [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}" - ${grubby} --grub2 -c ${grub2EfiConfig} \ + ${grubby} --grub2 -c ${grub2EfiConfig} --efi \ --update-kernel=${bootPrefix}/${kernelName}-${version} \ ${INITRD} \ ${kernargs:+--args="${kernargs}"} \ @@ -500,8 +540,9 @@ [[ -n ${verbose} ]] && echo "adding $version to ${ubootDir}..." [[ -n ${verbose} ]] && echo "creating uImage-${version}" - mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 \ - -n ${version} -d ${bootPrefix}/${kernelName}-${version} ${ubootDir}/uImage-${version} + mkimage -A arm -O linux -T kernel -C none -a ${ubootAddress} \ + -e ${ubootAddress} -n ${version} \ + -d ${bootPrefix}/${kernelName}-${version} ${ubootDir}/uImage-${version} [[ -n ${verbose} ]] && echo "creating uInitrd-${version}" mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 \ @@ -540,13 +581,13 @@ 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} @@ -787,7 +828,7 @@ if [[ ${initrd} = make ]] then - mkinitrd + makeinitrd elif [[ ${initrd} = remove ]] then rminitrd @@ -805,17 +846,37 @@ [[ -n ${liloConfig} ]] && [ -f ${liloConfig} ] && cfgLilo=1 [[ -n ${extlinuxConfig} ]] && [ -f ${extlinuxConfig} ] && cfgExtlinux=1 -# if we have a uBoot directory, check if it is mounted. -# if not, mount it. Then check if a boot script exists. +# 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 - mountEntry=$(mount | grep ${ubootDir}) - if [[ -z ${mountEntry} ]] + if [ -f ${ubootScript} ] then - mount ${ubootDevice} ${ubootDir} - mounted=1 + 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 - [ -f ${ubootScript} ] && cfguBoot=1 fi # if we have a lilo config on an x86 box, see if the default boot loader @@ -836,4 +897,7 @@ update fi +# if we mounted the U-Boot directory, unmount it. +[[ -n ${mounted} ]] && umount ${ubootDir} + exit 0