Magellan Linux

Contents of /trunk/grubby/new-kernel-pkg

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1710 - (show annotations) (download)
Sat Feb 18 00:28:45 2012 UTC (12 years, 2 months ago) by niro
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 *