Autodetect platform in grub-install but allow override.

* util/grub-install.in: Autodetect platform. Support --target and
	--directory. Read platform from modinfo.sh.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2012-02-27 16:06:18 +01:00
parent b913642798
commit 90cb2803d4
2 changed files with 142 additions and 93 deletions

View file

@ -1,3 +1,10 @@
2012-02-27 Vladimir Serbinenko <phcoder@gmail.com>
Autodetect platform in grub-install but allow override.
* util/grub-install.in: Autodetect platform. Support --target and
--directory. Read platform from modinfo.sh.
2012-02-27 Vladimir Serbinenko <phcoder@gmail.com>
Support btrfs multi-volume probe.

View file

@ -29,10 +29,9 @@ 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}/@PACKAGE@/${target_cpu}-${platform}"
source_dir=
target=
datadir="@datadir@"
if [ "x$pkgdatadir" = x ]; then
pkgdatadir="${datadir}/@PACKAGE@"
@ -71,33 +70,24 @@ if test -z "$bootloader_id"; then
bootloader_id=grub
fi
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
disk_module=biosdisk
elif [ "${platform}" = "ieee1275" ] || [ "${platform}" = "efi" ] ; then
disk_module=
else
disk_module=native
fi
disk_module=unspecified
. "${pkgdatadir}/grub-mkconfig_lib"
# Usage: usage
# Print the usage.
usage () {
if [ "${target_cpu}-${platform}" = "i386-pc" ] \
|| [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]; then
gettext_printf "Usage: %s [OPTION] INSTALL_DEVICE" "$self"
else
gettext_printf "Usage: %s [OPTION] [INSTALL_DEVICE]" "$self"
fi
gettext_printf "Usage: %s [OPTION] [INSTALL_DEVICE]" "$self"
echo
gettext "Install GRUB on your drive." ; echo
echo
printf " -h, --help %s\n" "$(gettext "print this message and exit")"
printf " -v, --version %s\n" "$(gettext "print the version information and exit")"
printf " --modules=%-14s%s\n" "$(gettext "MODULES")" "$(gettext "pre-load specified modules MODULES")"
dirmsg="$(printf "install GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")"
dirmsg="$(gettext_printf "install GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")"
printf " --boot-directory=%-7s%s\n" "$(gettext "DIR")" "$dirmsg"
printf " --target=%-15s%s\n" "$(gettext "TARGET")" "$(gettext "install GRUB for TARGET platform [default=current]")"
printf " --directory=%-12s%s\n" "$(gettext "DIR")" "$(gettext "use GRUB images from DIR. Takes precedence over target")"
printf " --grub-setup=%-11s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-setup")"
printf " --grub-mkimage=%-9s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-mkimage")"
printf " --grub-mkrelpath=%-7s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-mkrelpath")"
@ -106,17 +96,10 @@ usage () {
printf " --recheck %s\n" "$(gettext "delete device map if it already exists")"
printf " --force %s\n" "$(gettext "install even if problems are detected")"
printf " --force-file-id %s\n" "$(gettext "use ID file even if UUID is available")"
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
printf " --disk-module=%-10s%s\n" "$(gettext "MODULE")" "$(gettext "disk module to use (biosdisk or native)")"
fi
if [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] ; then
printf " --no-nvram %s\n" "$(gettext "don't update the \`boot-device' NVRAM variable")"
fi
if [ "${platform}" = "efi" ]; then
printf " --removable %s\n" "$(gettext "the installation device is removable")"
printf " --bootloader-id=%-8s%s\n" "$(gettext "ID")" "$(gettext "the ID of bootloader.")"
fi
printf " --disk-module=%-10s%s\n" "$(gettext "MODULE")" "$(gettext "disk module to use (biosdisk or native). Only available on BIOS target")"
printf " --no-nvram %s\n" "$(gettext "don't update the \`boot-device' NVRAM variable. Only available on IEEE1275 targets.")"
printf " --removable %s\n" "$(gettext "the installation device is removable. Only available on EFI.")"
printf " --bootloader-id=%-8s%s\n" "$(gettext "ID")" "$(gettext "the ID of bootloader. Only available on EFI.")"
echo
gettext "INSTALL_DEVICE must be system device filename.";echo
echo
@ -180,6 +163,16 @@ do
--boot-directory=*)
bootdir="`echo "$option" | sed 's/--boot-directory=//'`" ;;
--directory | -d)
source_dir="`argument $option "$@"`"; shift;;
--directory=*)
source_dir="`echo "$option" | sed 's/--directory=//'`" ;;
--target)
target="`argument $option "$@"`"; shift;;
--target=*)
target="`echo "$option" | sed 's/--target=//'`" ;;
--grub-setup)
grub_setup="`argument "$option" "$@"`"; shift;;
--grub-setup=*)
@ -222,13 +215,11 @@ do
allow_floppy="--allow-floppy" ;;
--disk-module)
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
disk_module="`argument "$option" "$@"`"; shift;
fi ;;
disk_module="`argument "$option" "$@"`"; shift;
;;
--disk-module=*)
if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
disk_module="`echo "$option" | sed 's/--disk-module=//'`"
fi ;;
disk_module="`echo "$option" | sed 's/--disk-module=//'`"
;;
--no-nvram)
update_nvram=no ;;
@ -260,26 +251,77 @@ do
esac
done
if test "x$grub_setup" = x && [ "${target_cpu}-${platform}" = "i386-pc" ]; then
if [ x$source_dir = x ]; then
if [ x$target = x ]; then
case x"`uname -m`" in
x"powerpc"* | x"ppc"*)
target="powerpc-ieee1275";;
x"sparc"*)
target="sparc64-ieee1275";;
x"mips"*"el")
target="mipsel-loongson";;
x"mips"*)
target="mips-arc";;
x"ia64"*)
target="ia64-efi";;
x"x86_64"* | x"amd64"*)
if [ -d /sys/firmware/efi ]; then
target="x86_64-efi"
fi
target=i386-pc;;
x"i"?"86"*)
if [ -d /sys/firmware/efi ]; then
target="i386-efi"
fi
if [ -e /proc/device-tree ]; then
target="i386-ieee1275"
fi
target=i386-pc;;
*)
gettext "Unable to determine your platform. Use --target." ;
echo ;;
esac
fi
source_dir="${libdir}/@PACKAGE@/$target"
fi
if ! [ -d "source_dir" ]; then
gettext_printf "%s doesn't seem to exist. Please specify --target or --directory\\n" "source_dir"
exit 1
fi
. "${source_dir}"/modinfo.sh
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] ; then
if [ x$disk_module = xunspecified ]; then
disk_module=biosdisk
fi
elif [ "${grub_modinfo_platform}" = "ieee1275" ] || [ "${grub_modinfo_platform}" = "efi" ] ; then
disk_module=
else
disk_module=native
fi
if test "x$grub_setup" = x && [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ]; then
grub_setup="${sbindir}/`echo grub-bios-setup | sed ${transform}`"
fi
if test "x$grub_setup" = x && [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]; then
if test "x$grub_setup" = x && [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ]; then
grub_setup="${sbindir}/`echo grub-sparc64-setup | sed ${transform}`"
fi
if test "x$install_device" = x && ([ "${target_cpu}-${platform}" = "i386-pc" ] \
|| [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
if test "x$install_device" = x && ([ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] \
|| [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ]); then
gettext "Install device isn't specified." 1>&2
echo 1>&2
usage
exit 1
fi
if ! ([ "${target_cpu}-${platform}" = "i386-pc" ] \
|| [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] \
|| [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] \
|| [ "${target_cpu}-${platform}" = "mips-arc" ]); then
if ! ([ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] \
|| [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] \
|| [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ] \
|| [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "mips-arc" ]); then
install_device=
fi
@ -306,7 +348,7 @@ device_map="${grubdir}/device.map"
# Check if GRUB is installed.
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
set $grub_setup dummy
if test -f "$1"; then
:
@ -324,7 +366,7 @@ else
exit 1
fi
if [ x"$platform" = xefi ]; then
if [ x"$grub_modinfo_platform" = xefi ]; then
# Find the EFI System Partition.
efidir=
if test -d "${bootdir}/efi"; then
@ -370,7 +412,7 @@ if [ x"$platform" = xefi ]; then
# from them. The image must always reside under /EFI/BOOT, and it
# must have a specific file name depending on the architecture.
efi_distributor=BOOT
case "$target_cpu" in
case "$grub_modinfo_target_cpu" in
i386)
efi_file=BOOTIA32.EFI ;;
x86_64)
@ -384,7 +426,7 @@ if [ x"$platform" = xefi ]; then
else
# It is convenient for each architecture to have a different
# efi_file, so that different versions can be installed in parallel.
case "$target_cpu" in
case "$grub_modinfo_target_cpu" in
i386)
efi_file=grubia32.efi ;;
x86_64)
@ -413,7 +455,7 @@ fi
# Create the GRUB directory if it is not present.
mkdir -p "$grubdir" || exit 1
mkdir -p "$grubdir/${target_cpu}-$platform" || exit 1
mkdir -p "$grubdir/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
# If --recheck is specified, remove the device map, if present.
if test $recheck = yes; then
@ -434,18 +476,18 @@ else
fi
# Copy the GRUB images to the GRUB directory.
for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o "${grubdir}"/${target_cpu}-$platform/*.mod "${grubdir}"/${target_cpu}-$platform/*.lst "${grubdir}"/${target_cpu}-$platform/*.img "${grubdir}"/${target_cpu}-$platform/efiemu??.o; do
for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.mod "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.lst "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.img "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/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}/${target_cpu}-$platform" || exit 1
for file in "${source_dir}"/*.mod "${source_dir}"/*.lst; do
cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || 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 [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
for file in "${source_dir}"/*.img "${source_dir}"/efiemu??.o; do
if test -f "$file"; then
cp -f "$file" "${grubdir}/${target_cpu}-$platform" || exit 1
cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
fi
done
fi
@ -468,7 +510,7 @@ if test -f "${pkgdatadir}"/unicode.pf2; then
cp "${pkgdatadir}"/unicode.pf2 "${grubdir}"/fonts
fi
is_path_readable_by_grub "${grubdir}/${target_cpu}-$platform" || (echo "${grubdir}" not readable 1>&2 ; exit 1)
is_path_readable_by_grub "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || (echo "${grubdir}" not readable 1>&2 ; exit 1)
# Write device to a variable so we don't have to traverse /dev every time.
grub_device="`"$grub_probe" --device-map="${device_map}" --target=device "${grubdir}"`" || exit 1
@ -510,7 +552,7 @@ fi
if [ "x$disk_module" = xnative ]; then
disk_module="pata ahci ohci"
if [ "x$target_cpu" = "xi386" ] || [ "x$target_cpu" = "xx86_64" ]; then
if [ "x$grub_modinfo_target_cpu" = "xi386" ] || [ "x$grub_modinfo_target_cpu" = "xx86_64" ]; then
disk_module="$disk_module uhci"
fi
disk_module="$disk_module usbms"
@ -528,11 +570,11 @@ fi
prefix_drive=
config_opt=
rm -f "${grubdir}/${target_cpu}-$platform/load.cfg"
rm -f "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
if [ "x${debug_image}" != x ]; then
echo "set debug='${debug_image}'" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
echo "set debug='${debug_image}'" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
fi
if [ "x${devabstraction_module}" = "x" ] ; then
@ -549,7 +591,7 @@ if [ "x${devabstraction_module}" = "x" ] ; then
# Strip partition number
grub_partition="`echo "${grub_drive}" | sed -e 's/^(\(\([^,\\\\]\|\\\\\\\\\|\\\\,\)*\)\(\(,[a-zA-Z0-9]*\)*\))$/\3/'`"
grub_drive="`echo "${grub_drive}" | sed -e 's/^(\(\([^,\\\\]\|\\\\\\\\\|\\\\,\)*\)\(\(,[a-zA-Z0-9]*\)*\))$/\1/'`"
if ([ "x$disk_module" != x ] && [ "x$disk_module" != xbiosdisk ]) || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$platform" != xefi ] && [ "x$platform" != xpc ] && [ x"${platform}" != x"ieee1275" ]); then
if ([ "x$disk_module" != x ] && [ "x$disk_module" != xbiosdisk ]) || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$grub_modinfo_platform" != xefi ] && [ "x$grub_modinfo_platform" != xpc ] && [ x"${grub_modinfo_platform}" != x"ieee1275" ]); then
# generic method (used on coreboot and ata mod)
uuid=
if [ x"$force_file_id" != xy ]; then
@ -558,31 +600,31 @@ if [ "x${devabstraction_module}" = "x" ] ; then
if [ x"$disk_module" != x ] && [ x"$disk_module" != xbiosdisk ]; then
hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=baremetal_hints --device`"
elif [ x"$platform" = xpc ]; then
elif [ x"$grub_modinfo_platform" = xpc ]; then
hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=bios_hints --device`"
elif [ x"$platform" = xefi ]; then
elif [ x"$grub_modinfo_platform" = xefi ]; then
hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=efi_hints --device`"
elif [ x"$platform" = xieee1275 ]; then
elif [ x"$grub_modinfo_platform" = xieee1275 ]; then
hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=ieee1275_hints --device`"
elif [ x"$platform" = xloongson ] || [ x"$platform" = xqemu ] || [ x"$platform" = xcoreboot ] || [ x"$platform" = xmultiboot ] || [ x"$platform" = xqemu-mips ]; then
elif [ x"$grub_modinfo_platform" = xloongson ] || [ x"$grub_modinfo_platform" = xqemu ] || [ x"$grub_modinfo_platform" = xcoreboot ] || [ x"$grub_modinfo_platform" = xmultiboot ] || [ x"$grub_modinfo_platform" = xqemu-mips ]; then
hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=baremetal_hints --device`"
else
gettext "No hints available for your platform. Expect reduced performance" 1>&2
gettext "No hints available for your grub_modinfo_platform. Expect reduced performance" 1>&2
echo 1>&2
hints=
fi
if [ x"$uuid" != x ]; then
echo "search.fs_uuid ${uuid} root $hints " >> "${grubdir}/${target_cpu}-$platform/load.cfg"
echo "search.fs_uuid ${uuid} root $hints " >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
search_module=search_fs_uuid
else
mkdir -p "${grubdir}/uuid"
file="`mktemp "${grubdir}/uuid/XXXXXXXXXXXXXXXXXXXXXXXXX"`"
relfile="`${grub_mkrelpath} "$file"`"
echo "search.file '${relfile}' root $hints " >> "${grubdir}/${target_cpu}-$platform/load.cfg"
echo "search.file '${relfile}' root $hints " >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
search_module=search_fs_file
fi
echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
modules="$modules $search_module"
else
# we need to hardcode the partition number in the core image's prefix.
@ -596,21 +638,21 @@ if [ "x${devabstraction_module}" = "x" ] ; then
else
if [ x$GRUB_CRYPTODISK_ENABLE = xy ]; then
for uuid in "`echo "${grub_device}" | xargs "${grub_probe}" --target=cryptodisk_uuid --device`"; do
echo "cryptomount -u $uuid" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
echo "cryptomount -u $uuid" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
done
config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
fi
prefix_drive=`"$grub_probe" --device-map="${device_map}" --target=drive --device "${grub_device}"` || exit 1
fi
case "${target_cpu}-${platform}" in
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
sparc64-ieee1275) mkimage_target=sparc64-ieee1275-raw ;;
mipsel-loongson) mkimage_target=mipsel-loongson-elf ;;
*) mkimage_target="${target_cpu}-${platform}" ;;
*) mkimage_target="${grub_modinfo_target_cpu}-${grub_modinfo_platform}" ;;
esac
case "${target_cpu}-${platform}" in
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
i386-efi | x86_64-efi) imgext=efi ;;
mipsel-loongson | i386-coreboot | i386-multiboot | i386-ieee1275 \
| powerpc-ieee1275) imgext=elf ;;
@ -618,24 +660,24 @@ case "${target_cpu}-${platform}" in
esac
"$grub_mkimage" ${config_opt} -d "${pkglibdir}" -O ${mkimage_target} --output="${grubdir}/${target_cpu}-$platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
"$grub_mkimage" ${config_opt} -d "${source_dir}" -O ${mkimage_target} --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
# Backward-compatibility kludges
if [ "${target_cpu}-${platform}" = "mipsel-loongson" ]; then
cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${bootdir}"/grub.elf
elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
cp "${grubdir}/${target_cpu}-$platform/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}/${target_cpu}-$platform/grub.efi" --prefix="" $modules || exit 1
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "mipsel-loongson" ]; then
cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${bootdir}"/grub.elf
elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ]; then
cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${grubdir}/grub"
elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-efi" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "x86_64-efi" ]; then
"$grub_mkimage" ${config_opt} -d "${source_dir}" -O ${mkimage_target} --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/grub.efi" --prefix="" $modules || exit 1
fi
# Perform the platform-dependent install
if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
# Perform the grub_modinfo_platform-dependent install
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
# Now perform the installation.
"$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}/${target_cpu}-$platform" \
"$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" \
--device-map="${device_map}" "${install_device}" || exit 1
elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ]; then
if [ x"$update_nvram" = xyes ]; then
ofpathname="`which ofpathname`"
nvsetenv="`which nvsetenv`"
@ -662,10 +704,10 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
}
# Point boot-device at the new grub install
boot_device="$ofpath:$partno,"`"$grub_mkrelpath" "${grubdir}/${target_cpu}-$platform/core.${imgext}" | sed 's,/,\\\\,g'`
boot_device="$ofpath:$partno,"`"$grub_mkrelpath" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" | sed 's,/,\\\\,g'`
# If a install device is defined, copy the core.elf to PReP partition.
if [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] \
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ] \
&& [ -n "${install_device}" ]; then
if [ "$("${grub_probe}" -m "${device_map}" -d "${install_device}" -t msdos_parttype)" != "41" ]; then
gettext "The chosen partition is not a PReP partition." 1>&2
@ -676,7 +718,7 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
if [ "$(file -s "${install_device}" -b | awk '{ print $1 }')" = ELF ] || [ $(cmp /dev/zero "${install_device}" &>/dev/null) ]; then
# Change boot device to the harddisk root
boot_device="$ofpath"
dd if="${grubdir}/${target_cpu}-$platform/core.${imgext}" of="${install_device}" status=noxfer || {
dd if="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" of="${install_device}" status=noxfer || {
gettext "Failed to copy Grub to the PReP partition." 1>&2
echo 1>&2
exit 1
@ -698,15 +740,15 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
exit 1
}
fi
elif [ x"${target_cpu}-${platform}" = xmips-arc ]; then
dvhtool -d "${install_device}" --unix-to-vh "{grubdir}/${target_cpu}-$platform/core.${imgext}" grub
elif [ x"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = xmips-arc ]; then
dvhtool -d "${install_device}" --unix-to-vh "{grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" grub
gettext "You will have to set SystemPartition and OSLoader manually." 1>&2
echo 1>&2
elif [ x"$platform" = xefi ]; then
cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${efidir}/${efi_file}"
elif [ x"$grub_modinfo_platform" = xefi ]; then
cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${efidir}/${efi_file}"
# For old macs. Suggested by Peter Jones.
if [ x$target_cpu = xi386 ]; then
cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${efidir}/boot.efi"
if [ x$grub_modinfo_target_cpu = xi386 ]; then
cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${efidir}/boot.efi"
fi
# Try to make this image bootable using the EFI Boot Manager, if available.