Magellan Linux

Annotation of /tags/grubby-7_0_17/new-kernel-pkg

Parent Directory Parent Directory | Revision Log Revision Log


Revision 923 - (hide annotations) (download)
Wed Oct 28 12:02:45 2009 UTC (14 years, 6 months ago) by niro
Original Path: trunk/mkinitrd-magellan/grubby/new-kernel-pkg
File size: 11611 byte(s)
-pulled in new version from fedora (7.0.8) with update support
-removed dracut and fedara specific stuff
-fixed to work with magellan

1 niro 532 #!/bin/bash
2     #
3 niro 923 # new-kernel-pkg
4 niro 532 # Invoked upon installation or removal of a kernel package, the following
5     # tasks are/can be done here:
6     # creation/removal of initrd
7     # run of depmod/removal of depmod generated files
8     # addition/removal of kernel images from grub/lilo configuration (via grubby)
9     #
10 niro 923 # Copyright 2002-2008 Red Hat, Inc. All rights reserved.
11 niro 532 # modified for Magellan-Linux by Niels Rogalla <niro@magellan-linux.de>
12     #
13 niro 923 # This program is free software; you can redistribute it and/or modify
14     # it under the terms of the GNU General Public License as published by
15     # the Free Software Foundation; either version 2 of the License, or
16     # (at your option) any later version.
17     #
18     # This program is distributed in the hope that it will be useful,
19     # but WITHOUT ANY WARRANTY; without even the implied warranty of
20     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     # GNU General Public License for more details.
22     #
23     # You should have received a copy of the GNU General Public License
24     # along with this program. If not, see <http://www.gnu.org/licenses/>.
25     #
26 niro 532
27     PATH=/sbin:/bin:$PATH
28    
29     lilo=/sbin/lilo
30    
31     # some defaults that are sane for most arches
32     kernelName=kernel
33    
34     if [ -x ./grubby ]; then
35     grubby=./grubby
36     else
37     grubby=/sbin/grubby
38     fi
39    
40     [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
41    
42     cfgGrub=""
43     cfgLilo=""
44     runLilo=""
45     grubConfig=""
46    
47     ARCH=$(uname -m)
48    
49     if [ $ARCH = 'ia64' ]; then
50     liloConfig=/boot/efi/EFI/redhat/elilo.conf
51     bootPrefix=/boot/efi/EFI/redhat
52     liloFlag=elilo
53     isx86=""
54     elif [ $ARCH = 'ppc64' -o $ARCH = 'ppc' ]; then
55     liloConfig=/etc/yaboot.conf
56     bootPrefix=/boot
57     lilo=/sbin/ybin
58     liloFlag=yaboot
59     runLilo="yes"
60     isx86=""
61     elif [ $ARCH = 'sparc' -o $ARCH = 'sparc64' ]; then
62     liloConfig=/etc/silo.conf
63     bootPrefix=/boot
64     liloFlag=silo
65     lilo=/sbin/silo
66     isx86=""
67     elif [ $ARCH = 's390' -o $ARCH = 's390x' ]; then
68     liloConfig=/etc/zipl.conf
69     bootPrefix=/boot
70     liloFlag=zipl
71     lilo=/sbin/zipl
72     runLilo="yes"
73     isx86=""
74     else
75     # this leaves i?86 and x86_64
76     liloConfig=/etc/lilo.conf
77     grubConfig=/boot/grub/grub.conf
78     bootPrefix=/boot
79     liloFlag=lilo
80     isx86="yes"
81     fi
82    
83     mode=""
84     version=""
85     initrd=""
86     initrdfile=""
87     moddep=""
88     verbose=""
89     makedefault=""
90     package=""
91     mbkernel=""
92     mbargs=""
93    
94     usage() {
95     echo "Usage: `basename $0` [-v] [--mkinitrd] [--rminitrd]" >&2
96     echo " [--initrdfile=<initrd-image>] [--depmod] [--rmmoddep]" >&2
97 niro 923 echo " [--kernel-args=<args>] [--remove-args=<args>]" >&2
98     echo " [--banner=<banner>] [--multiboot=multiboot]" >&2
99     echo " [--mbargs=mbargs] [--make-default]" >&2
100     echo " <--install | --remove | --update> <kernel-version>" >&2
101 niro 532 echo " (ex: `basename $0` --mkinitrd --depmod --install 2.4.7-2)" >&2
102     exit 1
103     }
104    
105     install() {
106     # XXX kernel should be able to be specified also (or work right on ia64)
107     if [ ! -f $bootPrefix/$kernelName-$version ] ; then
108     [ -n "$verbose" ] && echo "kernel for $version does not exist, not running grubby"
109     return
110     fi
111 niro 923
112 niro 532 INITRD=""
113     if [ -f $initrdfile ]; then
114     [ -n "$verbose" ] && echo "found $initrdfile and using it with grubby"
115     INITRD="--initrd $initrdfile"
116     fi
117    
118     # FIXME: is this a good heuristic to find out if we're on iSeries?
119     if [ -d /proc/iSeries ]; then
120     [ -n "$verbose" ] && echo "On an iSeries, just making img file"
121     if [ -z $initrdfile ]; then
122     [ -n "$verbose" ] && echo "No initrd, just adding system map"
123     /sbin/addSystemMap $bootPrefix/System.map-$version $bootPrefix/$kernelName-$version $bootPrefix/vmlinitrd-$version
124     else
125     /sbin/addSystemMap $bootPrefix/System.map-$version $bootPrefix/$kernelName-$version $bootPrefix/vmlinux.sm-$version
126     /sbin/addRamDisk $initrdfile $bootPrefix/System.map-$version $bootPrefix/vmlinux.sm-$version $bootPrefix/vmlinitrd-$version 2>/dev/null
127     rm $bootPrefix/vmlinux.sm-$version
128     fi
129     return
130     fi
131    
132 niro 923 # get the root filesystem to use
133 niro 532 rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab)
134    
135 niro 923 if [ -n "$mbkernel" -a -n "$cfgLilo" -a "$liloFlag" != "elilo" ]; then
136 niro 532 [ -n "$verbose" ] && echo "multiboot specified, not updating lilo.conf"
137     cfgLilo=""
138     fi
139    
140     if [ -n "$cfgGrub" ]; then
141     [ -n "$verbose" ] && echo "adding $version to $grubConfig"
142    
143     if [ -n "$banner" ]; then
144     title="$banner ($version)"
145     elif [ -f /etc/mageversion ]; then
146 niro 923 title="Magellan Linux $(< /etc/mageversion) ($version)"
147 niro 532 else
148     title="Magellan Linux ($version)"
149     fi
150 niro 923 $grubby --add-kernel=$bootPrefix/$kernelName-$version \
151     $INITRD --copy-default $makedefault --title "$title" \
152     ${mbkernel:+--add-multiboot="$mbkernel"} ${mbargs:+--mbargs="$mbargs"} \
153     --args="root=$rootdevice $kernargs" --remove-kernel="TITLE=$title"
154 niro 532 else
155     [ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
156     fi
157    
158     if [ -n "$cfgLilo" ]; then
159     [ -n "$verbose" ] && echo "adding $version to $liloConfig"
160    
161 niro 923 $grubby --add-kernel=$bootPrefix/$kernelName-$version $INITRD \
162     --copy-default $makedefault --title $version \
163     ${mbkernel:+--add-multiboot="$mbkernel"} ${mbargs:+--mbargs="$mbargs"} \
164     --args="root=$rootdevice $kernargs" --remove-kernel="TITLE=$version" \
165     --$liloFlag
166 niro 532
167     if [ -n "$runLilo" ]; then
168     [ -n "$verbose" ] && echo "running $lilo"
169     if [ ! -x $lilo ] ; then
170     [ -n "$verbose" ] && echo "$lilo does not exist"
171     else
172     $lilo > /dev/null
173     fi
174     fi
175     else
176     [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
177     fi
178    
179     }
180    
181     remove() {
182     # FIXME: is this a good heuristic to find out if we're on iSeries?
183     if [ -d /proc/iSeries ]; then
184     [ -n "$verbose" ] && echo "On an iSeries, remove img file"
185     rm -f $bootPrefix/$kernelName-$version.img 2>/dev/null
186     return
187     fi
188    
189     if [ -n "$cfgGrub" ]; then
190     [ -n "$verbose" ] && echo "removing $version from $grubConfig"
191 niro 923 $grubby --remove-kernel=$bootPrefix/$kernelName-$version
192 niro 532 else
193     [ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
194     fi
195    
196     if [ -n "$cfgLilo" ]; then
197     [ -n "$verbose" ] && echo "removing $version from $liloConfig"
198 niro 923 $grubby --remove-kernel=$bootPrefix/$kernelName-$version \
199 niro 532 --$liloFlag
200    
201     if [ -n "$runLilo" ]; then
202     [ -n "$verbose" ] && echo "running $lilo"
203     if [ ! -x $lilo ] ; then
204     [ -n "$verbose" ] && echo "$lilo does not exist"
205     else
206     $lilo > /dev/null
207     fi
208     fi
209     else
210     [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
211     fi
212     }
213    
214 niro 923 update() {
215     if [ -n "$cfgGrub" ]; then
216     [ -n "$verbose" ] && echo "updating $version from $grubConfig"
217     $grubby --update-kernel=$bootPrefix/$kernelName-$version \
218     ${kernargs:+--args="$kernargs"} \
219     ${removeargs:+--remove-args="$removeargs"}
220     else
221     [ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
222     fi
223    
224     if [ -n "$cfgLilo" ]; then
225     [ -n "$verbose" ] && echo "updating $version from $liloConfig"
226     $grubby --update-kernel=$bootPrefix/$kernelName-$version \
227     ${kernargs:+--args="$kernargs"} \
228     ${removeargs:+--remove-args="$removeargs"} \
229     --$liloFlag
230    
231     if [ -n "$runLilo" ]; then
232     [ -n "$verbose" ] && echo "running $lilo"
233     if [ ! -x $lilo ] ; then
234     [ -n "$verbose" ] && echo "$lilo does not exist"
235     else
236     $lilo > /dev/null
237     fi
238     fi
239     else
240     [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
241     fi
242     }
243    
244 niro 532 mkinitrd() {
245     [ -n "$verbose" ] && echo "creating initrd $initrdfile using $version"
246     /sbin/mkinitrd --allow-missing -f $initrdfile $version
247     rc=$?
248     if [ $rc != 0 ]; then
249     echo "mkinitrd failed" >&2
250     exit 1
251     fi
252     }
253    
254     rminitrd() {
255     [ -n "$verbose" ] && echo "removing initrd $initrdfile"
256     [ -f $initrdfile ] && rm -f $initrdfile
257     }
258    
259     doDepmod() {
260     [ -n "$verbose" ] && echo "running depmod for $version"
261     depmod -ae -F /boot/System.map-$version $version
262     }
263    
264     doRmmoddep() {
265     [ -n "$verbose" ] && echo "removing modules.dep info for $version"
266     [ -d /lib/modules/$version ] && rm -f /lib/modules/$version/modules.*
267     }
268    
269    
270     while [ $# -gt 0 ]; do
271     case $1 in
272     --mkinitrd)
273     initrd="make"
274     ;;
275    
276     --rminitrd)
277     initrd="remove"
278     ;;
279    
280     --initrdfile*)
281     if echo $1 | grep '=' >/dev/null ; then
282     initrdfile=`echo $1 | sed 's/^--initrdfile=//'`
283     else
284     initrdfile=$2
285     shift
286     fi
287     ;;
288    
289     --kernel-args*)
290     if echo $1 | grep '=' >/dev/null ; then
291     kernargs=`echo $1 | sed 's/^--kernel-args=//'`
292     else
293     kernargs=$2
294     shift
295     fi
296     ;;
297    
298 niro 923 --remove-args*)
299     if echo $1 | grep '=' >/dev/null ; then
300     removeargs=`echo $1 | sed 's/^--remove-args=//'`
301     else
302     removeargs=$2
303     shift
304     fi
305     ;;
306    
307 niro 532 --banner*)
308     if echo $1 | grep '=' >/dev/null ; then
309     banner=`echo $1 | sed 's/^--banner=//'`
310     else
311     banner=$2
312     shift
313     fi
314     ;;
315    
316     --multiboot*)
317     if echo $1 |grep '=' >/dev/null; then
318     mbkernel=`echo $1 | sed 's/^--multiboot=//'`
319     else
320     # can't really support having an optional second arg here
321     # sorry!
322     mbkernel="/boot/xen.gz"
323     fi
324     ;;
325    
326     --mbargs*)
327     if echo $1 |grep '=' >/dev/null; then
328     mbargs=`echo $1 | sed 's/^--mbargs=//'`
329     else
330 niro 923 mbargs="$2"
331 niro 532 shift
332     fi
333     ;;
334    
335     --depmod)
336     moddep="make"
337     ;;
338    
339     --rmmoddep)
340     moddep="remove"
341     ;;
342    
343     --make-default)
344     makedefault="--make-default"
345     ;;
346    
347     --package)
348     if echo $1 | grep '=' >/dev/null ; then
349     package=`echo $1 | sed 's/^--package=//'`
350     else
351     package=$2
352     shift
353 niro 923 fi
354 niro 532 ;;
355    
356     -v)
357     verbose=-v
358     ;;
359    
360     *)
361     if [ -z "$mode" ]; then
362     mode=$1
363     elif [ -z "$version" ]; then
364     version=$1
365     else
366     usage
367     fi
368     ;;
369     esac
370    
371     shift
372     done
373    
374     # make sure the mode is valid
375 niro 923 if [ "$mode" != "--install" -a "$mode" != "--remove" -a "$mode" != "--update" ] ; then
376 niro 532 usage
377     fi
378    
379     if [ -z "$version" ]; then
380     usage
381     fi
382    
383     if [ "$mode" != "--install" -a "$makedefault" ]; then
384     usage
385     fi
386    
387     kernelmajor=`echo $kernel | cut -d . -f 1,2`
388    
389     # kernel image for 2.4 is vmlinux
390     if [ $ARCH = 'ppc64' -o $ARCH = 'ppc' ]; then
391     if [ "$kernelmajor" == "2.4" ]; then
392 niro 923 kernelName=kernel
393 niro 532 fi
394     fi
395    
396    
397     # set the initrd file based on arch; ia64 is the only currently known oddball
398     if [ -z "$initrdfile" ]; then
399 niro 923 INITRD_NAME_PREFIX="initrd"
400    
401 niro 532 if [ `uname -m` = "ia64" ]; then
402 niro 923 initrdfile="/boot/efi/EFI/redhat/$INITRD_NAME_PREFIX-$version.img"
403 niro 532 else
404 niro 923 initrdfile="/boot/$INITRD_NAME_PREFIX-$version.img"
405 niro 532 fi
406    
407     fi
408     [ -n "$verbose" ] && echo "initrdfile is $initrdfile"
409    
410     # set this as the default if we have the package and it matches
411     if [ "$mode" == "--install" -a "$UPDATEDEFAULT" == "yes" -a -n "$package" -a -n "$DEFAULTKERNEL" -a "$package" == "$DEFAULTKERNEL" ]; then
412     makedefault="--make-default"
413     [ -n "$verbose" ] && echo "making it the default based on config"
414     fi
415    
416     if [ "$moddep" == "make" ]; then
417     doDepmod
418     elif [ "$moddep" == "remove" ]; then
419     doRmmoddep
420     fi
421    
422     if [ "$initrd" == "make" ]; then
423     mkinitrd
424     elif [ "$initrd" == "remove" ]; then
425     rminitrd
426     fi
427    
428     if [ ! -x $grubby ] ; then
429     [ -n "$verbose" ] && echo "$grubby does not exist"
430     exit 0
431     fi
432    
433     [ -n "$grubConfig" ] && [ -f "$grubConfig" ] && cfgGrub=1;
434     [ -n "$liloConfig" ] && [ -f "$liloConfig" ] && cfgLilo=1;
435    
436     # if we have a lilo config on an x86 box, see if the default boot loader
437     # is lilo to determine if it should be run
438     if [ -n "$cfgLilo" -a -n "$isx86" ]; then
439     runLilo=$($grubby --bootloader-probe | grep lilo)
440     fi
441    
442     if [ "$mode" == "--install" ]; then
443     install
444     elif [ "$mode" == "--remove" ]; then
445     remove
446 niro 923 elif [ "$mode" == "--update" ]; then
447     update
448 niro 532 fi
449    
450     exit 0

Properties

Name Value
svn:executable *