Contents of /trunk/grubby/new-kernel-pkg
Parent Directory | Revision Log
Revision 923 -
(show annotations)
(download)
Wed Oct 28 12:02:45 2009 UTC (14 years, 11 months ago) by niro
Original Path: trunk/mkinitrd-magellan/grubby/new-kernel-pkg
File size: 11611 byte(s)
Wed Oct 28 12:02:45 2009 UTC (14 years, 11 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 | * |