--- trunk/mkinitrd-magellan/grubby/new-kernel-pkg 2007/09/01 22:45:15 532 +++ trunk/mkinitrd-magellan/grubby/new-kernel-pkg 2009/10/28 12:02:45 923 @@ -1,15 +1,28 @@ #!/bin/bash # +# new-kernel-pkg # Invoked upon installation or removal of a kernel package, the following # tasks are/can be done here: # creation/removal of initrd # run of depmod/removal of depmod generated files # addition/removal of kernel images from grub/lilo configuration (via grubby) # -# Copyright (C) 2002-2005 Red Hat, Inc. -# +# Copyright 2002-2008 Red Hat, Inc. All rights reserved. # modified for Magellan-Linux by Niels Rogalla # +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# PATH=/sbin:/bin:$PATH @@ -81,9 +94,10 @@ usage() { echo "Usage: `basename $0` [-v] [--mkinitrd] [--rminitrd]" >&2 echo " [--initrdfile=] [--depmod] [--rmmoddep]" >&2 - echo " [--kernel-args=] [--banner=]" >&2 - echo " [--multiboot=multiboot] [--mbargs=mbargs]" >&2 - echo " [--make-default] <--install | --remove> " >&2 + echo " [--kernel-args=] [--remove-args=]" >&2 + echo " [--banner=] [--multiboot=multiboot]" >&2 + echo " [--mbargs=mbargs] [--make-default]" >&2 + echo " <--install | --remove | --update> " >&2 echo " (ex: `basename $0` --mkinitrd --depmod --install 2.4.7-2)" >&2 exit 1 } @@ -94,7 +108,7 @@ [ -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" @@ -115,24 +129,10 @@ return fi - # get the root filesystem to use; if it's on a label make sure it's - # been configured. if not, get the root device from mount + # get the root filesystem to use rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab) - short=$(echo $rootdevice | cut -d= -f1) - if [ "$short" == "LABEL" ]; then - label=$(echo $rootdevice | cut -d= -f2 |head -n 1) - device=$(echo "showlabels" | /sbin/nash --force --quiet | - awk '$2 == "'$label'" {print $1}') - if [ -z "$device" ]; then - rootdevice=$(mount | awk '$3 == "/" { print $1 }') - fi - fi - if [ -n "$mbkernel" ]; then - mb="--add-multiboot=$mbkernel" - if [ -n "$mbargs" ]; then - mb="$mb --mbargs=$mbargs" - fi + if [ -n "$mbkernel" -a -n "$cfgLilo" -a "$liloFlag" != "elilo" ]; then [ -n "$verbose" ] && echo "multiboot specified, not updating lilo.conf" cfgLilo="" fi @@ -143,14 +143,14 @@ if [ -n "$banner" ]; then title="$banner ($version)" elif [ -f /etc/mageversion ]; then - title="Magellan Linux $(< /etc/mageversion) ($version)" + title="Magellan Linux $(< /etc/mageversion) ($version)" else title="Magellan Linux ($version)" fi - /sbin/grubby --add-kernel=$bootPrefix/$kernelName-$version $INITRD \ - --copy-default $makedefault $mb --title "$title" \ - --args="root=$rootdevice $kernargs" \ - --remove-kernel="TITLE=$title" + $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" else [ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby" fi @@ -158,11 +158,11 @@ if [ -n "$cfgLilo" ]; then [ -n "$verbose" ] && echo "adding $version to $liloConfig" - /sbin/grubby --add-kernel=$bootPrefix/$kernelName-$version $INITRD \ - --copy-default $makedefault --title $version \ - --args="root=$rootdevice $kernargs" \ - --remove-kernel="TITLE=$version" \ - --$liloFlag + $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 if [ -n "$runLilo" ]; then [ -n "$verbose" ] && echo "running $lilo" @@ -188,14 +188,44 @@ if [ -n "$cfgGrub" ]; then [ -n "$verbose" ] && echo "removing $version from $grubConfig" - /sbin/grubby --remove-kernel=$bootPrefix/$kernelName-$version + $grubby --remove-kernel=$bootPrefix/$kernelName-$version else [ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby" fi if [ -n "$cfgLilo" ]; then [ -n "$verbose" ] && echo "removing $version from $liloConfig" - /sbin/grubby --remove-kernel=$bootPrefix/$kernelName-$version \ + $grubby --remove-kernel=$bootPrefix/$kernelName-$version \ + --$liloFlag + + if [ -n "$runLilo" ]; then + [ -n "$verbose" ] && echo "running $lilo" + if [ ! -x $lilo ] ; then + [ -n "$verbose" ] && echo "$lilo does not exist" + else + $lilo > /dev/null + fi + fi + else + [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby" + fi +} + +update() { + if [ -n "$cfgGrub" ]; then + [ -n "$verbose" ] && echo "updating $version from $grubConfig" + $grubby --update-kernel=$bootPrefix/$kernelName-$version \ + ${kernargs:+--args="$kernargs"} \ + ${removeargs:+--remove-args="$removeargs"} + else + [ -n "$verbose" ] && echo "$grubConfig 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 if [ -n "$runLilo" ]; then @@ -265,6 +295,15 @@ fi ;; + --remove-args*) + if echo $1 | grep '=' >/dev/null ; then + removeargs=`echo $1 | sed 's/^--remove-args=//'` + else + removeargs=$2 + shift + fi + ;; + --banner*) if echo $1 | grep '=' >/dev/null ; then banner=`echo $1 | sed 's/^--banner=//'` @@ -288,7 +327,7 @@ if echo $1 |grep '=' >/dev/null; then mbargs=`echo $1 | sed 's/^--mbargs=//'` else - mbargs=$2 + mbargs="$2" shift fi ;; @@ -311,7 +350,7 @@ else package=$2 shift - fi + fi ;; -v) @@ -333,7 +372,7 @@ done # make sure the mode is valid -if [ "$mode" != "--install" -a "$mode" != "--remove" ] ; then +if [ "$mode" != "--install" -a "$mode" != "--remove" -a "$mode" != "--update" ] ; then usage fi @@ -345,25 +384,24 @@ usage fi -# make sure that /dev/loop exist -[[ ! -e /dev/loop ]] && modprobe loop - kernelmajor=`echo $kernel | cut -d . -f 1,2` # kernel image for 2.4 is vmlinux if [ $ARCH = 'ppc64' -o $ARCH = 'ppc' ]; then if [ "$kernelmajor" == "2.4" ]; then - kernelName=vmlinux + kernelName=kernel fi fi # set the initrd file based on arch; ia64 is the only currently known oddball if [ -z "$initrdfile" ]; then + INITRD_NAME_PREFIX="initrd" + if [ `uname -m` = "ia64" ]; then - initrdfile="/boot/efi/EFI/redhat/initrd-$version.img" + initrdfile="/boot/efi/EFI/redhat/$INITRD_NAME_PREFIX-$version.img" else - initrdfile="/boot/initrd-$version.img" + initrdfile="/boot/$INITRD_NAME_PREFIX-$version.img" fi fi @@ -392,7 +430,6 @@ exit 0 fi - [ -n "$grubConfig" ] && [ -f "$grubConfig" ] && cfgGrub=1; [ -n "$liloConfig" ] && [ -f "$liloConfig" ] && cfgLilo=1; @@ -406,6 +443,8 @@ install elif [ "$mode" == "--remove" ]; then remove +elif [ "$mode" == "--update" ]; then + update fi exit 0