]> git.proxmox.com Git - grub2.git/commitdiff
Merge mainline into install
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 11 Sep 2010 14:38:37 +0000 (16:38 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 11 Sep 2010 14:38:37 +0000 (16:38 +0200)
1  2 
ChangeLog
Makefile.util.def
util/grub-install.in

diff --cc ChangeLog
Simple merge
Simple merge
index 5b49adcf87e5629243f6a8a12f3947bf7e311173,4de5dbc4a1dc128536fac0dc307f7c609b3244f7..6707990139f738aaa4dfcb1ddc928dd8370a1b2d
@@@ -41,9 -40,9 +41,10 @@@ grub_mkimage=${bindir}/`echo grub-mkima
  grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
  grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
  grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}`
 +grub_mkrelpath=${bindir}/`echo grub-mkrelpath | sed ${transform}`
  rootdir=
- grub_prefix=`echo /boot/grub | sed ${transform}`
+ bootdir=
+ grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`
  modules=
  
  install_device=
@@@ -97,11 -70,10 +98,11 @@@ Install GRUB on your drive
    -h, --help              print this message and exit
    -v, --version           print the version information and exit
    --modules=MODULES       pre-load specified modules MODULES
-   --root-directory=DIR    install GRUB images under the directory DIR
-                           instead of the root directory
+   --boot-directory=DIR    install GRUB images under the directory DIR/@grubdirname@
+                           instead of the $grubdir directory
    --grub-setup=FILE       use FILE as grub-setup
    --grub-mkimage=FILE     use FILE as grub-mkimage
 +  --grub-mkrelpath=FILE   use FILE as grub-mkrelpath
    --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap
    --grub-probe=FILE       use FILE as grub-probe
    --no-floppy             do not probe any floppy drive
@@@ -268,26 -217,20 +272,21 @@@ setup_verbose
  if test $debug = yes; then
      set -x
      setup_verbose="--verbose"
 +    efi_quiet=-q
  fi
  
- # Initialize these directories here, since ROOTDIR was initialized.
- case "$host_os" in
- netbsd* | openbsd*)
-     # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub
-     # instead of /boot/grub.
-     grub_prefix=`echo /grub | sed ${transform}`
-     bootdir=${rootdir}
-     ;;
- *)
-     # Use /boot/grub by default.
-     bootdir=${rootdir}/boot
-     ;;
- esac
+ if [ -z "$bootdir" ]; then
+     # Default bootdir if bootdir not initialized.
+     bootdir=/@bootdirname@
  
- grubdir=${bootdir}/`echo grub | sed ${transform}`
- device_map=${grubdir}/device.map
+     if [ -n "$rootdir" ] ; then
+         # Initialize bootdir if rootdir was initialized.
+         bootdir=${rootdir}/@bootdirname@
+     fi
+ fi
  
+ grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'`
+ device_map=${grubdir}/device.map
  grub_probe="${grub_probe} --device-map=${device_map}"
  
  # Check if GRUB is installed.
  fi
  
  case "${target_cpu}-${platform}" in
 -    i386-pc) mkimage_target=i386-pc ;;
      sparc64-ieee1275) mkimage_target=sparc64-ieee1275-raw ;;
      mips-yeeloong) mkimage_target=mipsel-yeeloong-elf ;;
 -    *) mkimage_target=i386-coreboot;
 +    *) mkimage_target="${target_cpu}-${platform}" ;;
  esac
  
 +case "${target_cpu}-${platform}" in
 +    i386-efi | x86_64-efi) imgext=efi ;;
 +    mips-yeeloong | i386-coreboot | i386-multiboot | i386-ieee1275 \
 +      | powerpc-ieee1275) imgext=elf ;;
 +    *) imgext=img ;;
 +esac
 +
 +
 +$grub_mkimage ${config_opt} -O ${mkimage_target} --output=${grubdir}/core.${imgext} --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
 +
 +# Backward-compatibility kludges
 +if [ "${target_cpu}-${platform}" = "mips-yeeloong" ]; then
 +    cp ${grubdir}/core.${imgext} /boot/grub.elf
 +elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
 +    cp ${grubdir}/core.${imgext} /boot/grub/grub
 +elif [ "${target_cpu}-${platform}" = "i386-efi" ] || [ "${target_cpu}-${platform}" = "x86_64-efi" ]; then
 +    $grub_mkimage ${config_opt} -O ${mkimage_target} --output=${grubdir}/grub.efi --prefix="" $modules || exit 1
 +fi
 +
  # Verify readability of a few critical files
  for file in grubenv core.${imgext} normal.mod ; do
