* util/grub-install.in: Handle filenames containing spaces.
Reported by: Jordan Uggla. Tested by: Jordan Uggla.
This commit is contained in:
parent
4417aae6b7
commit
5f0c02b3d8
2 changed files with 112 additions and 109 deletions
|
@ -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>
|
2010-11-13 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* util/grub-mkconfig.in (grub_script_check): New variable.
|
* util/grub-mkconfig.in (grub_script_check): New variable.
|
||||||
|
|
|
@ -19,32 +19,32 @@
|
||||||
# Initialize some variables.
|
# Initialize some variables.
|
||||||
transform="@program_transform_name@"
|
transform="@program_transform_name@"
|
||||||
|
|
||||||
prefix=@prefix@
|
prefix="@prefix@"
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix="@exec_prefix@"
|
||||||
sbindir=@sbindir@
|
sbindir="@sbindir@"
|
||||||
bindir=@bindir@
|
bindir="@bindir@"
|
||||||
libdir=@libdir@
|
libdir="@libdir@"
|
||||||
sysconfdir=@sysconfdir@
|
sysconfdir="@sysconfdir@"
|
||||||
PACKAGE_NAME=@PACKAGE_NAME@
|
PACKAGE_NAME=@PACKAGE_NAME@
|
||||||
PACKAGE_TARNAME=@PACKAGE_TARNAME@
|
PACKAGE_TARNAME=@PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION=@PACKAGE_VERSION@
|
PACKAGE_VERSION=@PACKAGE_VERSION@
|
||||||
target_cpu=@target_cpu@
|
target_cpu=@target_cpu@
|
||||||
platform=@platform@
|
platform=@platform@
|
||||||
host_os=@host_os@
|
host_os=@host_os@
|
||||||
pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`
|
pkglibdir="${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`"
|
||||||
localedir=@datadir@/locale
|
localedir="@datadir@/locale"
|
||||||
|
|
||||||
self=`basename $0`
|
self="`basename $0`"
|
||||||
|
|
||||||
grub_setup=${sbindir}/`echo grub-setup | sed ${transform}`
|
grub_setup="${sbindir}/`echo grub-setup | sed ${transform}`"
|
||||||
grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}`
|
grub_mkimage="${bindir}/`echo grub-mkimage | sed ${transform}`"
|
||||||
grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
|
grub_mkdevicemap="${sbindir}/`echo grub-mkdevicemap | sed ${transform}`"
|
||||||
grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
|
grub_probe="${sbindir}/`echo grub-probe | sed ${transform}`"
|
||||||
grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}`
|
grub_editenv="${bindir}/`echo grub-editenv | sed ${transform}`"
|
||||||
grub_mkrelpath=${bindir}/`echo grub-mkrelpath | sed ${transform}`
|
grub_mkrelpath="${bindir}/`echo grub-mkrelpath | sed ${transform}`"
|
||||||
rootdir=
|
rootdir=
|
||||||
bootdir=
|
bootdir=
|
||||||
grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`
|
grubdir="`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`"
|
||||||
modules=
|
modules=
|
||||||
|
|
||||||
install_device=
|
install_device=
|
||||||
|
@ -56,15 +56,15 @@ debug_image=
|
||||||
|
|
||||||
update_nvram=yes
|
update_nvram=yes
|
||||||
|
|
||||||
ofpathname=`which ofpathname`
|
ofpathname="`which ofpathname`"
|
||||||
nvsetenv=`which nvsetenv`
|
nvsetenv="`which nvsetenv`"
|
||||||
efibootmgr=`which efibootmgr 2>/dev/null || true`
|
efibootmgr="`which efibootmgr 2>/dev/null || true`"
|
||||||
removable=no
|
removable=no
|
||||||
efi_quiet=
|
efi_quiet=
|
||||||
|
|
||||||
# Get GRUB_DISTRIBUTOR.
|
# Get GRUB_DISTRIBUTOR.
|
||||||
if test -f ${sysconfdir}/default/grub ; then
|
if test -f "${sysconfdir}/default/grub" ; then
|
||||||
. ${sysconfdir}/default/grub
|
. "${sysconfdir}/default/grub"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bootloader_id="$(echo "$GRUB_DISTRIBUTOR" | tr '[A-Z]' '[a-z]' | cut -d' ' -f1)"
|
bootloader_id="$(echo "$GRUB_DISTRIBUTOR" | tr '[A-Z]' '[a-z]' | cut -d' ' -f1)"
|
||||||
|
@ -140,14 +140,14 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
argument () {
|
argument () {
|
||||||
opt=$1
|
opt="$1"
|
||||||
shift
|
shift
|
||||||
|
|
||||||
if test $# -eq 0; then
|
if test $# -eq 0; then
|
||||||
echo "$0: option requires an argument -- '$opt'" 1>&2
|
echo "$0: option requires an argument -- '$opt'" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo $1
|
echo "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
allow_floppy=""
|
allow_floppy=""
|
||||||
|
@ -179,44 +179,44 @@ do
|
||||||
|
|
||||||
# Accept for compatibility
|
# Accept for compatibility
|
||||||
--root-directory)
|
--root-directory)
|
||||||
rootdir=`argument $option "$@"`; shift;;
|
rootdir="`argument $option "$@"`"; shift;;
|
||||||
--root-directory=*)
|
--root-directory=*)
|
||||||
rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
|
rootdir="`echo "$option" | sed 's/--root-directory=//'`" ;;
|
||||||
|
|
||||||
--boot-directory)
|
--boot-directory)
|
||||||
bootdir=`argument $option "$@"`; shift;;
|
bootdir="`argument $option "$@"`"; shift;;
|
||||||
--boot-directory=*)
|
--boot-directory=*)
|
||||||
bootdir=`echo "$option" | sed 's/--boot-directory=//'` ;;
|
bootdir="`echo "$option" | sed 's/--boot-directory=//'`" ;;
|
||||||
|
|
||||||
--grub-setup)
|
--grub-setup)
|
||||||
grub_setup=`argument $option "$@"`; shift;;
|
grub_setup="`argument "$option" "$@"`"; shift;;
|
||||||
--grub-setup=*)
|
--grub-setup=*)
|
||||||
grub_setup=`echo "$option" | sed 's/--grub-setup=//'` ;;
|
grub_setup="`echo "$option" | sed 's/--grub-setup=//'`" ;;
|
||||||
|
|
||||||
--bootloader-id)
|
--bootloader-id)
|
||||||
bootloader_id=`argument $option "$@"`; shift;;
|
bootloader_id="`argument $option "$@"`"; shift;;
|
||||||
--bootloader-id=*)
|
--bootloader-id=*)
|
||||||
bootloader_id=`echo "$option" | sed 's/--bootloader-id=//'` ;;
|
bootloader_id="`echo "$option" | sed 's/--bootloader-id=//'`" ;;
|
||||||
|
|
||||||
--grub-mkimage)
|
--grub-mkimage)
|
||||||
grub_mkimage=`argument $option "$@"`; shift;;
|
grub_mkimage="`argument $option "$@"`"; shift;;
|
||||||
--grub-mkimage=*)
|
--grub-mkimage=*)
|
||||||
grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;;
|
grub_mkimage="`echo "$option" | sed 's/--grub-mkimage=//'`" ;;
|
||||||
|
|
||||||
--grub-mkrelpath)
|
--grub-mkrelpath)
|
||||||
grub_mkrelpath=`argument $option "$@"`; shift;;
|
grub_mkrelpath="`argument "$option" "$@"`"; shift;;
|
||||||
--grub-mkimage=*)
|
--grub-mkimage=*)
|
||||||
grub_mkrelpath=`echo "$option" | sed 's/--grub-mkrelpath=//'` ;;
|
grub_mkrelpath="`echo "$option" | sed 's/--grub-mkrelpath=//'`" ;;
|
||||||
|
|
||||||
--grub-mkdevicemap)
|
--grub-mkdevicemap)
|
||||||
grub_mkdevicemap=`argument $option "$@"`; shift;;
|
grub_mkdevicemap="`argument "$option" "$@"`"; shift;;
|
||||||
--grub-mkdevicemap=*)
|
--grub-mkdevicemap=*)
|
||||||
grub_mkdevicemap=`echo "$option" | sed 's/--grub-mkdevicemap=//'` ;;
|
grub_mkdevicemap="`echo "$option" | sed 's/--grub-mkdevicemap=//'`" ;;
|
||||||
|
|
||||||
--grub-probe)
|
--grub-probe)
|
||||||
grub_probe=`argument $option "$@"`; shift;;
|
grub_probe="`argument "$option" "$@"`"; shift;;
|
||||||
--grub-probe=*)
|
--grub-probe=*)
|
||||||
grub_probe=`echo "$option" | sed 's/--grub-probe=//'` ;;
|
grub_probe="`echo "$option" | sed 's/--grub-probe=//'`" ;;
|
||||||
|
|
||||||
--no-floppy)
|
--no-floppy)
|
||||||
no_floppy="--no-floppy" ;;
|
no_floppy="--no-floppy" ;;
|
||||||
|
@ -230,11 +230,11 @@ do
|
||||||
|
|
||||||
--disk-module)
|
--disk-module)
|
||||||
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
|
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
|
||||||
disk_module=`argument $option "$@"`; shift;
|
disk_module="`argument "$option" "$@"`"; shift;
|
||||||
fi ;;
|
fi ;;
|
||||||
--disk-module=*)
|
--disk-module=*)
|
||||||
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
|
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
|
||||||
disk_module=`echo "$option" | sed 's/--disk-module=//'`
|
disk_module="`echo "$option" | sed 's/--disk-module=//'`"
|
||||||
fi ;;
|
fi ;;
|
||||||
|
|
||||||
--no-nvram)
|
--no-nvram)
|
||||||
|
@ -244,9 +244,9 @@ do
|
||||||
--debug)
|
--debug)
|
||||||
debug=yes ;;
|
debug=yes ;;
|
||||||
--debug-image)
|
--debug-image)
|
||||||
debug_image=`argument $option "$@"`; shift;;
|
debug_image="`argument "$option" "$@"`"; shift;;
|
||||||
--debug-image=*)
|
--debug-image=*)
|
||||||
debug_image=`echo "$option" | sed 's/--debug-image=//'` ;;
|
debug_image="`echo "$option" | sed 's/--debug-image=//'`" ;;
|
||||||
|
|
||||||
-f | --force)
|
-f | --force)
|
||||||
setup_force="--force" ;;
|
setup_force="--force" ;;
|
||||||
|
@ -266,9 +266,6 @@ do
|
||||||
esac
|
esac
|
||||||
done
|
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" ] \
|
if test "x$install_device" = x && ([ "${target_cpu}-${platform}" = "i386-pc" ] \
|
||||||
|| [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
|
|| [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
|
||||||
echo "install_device not specified." 1>&2
|
echo "install_device not specified." 1>&2
|
||||||
|
@ -278,7 +275,7 @@ fi
|
||||||
|
|
||||||
# If the debugging feature is enabled, print commands.
|
# If the debugging feature is enabled, print commands.
|
||||||
setup_verbose=
|
setup_verbose=
|
||||||
if test $debug = yes; then
|
if test x"$debug" = xyes; then
|
||||||
set -x
|
set -x
|
||||||
setup_verbose="--verbose"
|
setup_verbose="--verbose"
|
||||||
efi_quiet=-q
|
efi_quiet=-q
|
||||||
|
@ -286,17 +283,17 @@ fi
|
||||||
|
|
||||||
if [ -z "$bootdir" ]; then
|
if [ -z "$bootdir" ]; then
|
||||||
# Default bootdir if bootdir not initialized.
|
# Default bootdir if bootdir not initialized.
|
||||||
bootdir=/@bootdirname@
|
bootdir="/@bootdirname@"
|
||||||
|
|
||||||
if [ -n "$rootdir" ] ; then
|
if [ -n "$rootdir" ] ; then
|
||||||
# Initialize bootdir if rootdir was initialized.
|
# Initialize bootdir if rootdir was initialized.
|
||||||
bootdir=${rootdir}/@bootdirname@
|
bootdir="${rootdir}/@bootdirname@"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'`
|
grubdir="`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'`"
|
||||||
device_map=${grubdir}/device.map
|
device_map="${grubdir}/device.map"
|
||||||
grub_probe="${grub_probe} --device-map=${device_map}"
|
|
||||||
|
|
||||||
# Check if GRUB is installed.
|
# Check if GRUB is installed.
|
||||||
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
|
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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set $grub_mkimage dummy
|
set "$grub_mkimage" dummy
|
||||||
if test -f "$1"; then
|
if test -f "$1"; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
|
@ -317,7 +314,7 @@ else
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set $grub_mkdevicemap dummy
|
set "$grub_mkdevicemap" dummy
|
||||||
if test -f "$1"; then
|
if test -f "$1"; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
|
@ -328,24 +325,24 @@ fi
|
||||||
if [ x"$platform" = xefi ]; then
|
if [ x"$platform" = xefi ]; then
|
||||||
# Find the EFI System Partition.
|
# Find the EFI System Partition.
|
||||||
efidir=
|
efidir=
|
||||||
if test -d ${bootdir}/efi; then
|
if test -d "${bootdir}/efi"; then
|
||||||
install_device=`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${bootdir}/efi`
|
install_device="`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${bootdir}/efi"`"
|
||||||
# Is it a mount point?
|
# 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
|
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
|
efidir="${bootdir}/efi"
|
||||||
fi
|
fi
|
||||||
elif test -n "$rootdir" && test "x$rootdir" != "x/"; then
|
elif test -n "$rootdir" && test "x$rootdir" != "x/"; then
|
||||||
# The EFI System Partition may have been given directly using
|
# The EFI System Partition may have been given directly using
|
||||||
# --root-directory.
|
# --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?
|
# 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
|
if test "x$install_device" != "x`"$grub_mkdevicemap" --device-map=/dev/stdout | "$grub_probe" --target=device --device-map=/dev/stdin "${rootdir}/.."`"; then
|
||||||
efidir=${rootdir}
|
efidir="${rootdir}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -n "$efidir"; then
|
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
|
if test "x$efi_fs" = xfat; then :; else
|
||||||
echo "${efidir} doesn't look like an EFI partition." 1>&2
|
echo "${efidir} doesn't look like an EFI partition." 1>&2
|
||||||
efidir=
|
efidir=
|
||||||
|
@ -411,7 +408,7 @@ mkdir -p "$grubdir" || exit 1
|
||||||
|
|
||||||
# If --recheck is specified, remove the device map, if present.
|
# If --recheck is specified, remove the device map, if present.
|
||||||
if test $recheck = yes; then
|
if test $recheck = yes; then
|
||||||
rm -f $device_map
|
rm -f "$device_map"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create the device map file if it is not present.
|
# Create the device map file if it is not present.
|
||||||
|
@ -421,11 +418,11 @@ else
|
||||||
# Create a safe temporary file.
|
# Create a safe temporary file.
|
||||||
test -n "$mklog" && log_file=`$mklog`
|
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
|
fi
|
||||||
|
|
||||||
# Make sure that there is no duplicated entry.
|
# 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`
|
| sort | uniq -d | sed -n 1p`
|
||||||
if test -n "$tmp"; then
|
if test -n "$tmp"; then
|
||||||
echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
|
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
|
fi
|
||||||
|
|
||||||
# Copy the GRUB images to the GRUB directory.
|
# Copy the GRUB images to the GRUB directory.
|
||||||
for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/efiemu??.o; do
|
for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o; do
|
||||||
if test -f $file && [ "`basename $file`" != menu.lst ]; then
|
if test -f "$file" && [ "`basename $file`" != menu.lst ]; then
|
||||||
rm -f $file || exit 1
|
rm -f "$file" || exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do
|
for file in "${pkglibdir}"/*.mod "${pkglibdir}"/*.lst; do
|
||||||
cp -f $file ${grubdir} || exit 1
|
cp -f "$file" "${grubdir}" || exit 1
|
||||||
done
|
done
|
||||||
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
|
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
|
||||||
for file in ${pkglibdir}/*.img ${pkglibdir}/efiemu??.o; do
|
for file in "${pkglibdir}"/*.img "${pkglibdir}"/efiemu??.o; do
|
||||||
if test -f $file; then
|
if test -f "$file"; then
|
||||||
cp -f $file ${grubdir} || exit 1
|
cp -f "$file" "${grubdir}" || exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy gettext files
|
# Copy gettext files
|
||||||
mkdir -p ${grubdir}/locale/
|
mkdir -p "${grubdir}"/locale/
|
||||||
for dir in ${localedir}/*; do
|
for dir in "${localedir}"/*; do
|
||||||
if test -f "$dir/LC_MESSAGES/grub.mo"; then
|
if test -f "$dir/LC_MESSAGES/grub.mo"; then
|
||||||
cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo"
|
cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Write device to a variable so we don't have to traverse /dev every time.
|
# 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
|
if ! test -f "${grubdir}"/grubenv; then
|
||||||
$grub_editenv ${grubdir}/grubenv create
|
"$grub_editenv" "${grubdir}"/grubenv create
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create the core image. First, auto-detect the filesystem module.
|
# 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
|
if test "x$fs_module" = x ; then
|
||||||
echo "Auto-detection of a filesystem of ${grub_device} failed." 1>&2
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -476,7 +473,7 @@ fi
|
||||||
# this command is allowed to fail (--target=fs already grants us that the
|
# this command is allowed to fail (--target=fs already grants us that the
|
||||||
# filesystem will be accessible).
|
# filesystem will be accessible).
|
||||||
partmap_module=
|
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
|
case "$x" in
|
||||||
netbsd | openbsd)
|
netbsd | openbsd)
|
||||||
partmap_module="$partmap_module part_bsd";;
|
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
|
done
|
||||||
|
|
||||||
# Device abstraction module, if any (lvm, raid).
|
# 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.
|
# The order in this list is critical. Be careful when modifying it.
|
||||||
modules="$modules $disk_module"
|
modules="$modules $disk_module"
|
||||||
modules="$modules $fs_module $partmap_module $devabstraction_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
|
if [ "x${relative_grubdir}" = "x" ] ; then
|
||||||
relative_grubdir=/
|
relative_grubdir=/
|
||||||
fi
|
fi
|
||||||
|
@ -500,10 +497,10 @@ fi
|
||||||
prefix_drive=
|
prefix_drive=
|
||||||
config_opt=
|
config_opt=
|
||||||
|
|
||||||
rm -f ${grubdir}/load.cfg
|
rm -f "${grubdir}/load.cfg"
|
||||||
|
|
||||||
if [ "x${debug_image}" != x ]; then
|
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 "
|
config_opt="-c ${grubdir}/load.cfg "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -512,28 +509,28 @@ if [ "x${devabstraction_module}" = "x" ] ; then
|
||||||
if echo "${install_device}" | grep -qx "(.*)" ; then
|
if echo "${install_device}" | grep -qx "(.*)" ; then
|
||||||
install_drive="${install_device}"
|
install_drive="${install_device}"
|
||||||
else
|
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
|
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
|
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
|
# Strip partition number
|
||||||
grub_partition="`echo ${grub_drive} | sed -e 's/^[^,]*[,)]//; s/)$//'`"
|
grub_partition="`echo "${grub_drive}" | sed -e 's/^[^,]*[,)]//; s/)$//'`"
|
||||||
grub_drive="`echo ${grub_drive} | sed -e s/,[a-z0-9,]*//g`"
|
grub_drive="`echo "${grub_drive}" | sed -e s/,[a-z0-9,]*//g`"
|
||||||
if [ "$disk_module" = ata ] ; then
|
if [ "$disk_module" = ata ] ; then
|
||||||
# generic method (used on coreboot and ata mod)
|
# 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
|
if [ "x${uuid}" = "x" ] ; then
|
||||||
echo "UUID needed with ata mod, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
|
echo "UUID needed with ata mod, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "search.fs_uuid ${uuid} root " >> ${grubdir}/load.cfg
|
echo "search.fs_uuid ${uuid} root " >> "${grubdir}/load.cfg"
|
||||||
echo 'set prefix=($root)'"${relative_grubdir}" >> ${grubdir}/load.cfg
|
echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/load.cfg"
|
||||||
config_opt="-c ${grubdir}/load.cfg "
|
config_opt="-c ${grubdir}/load.cfg "
|
||||||
modules="$modules search_fs_uuid"
|
modules="$modules search_fs_uuid"
|
||||||
elif [ "x${grub_drive}" != "x${install_drive}" ] ; then
|
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
|
if [ "x${uuid}" = "x" ] ; then
|
||||||
echo "You attempted a cross-disk install, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
|
echo "You attempted a cross-disk install, but the filesystem containing ${grubdir} does not support UUIDs." 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -551,7 +548,7 @@ if [ "x${devabstraction_module}" = "x" ] ; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
case "${target_cpu}-${platform}" in
|
case "${target_cpu}-${platform}" in
|
||||||
|
@ -568,33 +565,33 @@ case "${target_cpu}-${platform}" in
|
||||||
esac
|
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
|
# Backward-compatibility kludges
|
||||||
if [ "${target_cpu}-${platform}" = "mips-yeeloong" ]; then
|
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
|
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
|
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
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Perform the platform-dependent install
|
# Perform the platform-dependent install
|
||||||
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
|
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
|
||||||
# Now perform the installation.
|
# Now perform the installation.
|
||||||
$grub_setup ${allow_floppy} ${setup_verbose} ${setup_force} --directory=${grubdir} \
|
"$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}" \
|
||||||
--device-map=${device_map} ${install_device} || exit 1
|
--device-map="${device_map}" "${install_device}" || exit 1
|
||||||
elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
|
elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
|
||||||
if [ x"$update_nvram" = xyes ]; then
|
if [ x"$update_nvram" = xyes ]; then
|
||||||
set $ofpathname dummy
|
set "$ofpathname" dummy
|
||||||
if test -f "$1"; then
|
if test -f "$1"; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
echo "$1: Not found." 1>&2
|
echo "$1: Not found." 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
set $nvsetenv dummy
|
set "$nvsetenv" dummy
|
||||||
if test -f "$1"; then
|
if test -f "$1"; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
|
@ -602,16 +599,16 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Get the Open Firmware device tree path translation.
|
# Get the Open Firmware device tree path translation.
|
||||||
dev=`echo $grub_device | sed -e 's/\/dev\///' -e 's/[0-9]\+//'`
|
dev="`echo $grub_device | sed -e 's/\/dev\///' -e 's/[0-9]\+//'`"
|
||||||
partno=`echo $grub_device | sed -e 's/.*[^0-9]\([0-9]\+\)$/\1/'`
|
partno="`echo $grub_device | sed -e 's/.*[^0-9]\([0-9]\+\)$/\1/'`"
|
||||||
ofpath=`$ofpathname $dev` || {
|
ofpath="`$ofpathname $dev`" || {
|
||||||
echo "Couldn't find Open Firmware device tree path for $dev."
|
echo "Couldn't find Open Firmware device tree path for $dev."
|
||||||
echo "You will have to set boot-device manually."
|
echo "You will have to set boot-device manually."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Point boot-device at the new grub install
|
# 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" || {
|
"$nvsetenv" boot-device "$boot_device" || {
|
||||||
echo "$nvsetenv failed."
|
echo "$nvsetenv failed."
|
||||||
echo "You will have to set boot-device manually. At the Open Firmware prompt, type:"
|
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
|
fi
|
||||||
elif [ x"$platform" = xefi ]; then
|
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.
|
# Try to make this image bootable using the EFI Boot Manager, if available.
|
||||||
if test "$removable" = no && test -n "$efi_distributor" && \
|
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
|
# Use fresh device map text to avoid any problems with stale data, since
|
||||||
# all we need here is a one-to-one mapping.
|
# all we need here is a one-to-one mapping.
|
||||||
clean_devmap="$($grub_mkdevicemap --device-map=/dev/stdout)"
|
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
|
if test -z "$efidir_drive"; then
|
||||||
echo "Can't find GRUB drive for $efidir; unable to create EFI Boot Manager entry." >&2
|
echo "Can't find GRUB drive for $efidir; unable to create EFI Boot Manager entry." >&2
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue