]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* util/grub-install.in: Handle filenames containing spaces.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 13 Nov 2010 15:03:29 +0000 (16:03 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 13 Nov 2010 15:03:29 +0000 (16:03 +0100)
Reported by: Jordan Uggla.
Tested by: Jordan Uggla.

ChangeLog
util/grub-install.in

index e6d7b410ad4e83e8e2f1dd8fedab23f2013ba6b2..03ff87f74f229005d45f64755081f0c0bd84107d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-11-13  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * util/grub-install.in: Handle filenames containing spaces.
+       Reported by: Jordan Uggla.
+       Tested by: Jordan Uggla.
+
 2010-11-13  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/grub-mkconfig.in (grub_script_check): New variable.
index 20b3cab462690d8dacd278a3205e552239a2963e..52f17bfa23466ac2e20b4d734c6aae156c0f2ffa 100644 (file)
 # Initialize some variables.
 transform="@program_transform_name@"
 
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-sbindir=@sbindir@
-bindir=@bindir@
-libdir=@libdir@
-sysconfdir=@sysconfdir@
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+sbindir="@sbindir@"
+bindir="@bindir@"
+libdir="@libdir@"
+sysconfdir="@sysconfdir@"
 PACKAGE_NAME=@PACKAGE_NAME@
 PACKAGE_TARNAME=@PACKAGE_TARNAME@
 PACKAGE_VERSION=@PACKAGE_VERSION@
 target_cpu=@target_cpu@
 platform=@platform@
 host_os=@host_os@
-pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`
-localedir=@datadir@/locale
+pkglibdir="${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`"
+localedir="@datadir@/locale"
 
-self=`basename $0`
+self="`basename $0`"
 
-grub_setup=${sbindir}/`echo grub-setup | sed ${transform}`
-grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}`
-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}`
+grub_setup="${sbindir}/`echo grub-setup | sed ${transform}`"
+grub_mkimage="${bindir}/`echo grub-mkimage | sed ${transform}`"
+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=
 bootdir=
-grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`
+grubdir="`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`"
 modules=
 
 install_device=
@@ -56,15 +56,15 @@ debug_image=
 
 update_nvram=yes
 
-ofpathname=`which ofpathname`
-nvsetenv=`which nvsetenv`
-efibootmgr=`which efibootmgr 2>/dev/null || true`
+ofpathname="`which ofpathname`"
+nvsetenv="`which nvsetenv`"
+efibootmgr="`which efibootmgr 2>/dev/null || true`"
 removable=no
 efi_quiet=
 
 # Get GRUB_DISTRIBUTOR.
-if test -f ${sysconfdir}/default/grub ; then
-    . ${sysconfdir}/default/grub
+if test -f "${sysconfdir}/default/grub" ; then
+    . "${sysconfdir}/default/grub"
 fi
 
 bootloader_id="$(echo "$GRUB_DISTRIBUTOR" | tr '[A-Z]' '[a-z]' | cut -d' ' -f1)"
@@ -140,14 +140,14 @@ EOF
 }
 
 argument () {
-  opt=$1
+  opt="$1"
   shift
 
   if test $# -eq 0; then
       echo "$0: option requires an argument -- '$opt'" 1>&2
       exit 1
   fi
-  echo $1
+  echo "$1"
 }
 
 allow_floppy=""
@@ -179,44 +179,44 @@ do
 
 # Accept for compatibility
     --root-directory)
-       rootdir=`argument $option "$@"`; shift;;
+       rootdir="`argument $option "$@"`"; shift;;
     --root-directory=*)
-       rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
+       rootdir="`echo "$option" | sed 's/--root-directory=//'`" ;;
 
     --boot-directory)
-       bootdir=`argument $option "$@"`; shift;;
+       bootdir="`argument $option "$@"`"; shift;;
     --boot-directory=*)
-       bootdir=`echo "$option" | sed 's/--boot-directory=//'` ;;
+       bootdir="`echo "$option" | sed 's/--boot-directory=//'`" ;;
 
     --grub-setup)
-       grub_setup=`argument $option "$@"`; shift;;
+       grub_setup="`argument "$option" "$@"`"; shift;;
     --grub-setup=*)
-       grub_setup=`echo "$option" | sed 's/--grub-setup=//'` ;;
+       grub_setup="`echo "$option" | sed 's/--grub-setup=//'`" ;;
 
     --bootloader-id)
-       bootloader_id=`argument $option "$@"`; shift;;
+       bootloader_id="`argument $option "$@"`"; shift;;
     --bootloader-id=*)
-       bootloader_id=`echo "$option" | sed 's/--bootloader-id=//'` ;;
+       bootloader_id="`echo "$option" | sed 's/--bootloader-id=//'`" ;;
 
     --grub-mkimage)
-       grub_mkimage=`argument $option "$@"`; shift;;
+       grub_mkimage="`argument $option "$@"`"; shift;;
     --grub-mkimage=*)
-       grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;;
+       grub_mkimage="`echo "$option" | sed 's/--grub-mkimage=//'`" ;;
 
     --grub-mkrelpath)
-       grub_mkrelpath=`argument $option "$@"`; shift;;
+       grub_mkrelpath="`argument "$option" "$@"`"; shift;;
     --grub-mkimage=*)
-       grub_mkrelpath=`echo "$option" | sed 's/--grub-mkrelpath=//'` ;;
+       grub_mkrelpath="`echo "$option" | sed 's/--grub-mkrelpath=//'`" ;;
 
     --grub-mkdevicemap)
-       grub_mkdevicemap=`argument $option "$@"`; shift;;
+       grub_mkdevicemap="`argument "$option" "$@"`"; shift;;
     --grub-mkdevicemap=*)
-       grub_mkdevicemap=`echo "$option" | sed 's/--grub-mkdevicemap=//'` ;;
+       grub_mkdevicemap="`echo "$option" | sed 's/--grub-mkdevicemap=//'`" ;;
 
     --grub-probe)
-       grub_probe=`argument $option "$@"`; shift;;
+           grub_probe="`argument "$option" "$@"`"; shift;;
     --grub-probe=*)
-       grub_probe=`echo "$option" | sed 's/--grub-probe=//'` ;;
+       grub_probe="`echo "$option" | sed 's/--grub-probe=//'`" ;;
 
     --no-floppy)
        no_floppy="--no-floppy" ;;
@@ -230,11 +230,11 @@ do
 
     --disk-module)
        if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-           disk_module=`argument $option "$@"`; shift;
+           disk_module="`argument "$option" "$@"`"; shift;
        fi ;;
     --disk-module=*)
        if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-           disk_module=`echo "$option" | sed 's/--disk-module=//'`
+           disk_module="`echo "$option" | sed 's/--disk-module=//'`"
         fi ;;
 
     --no-nvram)
@@ -244,9 +244,9 @@ do
     --debug)
        debug=yes ;;
     --debug-image)
-       debug_image=`argument $option "$@"`; shift;;
+       debug_image="`argument "$option" "$@"`"; shift;;
     --debug-image=*)
-       debug_image=`echo "$option" | sed 's/--debug-image=//'` ;;
+       debug_image="`echo "$option" | sed 's/--debug-image=//'`" ;;
 
     -f | --force)
         setup_force="--force" ;;
@@ -266,9 +266,6 @@ do
     esac
 done
 
-# for make_system_path_relative_to_its_root()
-. ${libdir}/grub/grub-mkconfig_lib
-
 if test "x$install_device" = x && ([ "${target_cpu}-${platform}" = "i386-pc" ] \
     || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
     echo "install_device not specified." 1>&2
@@ -278,7 +275,7 @@ fi
 
 # If the debugging feature is enabled, print commands.
 setup_verbose=
-if test $debug = yes; then
+if test x"$debug" = xyes; then
     set -x
     setup_verbose="--verbose"
     efi_quiet=-q
@@ -286,17 +283,17 @@ fi
 
 if [ -z "$bootdir" ]; then
     # Default bootdir if bootdir not initialized.
-    bootdir=/@bootdirname@
+    bootdir="/@bootdirname@"
 
     if [ -n "$rootdir" ] ; then
         # Initialize bootdir if rootdir was initialized.
-        bootdir=${rootdir}/@bootdirname@
+        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}"
+grubdir="`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'`"
+device_map="${grubdir}/device.map"
+
 
 # Check if GRUB is installed.
 if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
@@ -309,7 +306,7 @@ if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}"
     fi
 fi
 
-set $grub_mkimage dummy
+set "$grub_mkimage" dummy
 if test -f "$1"; then
     :
 else
@@ -317,7 +314,7 @@ else
     exit 1
 fi
 
-set $grub_mkdevicemap dummy
+set "$grub_mkdevicemap" dummy
 if test -f "$1"; then
     :
 else
@@ -328,24 +325,24 @@ fi
 if [ x"$platform" = xefi ]; then
     # Find the EFI System Partition.
     efidir=
-    if test -d ${bootdir}/efi; then
-       install_device=`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${bootdir}/efi`
+    if test -d "${bootdir}/efi"; then
+       install_device="`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${bootdir}/efi"`"
         # Is it a mount point?
-       if test "x$install_device" != "x`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${bootdir}`"; then
-           efidir=${bootdir}/efi
+       if test "x$install_device" != "x`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${bootdir}"`"; then
+           efidir="${bootdir}/efi"
        fi
     elif test -n "$rootdir" && test "x$rootdir" != "x/"; then
         # The EFI System Partition may have been given directly using
         # --root-directory.
-       install_device=`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${rootdir}`
+       install_device="`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${rootdir}"`"
         # Is it a mount point?
-       if test "x$install_device" != "x`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${rootdir}/..`"; then
-           efidir=${rootdir}
+       if test "x$install_device" != "x`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${rootdir}/.."`"; then
+           efidir="${rootdir}"
        fi
     fi
     
     if test -n "$efidir"; then
-       efi_fs=`$grub_probe --target=fs --device-map=${device_map} ${efidir}`
+       efi_fs=`"$grub_probe" --target=fs "--device-map=${device_map}" "${efidir}"`
        if test "x$efi_fs" = xfat; then :; else
            echo "${efidir} doesn't look like an EFI partition." 1>&2
            efidir=
@@ -411,7 +408,7 @@ mkdir -p "$grubdir" || exit 1
 
 # If --recheck is specified, remove the device map, if present.
 if test $recheck = yes; then
-    rm -f $device_map
+    rm -f "$device_map"
 fi
 
 # Create the device map file if it is not present.
@@ -421,11 +418,11 @@ else
     # Create a safe temporary file.
     test -n "$mklog" && log_file=`$mklog`
 
-    $grub_mkdevicemap --device-map=$device_map $no_floppy || exit 1
+    "$grub_mkdevicemap" "--device-map=$device_map" $no_floppy || exit 1
 fi
 
 # Make sure that there is no duplicated entry.
-tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \
+tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' "$device_map" \
     | sort | uniq -d | sed -n 1p`
 if test -n "$tmp"; then
     echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
@@ -433,42 +430,42 @@ if test -n "$tmp"; then
 fi
 
 # Copy the GRUB images to the GRUB directory.
-for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/efiemu??.o; do
-    if test -f $file && [ "`basename $file`" != menu.lst ]; then
-       rm -f $file || exit 1
+for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o; do
+    if test -f "$file" && [ "`basename $file`" != menu.lst ]; then
+       rm -f "$file" || exit 1
     fi
 done
