Contents of /tags/grubby-8_19/new-kernel-pkg
Parent Directory | Revision Log
Revision 1710 -
(show annotations)
(download)
Sat Feb 18 00:28:45 2012 UTC (12 years, 7 months ago) by niro
Original Path: trunk/grubby/new-kernel-pkg
File size: 20363 byte(s)
Sat Feb 18 00:28:45 2012 UTC (12 years, 7 months ago) by niro
Original Path: trunk/grubby/new-kernel-pkg
File size: 20363 byte(s)
Fix new-kernel-pkg invocation of grubby for grub (bz 725185) new-kernel-pkg did not specify --grub when it called grubby to update the kernel entry with an initrd. Grubby would then try to probe what to do and would give preference to grub2 and thus leave an incomplete grub entry. new-kernel-pkg did also not specify the grub config file explicitly to grubby as it do for the grub2 config file. That could perhaps in some situations cause grubby to do something else than new-kernel-pkg expected. Now --grub -c $grubConfig is specified explicitly in all cases.
1 | #!/bin/bash |
2 | # $Id$ |
3 | # |
4 | # new-kernel-pkg |
5 | # Invoked upon installation or removal of a kernel package, the following |
6 | # tasks are/can be done here: |
7 | # creation/removal of initrd |
8 | # run of depmod/removal of depmod generated files |
9 | # addition/removal of kernel images from grub/lilo configuration (via grubby) |
10 | # |
11 | # Copyright 2002-2008 Red Hat, Inc. All rights reserved. |
12 | # modified for Magellan-Linux by Niels Rogalla <niro@magellan-linux.de> |
13 | # |
14 | # This program is free software; you can redistribute it and/or modify |
15 | # it under the terms of the GNU General Public License as published by |
16 | # the Free Software Foundation; either version 2 of the License, or |
17 | # (at your option) any later version. |
18 | # |
19 | # This program is distributed in the hope that it will be useful, |
20 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
22 | # GNU General Public License for more details. |
23 | # |
24 | # You should have received a copy of the GNU General Public License |
25 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
26 | # |
27 | |
28 | PATH=/sbin:/bin:$PATH |
29 | |
30 | lilo=/sbin/lilo |
31 | |
32 | # some defaults that are sane for most arches |
33 | kernelName=kernel |
34 | |
35 | if [ -x ./grubby ] |
36 | then |
37 | grubby=./grubby |
38 | else |
39 | grubby=/sbin/grubby |
40 | fi |
41 | |
42 | [ -f /etc/conf.d/grubby ] && . /etc/conf.d/grubby |
43 | [ -f /etc/conf.d/grubby-uboot ] && . /etc/conf.d/grubby-uboot |
44 | |
45 | cfgGrub2="" |
46 | cfgGrub2Efi="" |
47 | cfgGrub="" |
48 | cfgLilo="" |
49 | cfguBoot="" |
50 | runLilo="" |
51 | grubConfig="" |
52 | grub2Config="" |
53 | grub2EfiConfig="" |
54 | |
55 | ARCH=$(uname -m) |
56 | |
57 | if [[ ${ARCH} = ia64 ]] |
58 | then |
59 | liloConfig=/boot/efi/EFI/redhat/elilo.conf |
60 | bootPrefix=/boot/efi/EFI/redhat |
61 | liloFlag=elilo |
62 | isx86="" |
63 | elif [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] |
64 | then |
65 | liloConfig=/etc/yaboot.conf |
66 | bootPrefix=/boot |
67 | lilo=/sbin/ybin |
68 | liloFlag=yaboot |
69 | runLilo="yes" |
70 | isx86="" |
71 | elif [[ ${ARCH} = sparc ]] || [[ ${ARCH} = sparc64 ]] |
72 | then |
73 | liloConfig=/etc/silo.conf |
74 | bootPrefix=/boot |
75 | liloFlag=silo |
76 | lilo=/sbin/silo |
77 | isx86="" |
78 | elif [[ ${ARCH} = s390 ]] || [[ ${ARCH} = s390x ]] |
79 | then |
80 | liloConfig=/etc/zipl.conf |
81 | bootPrefix=/boot |
82 | liloFlag=zipl |
83 | lilo=/sbin/zipl |
84 | runLilo="yes" |
85 | isx86="" |
86 | elif [[ ${ARCH} = armv7l ]] |
87 | then |
88 | liloConfig="" |
89 | bootPrefix=/boot |
90 | ubootDir=${UBOOT_DIR:-"/boot/uboot"} |
91 | ubootScript=$ubootDir/${UBOOT_SCR:-"boot.scr"} |
92 | ubootKList=${UBOOT_KLIST:-"klist.txt"} |
93 | ubootDevice=/dev/${UBOOT_DEVICE:-"mmcblk0p1"} |
94 | ubootDefaultImage=${UBOOT_UIMAGE:-"uImage"} |
95 | ubootDefaultInitrd=${UBOOT_UINITRD:-"uInitrd"} |
96 | mounted="" |
97 | liloFlag="" |
98 | isx86="" |
99 | else |
100 | # this leaves i?86 and x86_64 |
101 | liloConfig=/etc/lilo.conf |
102 | grubConfig=/boot/grub/grub.conf |
103 | grub2Config=/boot/grub/grub.cfg |
104 | grub2EfiConfig=/boot/grub/grub-efi.cfg |
105 | bootPrefix=/boot |
106 | liloFlag=lilo |
107 | isx86="yes" |
108 | fi |
109 | |
110 | mode="" |
111 | version="" |
112 | initrd="" |
113 | dracut="" |
114 | dracuthostonly="" |
115 | initrdfile="" |
116 | moddep="" |
117 | verbose="" |
118 | makedefault="" |
119 | package="" |
120 | mbkernel="${HYPERVISOR}" |
121 | mbargs="${HYPERVISOR_ARGS}" |
122 | adddracutargs="" |
123 | addplymouthinitrd="" |
124 | |
125 | usage() |
126 | { |
127 | echo "Usage: $(basename $0) [-v] [--mkinitrd] [--rminitrd] [--dracut]" >&2 |
128 | echo " [--initrdfile=<initrd-image>] [--depmod] [--rmmoddep]" >&2 |
129 | echo " [--kernel-args=<args>] [--remove-args=<args>]" >&2 |
130 | echo " [--banner=<banner>] [--multiboot=multiboot]" >&2 |
131 | echo " [--mbargs=mbargs] [--make-default] [--add-dracut-args]" >&2 |
132 | echo " [--add-plymouth-initrd]" >&2 |
133 | echo " [--host-only]" >&2 |
134 | echo " <--install | --remove | --update> <kernel-version>" >&2 |
135 | echo " (ex: $(basename $0) --mkinitrd --depmod --install 2.4.7-2)" >&2 |
136 | exit 1 |
137 | } |
138 | |
139 | install() |
140 | { |
141 | # XXX kernel should be able to be specified also (or work right on ia64) |
142 | if [ ! -f ${bootPrefix}/${kernelName}-${version} ] |
143 | then |
144 | [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" |
145 | return |
146 | fi |
147 | |
148 | INITRD="" |
149 | if [ -f ${initrdfile} ] |
150 | then |
151 | [[ -n ${verbose} ]] && echo "found ${initrdfile} and using it with grubby" |
152 | INITRD="--initrd ${initrdfile}" |
153 | |
154 | if [[ -n ${addplymouthinitrd} ]] |
155 | then |
156 | INITRD="${INITRD} --extra-initrd ${bootPrefix}/initrd-plymouth.img" |
157 | fi |
158 | fi |
159 | |
160 | # FIXME: is this a good heuristic to find out if we're on iSeries? |
161 | if [ -d /proc/iSeries ] |
162 | then |
163 | [[ -n ${verbose} ]] && echo "On an iSeries, just making img file" |
164 | if [[ -z ${initrdfile} ]] |
165 | then |
166 | [[ -n ${verbose} ]] && echo "No initrd, just adding system map" |
167 | /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${bootPrefix}/${kernelName}-${version} ${bootPrefix}/vmlinitrd-${version} |
168 | else |
169 | /sbin/addSystemMap ${bootPrefix}/System.map-${version} ${bootPrefix}/${kernelName}-${version} ${bootPrefix}/vmlinux.sm-${version} |
170 | /sbin/addRamDisk ${initrdfile} ${bootPrefix}/System.map-${version} ${bootPrefix}/vmlinux.sm-${version} ${bootPrefix}/vmlinitrd-${version} 2>/dev/null |
171 | rm ${bootPrefix}/vmlinux.sm-${version} |
172 | fi |
173 | return |
174 | fi |
175 | |
176 | # get the root filesystem to use |
177 | rootdevice=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/fstab) |
178 | |
179 | if [[ -n ${mbkernel} ]] && [[ -n ${cfgLilo} ]] && [[ ${liloFlag} != elilo ]] |
180 | then |
181 | [[ -n ${verbose} ]] && echo "multiboot specified, not updating lilo.conf" |
182 | cfgLilo="" |
183 | fi |
184 | |
185 | if [[ -n ${cfgGrub} ]] |
186 | then |
187 | [[ -n ${verbose} ]] && echo "adding ${version} to ${grubConfig}" |
188 | |
189 | if [[ -n ${banner} ]] |
190 | then |
191 | title="${banner} (${version})" |
192 | elif [ -f /etc/mageversion ] |
193 | then |
194 | title="Magellan Linux $(< /etc/mageversion) (${version})" |
195 | else |
196 | title="Magellan Linux (${version})" |
197 | fi |
198 | ${grubby} --grub -c ${grubConfig} \ |
199 | --add-kernel=${bootPrefix}/${kernelName}-${version} \ |
200 | ${INITRD} --copy-default ${makedefault} --title "${title}" \ |
201 | ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ |
202 | --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" |
203 | else |
204 | [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97" |
205 | fi |
206 | if [[ -n ${cfgGrub2} ]] |
207 | then |
208 | [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2Config}" |
209 | |
210 | if [[ -n ${banner} ]] |
211 | then |
212 | title="${banner} (${version})" |
213 | elif [ -f /etc/mageversion ] |
214 | then |
215 | title="Magellan Linux $(< /etc/mageversion) (${version})" |
216 | else |
217 | title="Magellan Linux (${version})" |
218 | fi |
219 | ${grubby} --grub2 -c ${grub2Config} \ |
220 | --add-kernel=${bootPrefix}/${kernelName}-${version} \ |
221 | ${INITRD} --copy-default ${makedefault} --title "${title}" \ |
222 | ${mbkernel:+--add-multiboot="${mbkernel}"} \ |
223 | ${mbargs:+--mbargs="${mbargs}"} \ |
224 | --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" |
225 | else |
226 | [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2" |
227 | fi |
228 | if [[ -n ${cfgGrub2Efi} ]] |
229 | then |
230 | [[ -n ${verbose} ]] && echo "adding ${version} to ${grub2EfiConfig}" |
231 | |
232 | if [[ -n ${banner} ]] |
233 | then |
234 | title="${banner} (${version})" |
235 | elif [ -f /etc/mageversion ] |
236 | then |
237 | title="Magellan Linux $(< /etc/mageversion) (${version})" |
238 | else |
239 | title="Magellan Linux (${version})" |
240 | fi |
241 | ${grubby} --grub2 -c ${grub2EfiConfig} \ |
242 | --add-kernel=${bootPrefix}/${kernelName}-${version} \ |
243 | ${INITRD} --copy-default ${makedefault} --title "${title}" \ |
244 | ${mbkernel:+--add-multiboot="${mbkernel}"} \ |
245 | ${mbargs:+--mbargs="${mbargs}"} \ |
246 | --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${title}" |
247 | else |
248 | [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby for grub 2 with UEFI" |
249 | fi |
250 | |
251 | if [[ -n ${cfgLilo} ]] |
252 | then |
253 | [[ -n ${verbose} ]] && echo "adding ${version} to ${liloConfig}" |
254 | |
255 | ${grubby} --add-kernel=${bootPrefix}/${kernelName}-${version} ${INITRD} \ |
256 | --copy-default ${makedefault} --title ${version} \ |
257 | ${mbkernel:+--add-multiboot="${mbkernel}"} ${mbargs:+--mbargs="${mbargs}"} \ |
258 | --args="root=${rootdevice} ${kernargs}" --remove-kernel="TITLE=${version}" \ |
259 | --${liloFlag} |
260 | |
261 | if [[ -n ${runLilo} ]] |
262 | then |
263 | [[ -n ${verbose} ]] && echo "running ${lilo}" |
264 | if [ ! -x ${lilo} ] |
265 | then |
266 | [[ -n ${verbose} ]] && echo "${lilo} does not exist" |
267 | else |
268 | ${lilo} > /dev/null |
269 | fi |
270 | fi |
271 | else |
272 | [[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby" |
273 | fi |
274 | } |
275 | |
276 | remove() |
277 | { |
278 | # FIXME: is this a good heuristic to find out if we're on iSeries? |
279 | if [ -d /proc/iSeries ] |
280 | then |
281 | [[ -n ${verbose} ]] && echo "On an iSeries, remove img file" |
282 | rm -f ${bootPrefix}/${kernelName}-${version}.img 2>/dev/null |
283 | return |
284 | fi |
285 | |
286 | if [[ -n ${cfgGrub} ]] |
287 | then |
288 | [[ -n ${verbose} ]] && echo "removing ${version} from ${grubConfig}" |
289 | ${grubby} --grub -c ${grubConfig} \ |
290 | --remove-kernel=${bootPrefix}/${kernelName}-${version} |
291 | else |
292 | [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby for grub 0.97" |
293 | fi |
294 | if [[ -n ${cfgGrub2} ]] |
295 | then |
296 | [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2Config}" |
297 | ${grubby} --grub2 -c ${grub2Config} \ |
298 | --remove-kernel=${bootPrefix}/${kernelName}-${version} |
299 | else |
300 | [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby for grub 2" |
301 | fi |
302 | if [[ -n ${cfgGrub2Efi} ]] |
303 | then |
304 | [[ -n ${verbose} ]] && echo "removing ${version} from ${grub2EfiConfig}" |
305 | ${grubby} --grub2 -c ${grub2EfiConfig} \ |
306 | --remove-kernel=${bootPrefix}/${kernelName}-${version} |
307 | else |
308 | [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby grub 2 with UEFI" |
309 | fi |
310 | |
311 | if [[ -n ${cfgLilo} ]] |
312 | then |
313 | [[ -n ${verbose} ]] && echo "removing ${version} from ${liloConfig}" |
314 | ${grubby} --remove-kernel=${bootPrefix}/${kernelName}-${version} --${liloFlag} |
315 | |
316 | if [[ -n ${runLilo} ]] |
317 | then |
318 | [[ -n ${verbose} ]] && echo "running ${lilo}" |
319 | if [ ! -x ${lilo} ] |
320 | then |
321 | [[ -n ${verbose} ]] && echo "${lilo} does not exist" |
322 | else |
323 | ${lilo} > /dev/null |
324 | fi |
325 | fi |
326 | else |
327 | [[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby" |
328 | fi |
329 | |
330 | if [[ -n ${cfguBoot} ]] |
331 | then |
332 | [[ -n ${verbose} ]] && echo "removing ${version} from ${ubootDir}..." |
333 | |
334 | if [ -f ${ubootDir}/${ubootKList} ] |
335 | then |
336 | tmpKList=$(mktemp ${ubootDir}/${ubootKList}.XXXX) |
337 | curversion=$(tail -n1 ${ubootDir}/${ubootKList}) |
338 | sed "/${version}/d" ${ubootDir}/${ubootKList} > ${tmpKList} |
339 | newversion=$(tail -n1 ${tmpKList}) |
340 | if [ -f ${ubootDir}/uImage-${newversion} ] && [ -f ${ubootDir}/uInitrd-${newversion} ] |
341 | then |
342 | if [[ ${curversion} != ${newversion} ]] |
343 | then |
344 | cp -fp ${ubootDir}/uImage-${newversion} ${ubootDir}/${ubootDefaultImage} |
345 | if [ $? -ne 0 ] |
346 | then |
347 | [[ -n ${verbose} ]] && echo "copy uImage-${newversion} error, default kernel not replaced!" && exit |
348 | fi |
349 | cp -fp ${ubootDir}/uInitrd-${newversion} ${ubootDir}/${ubootDefaultInitrd} |
350 | if [ $? -ne 0 ] |
351 | then |
352 | [[ -n ${verbose} ]] && echo "copy uInitrd-${newversion} error, default Initrd not replaced!" && exit |
353 | fi |
354 | fi |
355 | |
356 | [[ -n ${verbose} ]] && echo "removing uImage-${version}" |
357 | if [ -f ${ubootDir}/uImage-${version} ] |
358 | then |
359 | rm -f ${ubootDir}/uImage-${version} |
360 | else |
361 | [[ -n ${verbose} ]] && echo "uImage-${version} did not exist!" |
362 | fi |
363 | |
364 | [[ -n ${verbose} ]] && echo "removing uInitrd-${version}" |
365 | if [ -f ${ubootDir}/uInitrd-${version} ] |
366 | then |
367 | rm -f ${ubootDir}/uInitrd-${version} |
368 | else |
369 | [[ -n ${verbose} ]] && echo "uInitrd-${version} did not exist!" |
370 | fi |
371 | |
372 | mv ${tmpKList} ${ubootDir}/${ubootKList} |
373 | else |
374 | [[ -n ${verbose} ]] && echo "uImage ${newversion} does not exist!" |
375 | [ -f ${tmpKList} ] && rm -f ${tmpKList} |
376 | fi |
377 | else |
378 | [[ -n ${verbose} ]] && echo "No previous kernel version. uBoot images not removed!" |
379 | fi |
380 | else |
381 | [[ -n ${verbose} ]] && echo "${ubootScript} does not exist, not modifying ${ubootDir}" |
382 | fi |
383 | } |
384 | |
385 | update() |
386 | { |
387 | if [ ! -f ${bootPrefix}/${kernelName}-${version} ] |
388 | then |
389 | [[ -n ${verbose} ]] && echo "kernel for ${version} does not exist, not running grubby" |
390 | return |
391 | fi |
392 | |
393 | INITRD="" |
394 | if [ -f ${initrdfile} ] |
395 | then |
396 | [[ -n ${verbose} ]] && echo "found ${initrdfile} and using it with grubby" |
397 | INITRD="--initrd ${initrdfile}" |
398 | |
399 | if [[ -n ${addplymouthinitrd} ]] |
400 | then |
401 | INITRD="${INITRD} --extra-initrd ${bootPrefix}/initrd-plymouth.img" |
402 | fi |
403 | fi |
404 | |
405 | if [[ -n ${cfgGrub} ]] |
406 | then |
407 | [[ -n ${verbose} ]] && echo "updating ${version} from ${grubConfig}" |
408 | ${grubby} --grub -c ${grubConfig} \ |
409 | --update-kernel=${bootPrefix}/${kernelName}-${version} \ |
410 | ${INITRD} \ |
411 | ${kernargs:+--args="${kernargs}"} \ |
412 | ${removeargs:+--remove-args="${removeargs}"} |
413 | else |
414 | [[ -n ${verbose} ]] && echo "${grubConfig} does not exist, not running grubby" |
415 | fi |
416 | |
417 | if [[ -n ${cfgGrub2} ]] |
418 | then |
419 | [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2Config}" |
420 | ${grubby} --grub2 -c ${grub2Config} \ |
421 | --update-kernel=${bootPrefix}/${kernelName}-${version} \ |
422 | ${INITRD} \ |
423 | ${kernargs:+--args="${kernargs}"} \ |
424 | ${removeargs:+--remove-args="${removeargs}"} |
425 | else |
426 | [[ -n ${verbose} ]] && echo "${grub2Config} does not exist, not running grubby" |
427 | fi |
428 | |
429 | if [[ -n ${cfgGrub2Efi} ]] |
430 | then |
431 | [[ -n ${verbose} ]] && echo "updating ${version} from ${grub2EfiConfig}" |
432 | ${grubby} --grub2 -c ${grub2EfiConfig} \ |
433 | --update-kernel=${bootPrefix}/${kernelName}-${version} \ |
434 | ${INITRD} \ |
435 | ${kernargs:+--args="${kernargs}"} \ |
436 | ${removeargs:+--remove-args="${removeargs}"} |
437 | else |
438 | [[ -n ${verbose} ]] && echo "${grub2EfiConfig} does not exist, not running grubby" |
439 | fi |
440 | |
441 | if [[ -n ${cfgLilo} ]] |
442 | then |
443 | [[ -n ${verbose} ]] && echo "updating ${version} from ${liloConfig}" |
444 | ${grubby} --update-kernel=${bootPrefix}/${kernelName}-${version} \ |
445 | ${INITRD} \ |
446 | ${kernargs:+--args="${kernargs}"} \ |
447 | ${removeargs:+--remove-args="${removeargs}"} \ |
448 | --${liloFlag} |
449 | |
450 | if [[ -n ${runLilo} ]] |
451 | then |
452 | [[ -n ${verbose} ]] && echo "running ${lilo}" |
453 | if [ ! -x ${lilo} ] |
454 | then |
455 | [[ -n ${verbose} ]] && echo "${lilo} does not exist" |
456 | else |
457 | ${lilo} > /dev/null |
458 | fi |
459 | fi |
460 | else |
461 | [[ -n ${verbose} ]] && echo "${liloConfig} does not exist, not running grubby" |
462 | fi |
463 | |
464 | if [[ -n ${cfguBoot} ]] |
465 | then |
466 | [[ -n ${verbose} ]] && echo "adding $version to ${ubootDir}..." |
467 | |
468 | [[ -n ${verbose} ]] && echo "creating uImage-${version}" |
469 | mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 \ |
470 | -n ${version} -d ${bootPrefix}/${kernelName}-${version} ${ubootDir}/uImage-${version} |
471 | |
472 | [[ -n ${verbose} ]] && echo "creating uInitrd-${version}" |
473 | mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 \ |
474 | -n initramfs -d ${initrdfile} ${ubootDir}/uInitrd-${version} |
475 | |
476 | if [ -f ${ubootDir}/uImage-${version} ] && [ -f ${ubootDir}/uInitrd-${version} ] |
477 | then |
478 | cp -fp ${ubootDir}/uImage-${version} ${ubootDir}/${ubootDefaultImage} |
479 | if [ $? -ne 0 ] |
480 | then |
481 | [[ -n ${verbose} ]] && echo "copy uImage-${version} error, kernel not installed!" && exit |
482 | fi |
483 | cp -fp ${ubootDir}/uInitrd-${version} ${ubootDir}/${ubootDefaultInitrd} |
484 | if [ $? -ne 0 ] |
485 | then |
486 | [[ -n ${verbose} ]] && echo "copy uInitrd-${version} error, kernel not installed!" && exit |
487 | fi |
488 | echo ${version} >> ${ubootDir}/${ubootKList} |
489 | else |
490 | [[ -n ${verbose} ]] && echo "cannot make ${version} the default" |
491 | fi |
492 | else |
493 | [[ -n ${verbose} ]] && echo "${ubootScript} does not exist, not setting up ${ubootDir}" |
494 | fi |
495 | } |
496 | |
497 | mkinitrd() |
498 | { |
499 | if [[ -n ${dracut} ]] |
500 | then |
501 | tool="/sbin/dracut ${dracuthostonly} -f ${initrdfile} ${version}" |
502 | else |
503 | tool="/sbin/mkinitrd --allow-missing -f ${initrdfile} ${version}" |
504 | fi |
505 | [[ -n ${verbose} ]] && echo "creating initrd ${initrdfile} using ${version}" |
506 | ${tool} |
507 | rc=$? |
508 | if [ ${rc} != 0 ] |
509 | then |
510 | echo "mkinitrd failed" >&2 |
511 | exit 1 |
512 | fi |
513 | } |
514 | |
515 | rminitrd() |
516 | { |
517 | [[ -n ${verbose} ]] && echo "removing initrd ${initrdfile}" |
518 | [ -f ${initrdfile} ] && rm -f ${initrdfile} |
519 | } |
520 | |
521 | doDepmod() |
522 | { |
523 | [[ -n ${verbose} ]] && echo "running depmod for ${version}" |
524 | depmod -ae -F /boot/System.map-${version} ${version} |
525 | } |
526 | |
527 | doRmmoddep() |
528 | { |
529 | [[ -n ${verbose} ]] && echo "removing modules.dep info for ${version}" |
530 | [ -d /lib/modules/${version} ] && rm -f /lib/modules/${version}/modules.* |
531 | } |
532 | |
533 | |
534 | while [ $# -gt 0 ] |
535 | do |
536 | case $1 in |
537 | --mkinitrd) |
538 | initrd="make" |
539 | ;; |
540 | |
541 | --rminitrd) |
542 | initrd="remove" |
543 | ;; |
544 | |
545 | --dracut) |
546 | dracut=--dracut |
547 | ;; |
548 | |
549 | --host-only) |
550 | dracuthostonly=-H |
551 | ;; |
552 | |
553 | --initrdfile*) |
554 | if echo $1 | grep '=' >/dev/null |
555 | then |
556 | initrdfile=$(echo $1 | sed 's/^--initrdfile=//') |
557 | else |
558 | initrdfile=$2 |
559 | shift |
560 | fi |
561 | ;; |
562 | |
563 | --kernel-args*) |
564 | if echo $1 | grep '=' >/dev/null |
565 | then |
566 | kernargs=$(echo $1 | sed 's/^--kernel-args=//') |
567 | else |
568 | kernargs=$2 |
569 | shift |
570 | fi |
571 | ;; |
572 | |
573 | --remove-args*) |
574 | if echo $1 | grep '=' >/dev/null |
575 | then |
576 | removeargs=$(echo $1 | sed 's/^--remove-args=//') |
577 | else |
578 | removeargs=$2 |
579 | shift |
580 | fi |
581 | ;; |
582 | |
583 | --banner*) |
584 | if echo $1 | grep '=' >/dev/null |
585 | then |
586 | banner=$(echo $1 | sed 's/^--banner=//') |
587 | else |
588 | banner=$2 |
589 | shift |
590 | fi |
591 | ;; |
592 | |
593 | --multiboot*) |
594 | if echo $1 |grep '=' >/dev/null |
595 | then |
596 | mbkernel=$(echo $1 | sed 's/^--multiboot=//') |
597 | else |
598 | # can't really support having an optional second arg here |
599 | # sorry! |
600 | mbkernel="/boot/xen.gz" |
601 | fi |
602 | ;; |
603 | |
604 | --mbargs*) |
605 | if echo $1 |grep '=' >/dev/null |
606 | then |
607 | mbargs=$(echo $1 | sed 's/^--mbargs=//') |
608 | else |
609 | mbargs="$2" |
610 | shift |
611 | fi |
612 | ;; |
613 | |
614 | --depmod) |
615 | moddep="make" |
616 | ;; |
617 | |
618 | --rmmoddep) |
619 | moddep="remove" |
620 | ;; |
621 | |
622 | --make-default) |
623 | makedefault="--make-default" |
624 | ;; |
625 | |
626 | --package) |
627 | if echo $1 | grep '=' >/dev/null |
628 | then |
629 | package=$(echo $1 | sed 's/^--package=//') |
630 | else |
631 | package=$2 |
632 | shift |
633 | fi |
634 | ;; |
635 | |
636 | --add-dracut-args) |
637 | adddracutargs=--add-dracut-args |
638 | ;; |
639 | |
640 | --add-plymouth-initrd) |
641 | addplymouthinitrd=--add-plymouth-initrd |
642 | ;; |
643 | |
644 | -v) |
645 | verbose=-v |
646 | ;; |
647 | |
648 | *) |
649 | if [[ -z ${mode} ]] |
650 | then |
651 | mode=$1 |
652 | elif [[ -z ${version} ]] |
653 | then |
654 | version=$1 |
655 | else |
656 | usage |
657 | fi |
658 | ;; |
659 | esac |
660 | |
661 | shift |
662 | done |
663 | |
664 | # make sure the mode is valid |
665 | if [[ ${mode} != --install ]] && [[ ${mode} != --remove ]] && [[ ${mode} != --update ]] |
666 | then |
667 | usage |
668 | fi |
669 | |
670 | if [[ -z ${version} ]] |
671 | then |
672 | usage |
673 | fi |
674 | |
675 | if [ "${mode}" != "--install" -a "${makedefault}" ] |
676 | then |
677 | usage |
678 | fi |
679 | |
680 | kernelmajor=$(echo ${kernel} | cut -d . -f 1,2) |
681 | |
682 | # kernel image for 2.4 is kernel |
683 | if [[ ${ARCH} = ppc64 ]] || [[ ${ARCH} = ppc ]] |
684 | then |
685 | if [[ ${kernelmajor} = 2.4 ]] |
686 | then |
687 | kernelName=kernel |
688 | fi |
689 | fi |
690 | |
691 | # set the initrd file based on arch; ia64 is the only currently known oddball |
692 | if [[ -z ${initrdfile} ]] |
693 | then |
694 | INITRD_NAME_PREFIX="initrd" |
695 | if [[ -n ${dracut} ]] |
696 | then |
697 | INITRD_NAME_PREFIX="initramfs" |
698 | fi |
699 | |
700 | if [[ $(uname -m) = ia64 ]] |
701 | then |
702 | initrdfile="/boot/efi/EFI/redhat/${INITRD_NAME_PREFIX}-${version}.img" |
703 | else |
704 | initrdfile="/boot/${INITRD_NAME_PREFIX}-${version}.img" |
705 | fi |
706 | fi |
707 | [[ -n ${verbose} ]] && echo "initrdfile is ${initrdfile}" |
708 | |
709 | # add dracut i18n, keyboard and plymouth kernel args if requested |
710 | if [[ -n ${dracut} ]] || [[ -n ${adddracutargs} ]] |
711 | then |
712 | [ -r /etc/conf.d/keymap ] && . /etc/conf.d/keymap |
713 | [ -r /etc/conf.d/consolefont ] && . /etc/conf.d/consolefont |
714 | |
715 | if [[ -n ${KEYMAP} ]] |
716 | then |
717 | kernargs="${kernargs} KEYTABLE=${KEYMAP}" |
718 | fi |
719 | |
720 | if [[ -n ${CONSOLEFONT} ]] |
721 | then |
722 | kernargs="${kernargs} SYSFONT=${CONSOLEFONT}" |
723 | fi |
724 | fi |
725 | |
726 | # set this as the default if we have the package and it matches |
727 | if [[ ${mode} = --install ]] && [[ ${UPDATEDEFAULT} = yes ]] && [[ -n ${package} ]] && |
728 | [[ -n ${DEFAULTKERNEL} ]] && [[ ${package} = ${DEFAULTKERNEL} ]] |
729 | then |
730 | makedefault="--make-default" |
731 | [[ -n ${verbose} ]] && echo "making it the default based on config" |
732 | fi |
733 | |
734 | if [[ ${moddep} = make ]] |
735 | then |
736 | doDepmod |
737 | elif [[ ${moddep} = remove ]] |
738 | then |
739 | doRmmoddep |
740 | fi |
741 | |
742 | if [[ ${initrd} = make ]] |
743 | then |
744 | mkinitrd |
745 | elif [[ ${initrd} = remove ]] |
746 | then |
747 | rminitrd |
748 | fi |
749 | |
750 | if [ ! -x ${grubby} ] |
751 | then |
752 | [[ -n ${verbose} ]] && echo "${grubby} does not exist" |
753 | exit 0 |
754 | fi |
755 | |
756 | [[ -n ${grubConfig} ]] && [ -f ${grubConfig} ] && cfgGrub=1 |
757 | [[ -n ${grub2Config} ]] && [ -f ${grub2Config} ] && cfgGrub2=1 |
758 | [[ -n ${grub2EfiConfig} ]] && [ -f ${grub2EfiConfig} ] && cfgGrub2Efi=1 |
759 | [[ -n ${liloConfig} ]] && [ -f ${liloConfig} ] && cfgLilo=1 |
760 | |
761 | # if we have a uBoot directory, check if it is mounted. |
762 | # if not, mount it. Then check if a boot script exists. |
763 | if [[ -n ${ubootDir} ]] |
764 | then |
765 | mountEntry=$(mount | grep ${ubootDir}) |
766 | if [[ -z ${mountEntry} ]] |
767 | then |
768 | mount ${ubootDevice} ${ubootDir} |
769 | mounted=1 |
770 | fi |
771 | [ -f ${ubootScript} ] && cfguBoot=1 |
772 | fi |
773 | |
774 | # if we have a lilo config on an x86 box, see if the default boot loader |
775 | # is lilo to determine if it should be run |
776 | if [[ -n ${cfgLilo} ]] && [[ -n ${isx86} ]] |
777 | then |
778 | runLilo=$(${grubby} --bootloader-probe | grep lilo) |
779 | fi |
780 | |
781 | if [[ ${mode} = --install ]] |
782 | then |
783 | install |
784 | elif [[ ${mode} = --remove ]] |
785 | then |
786 | remove |
787 | elif [[ ${mode} = --update ]] |
788 | then |
789 | update |
790 | fi |
791 | |
792 | exit 0 |
Properties
Name | Value |
---|---|
svn:executable | * |