Annotation of /trunk/grubby/new-kernel-pkg
Parent Directory | Revision Log
Revision 923 -
(hide 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 | 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 | * |