-for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do
-    cp -f $file ${grubdir} || exit 1
+for file in "${pkglibdir}"/*.mod "${pkglibdir}"/*.lst; do
+    cp -f "$file" "${grubdir}" || exit 1
 done
 if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
-    for file in ${pkglibdir}/*.img ${pkglibdir}/efiemu??.o; do
-       if test -f $file; then
-           cp -f $file ${grubdir} || exit 1
+    for file in "${pkglibdir}"/*.img "${pkglibdir}"/efiemu??.o; do
+       if test -f "$file"; then
+           cp -f "$file" "${grubdir}" || exit 1
        fi
     done
 fi
 
 # Copy gettext files
-mkdir -p ${grubdir}/locale/
-for dir in ${localedir}/*; do
+mkdir -p "${grubdir}"/locale/
+for dir in "${localedir}"/*; do
     if test -f "$dir/LC_MESSAGES/grub.mo"; then
         cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo"
     fi
 done
 
 # Write device to a variable so we don't have to traverse /dev every time.
-grub_device=`$grub_probe --target=device ${grubdir}` || exit 1
+grub_device="`"$grub_probe" --device-map="${device_map}" --target=device "${grubdir}"`" || exit 1
 
-if ! test -f ${grubdir}/grubenv; then
-    $grub_editenv ${grubdir}/grubenv create
+if ! test -f "${grubdir}"/grubenv; then
+    "$grub_editenv" "${grubdir}"/grubenv create
 fi
 
 # Create the core image. First, auto-detect the filesystem module.
-fs_module=`$grub_probe --target=fs --device ${grub_device}`
+fs_module="`"$grub_probe" --device-map="${device_map}" --target=fs --device "${grub_device}"`"
 if test "x$fs_module" = x ; then
     echo "Auto-detection of a filesystem of ${grub_device} failed." 1>&2
-    echo "Please report this together with the output of \"$grub_probe --target=fs -v ${grubdir}\" to <bug-grub@gnu.org>" 1>&2
+    echo "Please report this together with the output of \"$grub_probe --device-map=\"${device_map}\" --target=fs -v ${grubdir}\" to <bug-grub@gnu.org>" 1>&2
     exit 1
 fi
 
@@ -476,7 +473,7 @@ fi
 # this command is allowed to fail (--target=fs already grants us that the
 # filesystem will be accessible).
 partmap_module=
-for x in `$grub_probe --target=partmap --device ${grub_device} 2> /dev/null`; do
+for x in "`"$grub_probe" --device-map="${device_map}" --target=partmap --device "${grub_device}" 2> /dev/null`"; do
    case "$x" in
        netbsd | openbsd) 
           partmap_module="$partmap_module part_bsd";;
@@ -486,13 +483,13 @@ for x in `$grub_probe --target=partmap --device ${grub_device} 2> /dev/null`; do
 done
 
 # Device abstraction module, if any (lvm, raid).
-devabstraction_module=`$grub_probe --target=abstraction --device ${grub_device}`
+devabstraction_module="`"$grub_probe" --device-map="${device_map}" --target=abstraction --device "${grub_device}"`"
 
 # The order in this list is critical.  Be careful when modifying it.
 modules="$modules $disk_module"
 modules="$modules $fs_module $partmap_module $devabstraction_module"
 
-relative_grubdir=`make_system_path_relative_to_its_root ${grubdir}` || exit 1
+relative_grubdir="`"$grub_mkrelpath" "${grubdir}"`" || exit 1
 if [ "x${relative_grubdir}" = "x" ] ; then
     relative_grubdir=/
 fi
@@ -500,10 +497,10 @@ fi
 prefix_drive=
 config_opt=
 
-rm -f ${grubdir}/load.cfg
+rm -f "${grubdir}/load.cfg"
 
 if [ "x${debug_image}" != x ]; then
-    echo "set debug='${debug_image}'" >> ${grubdir}/load.cfg
+    echo "set debug='${debug_image}'" >> "${grubdir}/load.cfg"
     config_opt="-c ${grubdir}/load.cfg "
 fi
 
@@ -512,28 +509,28 @@ if [ "x${devabstraction_module}" = "x" ] ; then
       if echo "${install_device}" | grep -qx "(.*)" ; then
         install_drive="${install_device}"
       else
-        install_drive="`$grub_probe --target=drive --device ${install_device}`" || exit 1
+        install_drive="`"$grub_probe" --device-map="${device_map}" --target=drive --device "${install_device}"`" || exit 1
       fi
-      install_drive="`echo ${install_drive} | sed -e s/,[a-z0-9,]*//g`"
+      install_drive="`echo "${install_drive}" | sed -e s/,[a-z0-9,]*//g`"
     fi
-    grub_drive="`$grub_probe --target=drive --device ${grub_device}`" || exit 1
+    grub_drive="`"$grub_probe" --device-map="${device_map}" --target=drive --device "${grub_device}"`" || exit 1
 
     # Strip partition number