-   if is_path_readable_by_grub ${grubdir}/${file} ${grub_device} ${relative_grubdir}/${file} ; then : ; else
-     echo "GRUB is unable to read ${grubdir}/${file}" >&2
-     exit 1
-   fi
+     if is_path_readable_by_grub ${grubdir}/${file} ${grub_device} ${relative_grubdir}/${file} ; then : ; else
+         echo "GRUB is unable to read ${grubdir}/${file}" >&2
+         exit 1
+     fi
  done
  
 +# Perform the platform-dependent install
  if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
 -    $grub_mkimage ${config_opt} -O ${mkimage_target} --output=${grubdir}/core.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
 -
      # Now perform the installation.
 -    $grub_setup ${setup_verbose} ${setup_force} --directory=${grubdir} --device-map=${device_map} \
 -        ${install_device} || exit 1
 -elif [ "${target_cpu}-${platform}" = "mips-yeeloong" ] ; then
 -    $grub_mkimage ${config_opt} -d ${pkglibdir} -O ${mkimage_target} --output=/boot/grub.elf --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
 -else
 -    $grub_mkimage -O ${mkimage_target} ${config_opt} -d ${pkglibdir} --output=/boot/multiboot.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
 +    $grub_setup ${setup_verbose} ${setup_force} --directory=${grubdir} \
 +      --device-map=${device_map} ${install_device} || exit 1
 +elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
 +    if [ x"$update_nvram" = xyes ]; then
 +      set $ofpathname dummy
 +      if test -f "$1"; then
 +          :
 +      else
 +          echo "$1: Not found." 1>&2
 +          exit 1
 +      fi
 +      set $nvsetenv dummy
 +      if test -f "$1"; then
 +          :
 +      else
 +          echo "$1: Not found." 1>&2
 +          exit 1
 +      fi
 +        # Get the Open Firmware device tree path translation.
 +      dev=`echo $grub_device | sed -e 's/\/dev\///' -e 's/[0-9]\+//'`
 +      partno=`echo $grub_device | sed -e 's/.*[^0-9]\([0-9]\+\)$/\1/'`
 +      ofpath=`$ofpathname $dev` || {
 +          echo "Couldn't find Open Firmware device tree path for $dev."
 +          echo "You will have to set boot-device manually."
 +          exit 1
 +      }
 +
 +        # Point boot-device at the new grub install
 +      boot_device="$ofpath:$partno,"`grub-mkrelpath ${grubdir}/core.${imgext} | sed 's,/,\\\\,g'`
 +      "$nvsetenv" boot-device "$boot_device" || {
 +          echo "$nvsetenv failed."
 +          echo "You will have to set boot-device manually.  At the Open Firmware prompt, type:"
 +          echo "  setenv boot-device $boot_device"
 +          exit 1
 +      }
 +    fi
 +elif [ x"$platform" = xefi ]; then
 +    cp ${grubdir}/core.${imgext} ${efidir}/${efi_file}
 +
 +    # Try to make this image bootable using the EFI Boot Manager, if available.
 +    if test "$removable" = no && test -n "$efi_distributor" && \
 +      test -n "$efibootmgr"; then
 +        # On Linux, we need the efivars kernel modules.
 +      case "$host_os" in
 +          linux*)
 +              modprobe -q efivars 2>/dev/null || true ;;
 +      esac
 +
 +        # Delete old entries from the same distributor.
 +      for bootnum in `efibootmgr | grep '^Boot[0-9]' | \
 +          fgrep -i " $efi_distributor" | cut -b5-8`; do
 +          efibootmgr $efi_quiet -b "$bootnum" -B
 +      done
 +
 +        # Add a new entry for the image we just created.  efibootmgr needs to be
 +        # given the disk device and partition number separately, so we have to
 +        # fiddle about with grub-probe to get hold of this reasonably reliably.
 +        # Use fresh device map text to avoid any problems with stale data, since
 +        # all we need here is a one-to-one mapping.
 +      clean_devmap="$($grub_mkdevicemap --device-map=/dev/stdout)"
 +      efidir_drive="$(echo "$clean_devmap" | $grub_probe --target=drive --device-map=/dev/stdin "$efidir")"
 +      if test -z "$efidir_drive"; then
 +          echo "Can't find GRUB drive for $efidir; unable to create EFI Boot Manager entry." >&2
 +      else
 +          efidir_disk="$(echo "$clean_devmap" | grep "^$(echo "$efidir_drive" | sed 's/,[^)]*//')" | cut -f2)"
 +          efidir_part="$(echo "$efidir_drive" | sed 's/^([^,]*,[^0-9]*//; s/[^0-9].*//')"
 +          efibootmgr $efi_quiet -c -d "$efidir_disk" -p "$efidir_part" -w \
 +              -L "$GRUB_DISTRIBUTOR" -l "\\EFI\\$efi_distributor\\$efi_file"
 +      fi
 +    fi
  fi
  
  echo "Installation finished. No error reported."