Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 923 - (show 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 #!/bin/bash
2 #
3 # new-kernel-pkg
4 # 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 # Copyright 2002-2008 Red Hat, Inc. All rights reserved.
11 # modified for Magellan-Linux by Niels Rogalla <niro@magellan-linux.de>
12 #
13 # 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
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 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 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
112 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 # get the root filesystem to use
133 rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab)
134
135 if [ -n "$mbkernel" -a -n "$cfgLilo" -a "$liloFlag" != "elilo" ]; then
136 [ -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 title="Magellan Linux $(< /etc/mageversion) ($version)"
147 else
148 title="Magellan Linux ($version)"
149 fi
150 $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 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 $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
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 $grubby --remove-kernel=$bootPrefix/$kernelName-$version
192 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 $grubby --remove-kernel=$bootPrefix/$kernelName-$version \
199 --$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 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 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 --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 --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 mbargs="$2"
331 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 fi
354 ;;
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 if [ "$mode" != "--install" -a "$mode" != "--remove" -a "$mode" != "--update" ] ; then
376 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 kernelName=kernel
393 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 INITRD_NAME_PREFIX="initrd"
400
401 if [ `uname -m` = "ia64" ]; then
402 initrdfile="/boot/efi/EFI/redhat/$INITRD_NAME_PREFIX-$version.img"
403 else
404 initrdfile="/boot/$INITRD_NAME_PREFIX-$version.img"
405 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 elif [ "$mode" == "--update" ]; then
447 update
448 fi
449
450 exit 0

Properties

Name Value
svn:executable *