-    grub_partition="`echo ${grub_drive} | sed -e 's/^[^,]*[,)]//; s/)$//'`"
-    grub_drive="`echo ${grub_drive} | sed -e s/,[a-z0-9,]*//g`"
+    grub_partition="`echo "${grub_drive}" | sed -e 's/^[^,]*[,)]//; s/)$//'`"
+    grub_drive="`echo "${grub_drive}" | sed -e s/,[a-z0-9,]*//g`"
     if [ "$disk_module" = ata ] ; then
         # generic method (used on coreboot and ata mod)
-        uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
+        uuid="`"$grub_probe" --device-map="${device_map}" --target=fs_uuid --device "${grub_device}"`"
         if [ "x${uuid}" = "x" ] ; then
           echo "UUID needed with ata mod, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
           exit 1
         fi
-        echo "search.fs_uuid ${uuid} root " >> ${grubdir}/load.cfg
-       echo 'set prefix=($root)'"${relative_grubdir}" >> ${grubdir}/load.cfg
+        echo "search.fs_uuid ${uuid} root " >> "${grubdir}/load.cfg"
+       echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/load.cfg"
        config_opt="-c ${grubdir}/load.cfg "
         modules="$modules search_fs_uuid"
     elif [ "x${grub_drive}" != "x${install_drive}" ] ; then
-        uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
+        uuid="`"$grub_probe" --device-map="${device_map}" --target=fs_uuid --device "${grub_device}"`"
         if [ "x${uuid}" = "x" ] ; then
           echo "You attempted a cross-disk install, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
           exit 1
@@ -551,7 +548,7 @@ if [ "x${devabstraction_module}" = "x" ] ; then
        fi
     fi
 else
-    prefix_drive=`$grub_probe --target=drive --device ${grub_device}` || exit 1
+    prefix_drive=`"$grub_probe" --device-map="${device_map}" --target=drive --device "${grub_device}"` || exit 1
 fi
 
 case "${target_cpu}-${platform}" in
@@ -568,33 +565,33 @@ case "${target_cpu}-${platform}" in
 esac
 
 
-$grub_mkimage ${config_opt} -d ${pkglibdir} -O ${mkimage_target} --output=${grubdir}/core.${imgext} --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1
+"$grub_mkimage" ${config_opt} -d "${pkglibdir}" -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} ${bootdir}/grub.elf
+    cp "${grubdir}/core.${imgext}" "${bootdir}"/grub.elf
 elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
-    cp ${grubdir}/core.${imgext} ${grubdir}/grub
+    cp "${grubdir}/core.${imgext}" "${grubdir}/grub"
 elif [ "${target_cpu}-${platform}" = "i386-efi" ] || [ "${target_cpu}-${platform}" = "x86_64-efi" ]; then
-    $grub_mkimage ${config_opt} -d ${pkglibdir} -O ${mkimage_target} --output=${grubdir}/grub.efi --prefix="" $modules || exit 1
+    "$grub_mkimage" ${config_opt} -d "${pkglibdir}" -O ${mkimage_target} --output="${grubdir}/grub.efi" --prefix="" $modules || exit 1
 fi
 
 
 # Perform the platform-dependent install
 if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
     # Now perform the installation.
-    $grub_setup ${allow_floppy} ${setup_verbose} ${setup_force} --directory=${grubdir} \
-       --device-map=${device_map} ${install_device} || exit 1
+    "$grub_setup" ${allow_floppy} ${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
+       set "$ofpathname" dummy
        if test -f "$1"; then
            :
        else
            echo "$1: Not found." 1>&2
            exit 1
        fi
-       set $nvsetenv dummy
+       set "$nvsetenv" dummy
        if test -f "$1"; then
            :
        else
@@ -602,16 +599,16 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
            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` || {
+       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'`
+       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:"
@@ -620,7 +617,7 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
        }
     fi
 elif [ x"$platform" = xefi ]; then
-    cp ${grubdir}/core.${imgext} ${efidir}/${efi_file}
+    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" && \
@@ -643,7 +640,7 @@ elif [ x"$platform" = xefi ]; then
         # 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")"
+       efidir_drive="$(echo "$clean_devmap" | "$grub_probe" --device-map="${device_map}" --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