home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / lib / bootloader / bootloader_entry
Text File  |  2006-11-29  |  5KB  |  164 lines

  1. #!/bin/bash
  2. #
  3. # This script represents an interface between the postinstall and postuninstall
  4. # scripts of kernel rpms and the update-bootloader script. 
  5. # Interface:
  6. # ----------
  7. # /usr/lib/bootloader/bootloader_entry [add|remove] <kernel-flavor> <kernel-release> <image-name> <initrd-name>
  8. #
  9. # Call Semantics:
  10. # ---------------
  11. # [ -x $cmd ] && $cmd <parameters>
  12. #
  13. #
  14. # Author: aosthof@suse.de
  15. #
  16.  
  17.  
  18. # Print how to use this script correctly
  19. function usage()
  20. {
  21.     echo "Unknown or missing parameter."
  22.     echo "Usage: $0 [add|remove] <kernel-flavor> <kernel-release> <image-name> <initrd-name>"
  23.     echo
  24.     echo "The old interface with 4 parameters is still supported, but deprecated."
  25.     echo "This interface will be dropped in the near future."
  26.     echo "Usage: $0 [add|remove] <kernel-package-name> <image-name> <initrd-name>"
  27.     exit 1
  28. }
  29.  
  30.  
  31. # Get all command line arguments
  32. function getargs()
  33. {
  34.     # old interface with 4 parameters
  35.     if [ $# -eq 4 ] ; then
  36.         action=${1}        # contains the action to be executed, e.g. "add" or "remove"
  37.         flavor=${2#*-}    # contains the kernel-flavor, e.g. "default" or "xen"
  38.         flavor=${flavor%%-*}
  39.         release=${2#*-*-}    # contains the kernel-release, e.g. "2.6.18-4-default"
  40.         release=${release%.*.*}
  41.         release="${release}-${flavor}"
  42.         image=${3}        # contains the full image name, e.g. "vmlinuz-2.6.18-4-default"
  43.         initrd=${4}        # contains the full initrd name, e.g. "initrd-2.6.18-4-default"
  44.         
  45.     # new interface with 5 parameters
  46.     else
  47.         action=${1}        # contains the action to be executed, e.g. "add" or "remove"
  48.         flavor=${2}        # contains the kernel-flavor, e.g. "default" or "xen"
  49.         release=${3}    # contains the kernel-release, e.g. "2.6.18-4-default"
  50.         image=${4}        # contains the full image name, e.g. "vmlinuz-2.6.18-4-default"
  51.         initrd=${5}        # contains the full initrd name, e.g. "initrd-2.6.18-4-default"
  52.     fi
  53. }
  54.  
  55.  
  56. # Wrapper for the update-bootloader function
  57. function update_bootloader() 
  58. {
  59.     [ -x /sbin/update-bootloader -a \
  60.       "$YAST_IS_RUNNING" != instsys ] || return 0
  61.     /sbin/update-bootloader "$@"
  62. }
  63.  
  64.  
  65. ##############################
  66. # Add a new bootloader entry #
  67. ##############################
  68. function add_entry()
  69. {
  70.     # Set up the new kernel
  71.     if [ "$YAST_IS_RUNNING" != instsys ]; then
  72.         case $flavor in
  73.             (kdump|um)
  74.                 ;;
  75.             (*)
  76.                 opt_xen_kernel=
  77.                 case $flavor in
  78.                 xen*)
  79.                     set -- $flavor
  80.                     set -- ${1#xen}
  81.                     opt_xen_kernel=--xen-kernel=/boot/xen${1:+-$1}.gz
  82.                     ;;
  83.                 esac
  84.  
  85.                 # Add the new bootloader entry
  86.                 update_bootloader --image /boot/$image \
  87.                   --initrd /boot/$initrd \
  88.                   --default \
  89.                   --add \
  90.                   --force $opt_xen_kernel \
  91.                   --name "Kernel-$release"
  92.  
  93.                 # Run the bootloader (e.g., lilo).
  94.                 update_bootloader --refresh
  95.                 ;;
  96.         esac
  97.     fi
  98. }
  99.  
  100.  
  101. #######################################
  102. # Remove an existing bootloader entry #
  103. #######################################
  104. function remove_entry()
  105. {
  106.     # Do not specify the name of a bootloader entry when removing it, thus
  107.     # removing all sections matching the kernel image and initrd names
  108.     # (either both a "linux" and a "failsafe" section, or a section
  109.     # installed with the kernel postinstall script).
  110.     #
  111.     # Rationale: we do not know whether the old entry has
  112.     #    - the product name as its name (when installed with
  113.     #      yast-bootloader) or
  114.     #    - "Kernel-<version>" (when installed with the kernel package's
  115.     #       postinstall script and perl-Bootloader).
  116.     #
  117.     #  So we cannot use the name to find the correct section.
  118.     #  This is safe, because on grub, this does still not match other 
  119.     #  sections on other partitions with the same name for the kernel
  120.     #  image and initrd (because they will still have the (hdx,y) prefix
  121.     #  in perl-Bootloader). Other bootloaders do not specify other
  122.     #  sections at all, or do only chainload them (BootLILO.ycp), and
  123.     #  thus do not match either. (#223030)
  124.     #
  125.        update_bootloader --image /boot/$image \
  126.               --initrd /boot/$initrd \
  127.               --remove \
  128.               --force
  129.  
  130.     # Run the bootloader (e.g., lilo).
  131.        update_bootloader --refresh
  132. }
  133.  
  134.  
  135.  
  136. #####################  M A I N  ###############################################
  137.  
  138.  
  139. # Checks if correct amount of arguments is given
  140. if [ "$#" -ne "4" -a "$#" -ne "5" ] ; then 
  141.     usage
  142. fi
  143.  
  144. # Get all given arguments
  145. getargs $@
  146.  
  147. # Find out which action should be executed
  148. case $action in
  149.     add)
  150.         # Add a new bootloader entry
  151.         add_entry
  152.         ;;
  153.     remove) 
  154.         # Remove an existing bootloader entry
  155.         remove_entry
  156.         ;;
  157.     *)  
  158.         # Unknown argument    
  159.         usage
  160.         ;;
  161. esac
  162.  
  163.