New patch. Fixed a few errors, enabled grub-install in sbin_SCRIPTS, and made the CLI consistent with the other grub-installs.
The patch works in my qemu environment [1], so I've added it in Debian already. If nobody objects, or reports that the patch is wrong whatsoever, I'll add it to CVS in a few days. Btw, since my new grub-install is based on the PC version and they're very similar, I've also attached a diff between both versions so you can't check more easily. [1] Still, grub boots but can't access my filesystems. But this seems completely unrelated to grub-install, and probably caused by firmware bugs. -- Robert Millan My spam trap is [EMAIL PROTECTED] Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list.
diff -Nur grub2-1.95+20070507.old/conf/i386-efi.rmk grub2-1.95+20070507/conf/i386-efi.rmk --- grub2-1.95+20070507.old/conf/i386-efi.rmk 2007-05-15 19:45:29.000000000 +0200 +++ grub2-1.95+20070507/conf/i386-efi.rmk 2007-05-15 19:45:48.000000000 +0200 @@ -6,7 +6,7 @@ # Utilities. bin_UTILITIES = grub-mkimage -#sbin_UTILITIES = grub-setup grub-mkdevicemap grub-probe +sbin_UTILITIES = grub-mkdevicemap grub-probe #ifeq ($(enable_grub_emu), yes) #sbin_UTILITIES += grub-emu #endif @@ -24,15 +24,16 @@ # kern/fs.c kern/env.c fs/fshelp.c # For grub-mkdevicemap. -#grub_mkdevicemap_SOURCES = util/i386/pc/grub-mkdevicemap.c util/misc.c +grub_mkdevicemap_SOURCES = util/i386/pc/grub-mkdevicemap.c util/misc.c # For grub-probe. -#grub_probe_SOURCES = util/i386/pc/grub-probe.c \ -# util/i386/pc/biosdisk.c util/misc.c util/i386/pc/getroot.c \ -# kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c \ -# fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c \ -# fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c \ -# fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c +grub_probe_SOURCES = util/i386/pc/grub-probe.c \ + util/i386/pc/biosdisk.c util/misc.c util/i386/pc/getroot.c \ + kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c \ + fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c \ + partmap/gpt.c fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c \ + kern/env.c fs/fshelp.c fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c \ + disk/lvm.c disk/raid.c # For grub-emu. grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h \ @@ -63,10 +64,10 @@ grub_emu_LDFLAGS = $(LIBCURSES) # Scripts. -#sbin_SCRIPTS = grub-install +sbin_SCRIPTS = grub-install # For grub-install. -#grub_install_SOURCES = util/efi/pc/grub-install.in +grub_install_SOURCES = util/i386/efi/grub-install.in # Modules. pkgdata_MODULES = kernel.mod normal.mod _chain.mod chain.mod \ diff -Nur grub2-1.95+20070507.old/util/i386/efi/grub-install.in grub2-1.95+20070507/util/i386/efi/grub-install.in --- grub2-1.95+20070507.old/util/i386/efi/grub-install.in 1970-01-01 01:00:00.000000000 +0100 +++ grub2-1.95+20070507/util/i386/efi/grub-install.in 2007-05-15 19:45:40.000000000 +0200 @@ -0,0 +1,212 @@ +#! /bin/sh + +# Install GRUB on your EFI partition. +# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA. + +# Initialize some variables. +transform="@program_transform_name@" + [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ +pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | 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}` +rootdir= +grub_prefix=`echo /boot/grub | sed ${transform}` +modules= + +no_floppy= +force_lba= +recheck=no +debug=no + +# Usage: usage +# Print the usage. +usage () { + cat <<EOF +Usage: grub-install [OPTION] +Install GRUB on your EFI partition. + + -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 + --grub-mkimage=FILE use FILE as grub-mkimage + --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap + --grub-probe=FILE use FILE as grub-probe + --no-floppy do not probe any floppy drive + --recheck probe a device map even if it already exists + +grub-install copies GRUB images into the DIR/boot directory specfied by +--root-directory. + +Report bugs to <[EMAIL PROTECTED]>. +EOF +} + +# Check the arguments. +for option in "$@"; do + case "$option" in + -h | --help) + usage + exit 0 ;; + -v | --version) + echo "grub-install (GNU GRUB ${PACKAGE_VERSION})" + exit 0 ;; + --modules=*) + modules=`echo "$option" | sed 's/--modules=//'` ;; + --root-directory=*) + rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; + --grub-mkimage=*) + grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;; + --grub-mkdevicemap=*) + grub_mkdevicemap=`echo "$option" | sed 's/--grub-mkdevicemap=//'` ;; + --grub-probe=*) + grub_probe=`echo "$option" | sed 's/--grub-probe=//'` ;; + --no-floppy) + no_floppy="--no-floppy" ;; + --recheck) + recheck=yes ;; + # This is an undocumented feature... + --debug) + debug=yes ;; + *) + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 + ;; + esac +done + +# If the debugging feature is enabled, print commands. +if test $debug = yes; then + set -x +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 + +grubdir=${bootdir}/`echo grub | sed ${transform}` +device_map=${grubdir}/device.map + +# Check if GRUB is installed. +set $grub_mkimage dummy +if test -f "$1"; then + : +else + echo "$1: Not found." 1>&2 + exit 1 +fi + +set $grub_mkdevicemap dummy +if test -f "$1"; then + : +else + echo "$1: Not found." 1>&2 + exit 1 +fi + +# Create the GRUB directory if it is not present. +test -d "$bootdir" || mkdir "$bootdir" || exit 1 +test -d "$grubdir" || mkdir "$grubdir" || exit 1 + +# If --recheck is specified, remove the device map, if present. +if test $recheck = yes; then + rm -f $device_map +fi + +# Create the device map file if it is not present. +if test -f "$device_map"; then + : +else + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + + $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 \ + | 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 + exit 1 +fi + +# Copy the GRUB images to the GRUB directory. +for file in ${grubdir}/*.mod ${grubdir}/*.lst; 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 +done + +# Create the core image. First, auto-detect the filesystem module. +fs_module=`$grub_probe --target=fs --device-map=${device_map} ${grubdir}` +if test "x$fs_module" = xfat; then :; else + echo "${grubdir} doesn't look like an EFI partition." 1>&2 + exit 1 +fi + +# Then the partition map module. +partmap_module=`$grub_probe --target=partmap --device-map=${device_map} ${grubdir}` +if test "x$partmap_module" = x -a "x$modules" = x; then + echo "Auto-detection of a partition map module failed." 1>&2 + echo "Please specify the module with the option \`--modules' explicitly." 1>&2 + exit 1 +fi + +# _chain is often useful +modules="$modules $fs_module $partmap_module _chain" + +$grub_mkimage --output=${grubdir}/grub.efi $modules || exit 1 + +# Prompt the user to check if the device map is correct. +echo "Installation finished. No error reported." +echo "This is the contents of the device map $device_map." +echo "Check if this is correct or not. If any of the lines is incorrect," +echo "fix it and re-run the script \`grub-install'." +echo + +cat $device_map + +# Bye. +exit 0 diff -Nur grub2-1.95+20070507.old/util/i386/pc/biosdisk.c grub2-1.95+20070507/util/i386/pc/biosdisk.c --- grub2-1.95+20070507.old/util/i386/pc/biosdisk.c 2007-05-15 19:45:19.000000000 +0200 +++ grub2-1.95+20070507/util/i386/pc/biosdisk.c 2007-05-15 19:45:40.000000000 +0200 @@ -18,7 +18,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <grub/machine/biosdisk.h> +#include <grub/i386/pc/biosdisk.h> #include <grub/disk.h> #include <grub/partition.h> #include <grub/pc_partition.h> diff -Nur grub2-1.95+20070507.old/util/i386/pc/grub-probe.c grub2-1.95+20070507/util/i386/pc/grub-probe.c --- grub2-1.95+20070507.old/util/i386/pc/grub-probe.c 2007-05-15 19:45:19.000000000 +0200 +++ grub2-1.95+20070507/util/i386/pc/grub-probe.c 2007-05-15 19:45:40.000000000 +0200 @@ -26,7 +26,7 @@ #include <grub/fs.h> #include <grub/partition.h> #include <grub/pc_partition.h> -#include <grub/machine/util/biosdisk.h> +#include <grub/i386/pc/util/biosdisk.h> #include <grub/util/getroot.h> #include <grub/term.h>
--- util/i386/pc/grub-install.in 2007-05-07 21:54:46.000000000 +0200 +++ util/i386/efi/grub-install.in 2007-05-15 20:22:05.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh -# Install GRUB on your drive. +# Install GRUB on your EFI partition. # Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it @@ -32,7 +32,6 @@ [EMAIL PROTECTED]@ pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | 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}` @@ -40,7 +39,6 @@ grub_prefix=`echo /boot/grub | sed ${transform}` modules= -install_device= no_floppy= force_lba= recheck=no @@ -50,26 +48,22 @@ # Print the usage. usage () { cat <<EOF -Usage: grub-install [OPTION] install_device -Install GRUB on your drive. +Usage: grub-install [OPTION] +Install GRUB on your EFI partition. -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 - --grub-setup=FILE use FILE as grub-setup --grub-mkimage=FILE use FILE as grub-mkimage --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap --grub-probe=FILE use FILE as grub-probe --no-floppy do not probe any floppy drive --recheck probe a device map even if it already exists -INSTALL_DEVICE can be a GRUB device name or a system device filename. - grub-install copies GRUB images into the DIR/boot directory specfied by ---root-directory, and uses grub-setup to install grub into the boot -sector. +--root-directory. Report bugs to <[EMAIL PROTECTED]>. EOF @@ -88,8 +82,6 @@ modules=`echo "$option" | sed 's/--modules=//'` ;; --root-directory=*) rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; - --grub-setup=*) - grub_setup=`echo "$option" | sed 's/--grub-setup=//'` ;; --grub-mkimage=*) grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;; --grub-mkdevicemap=*) @@ -103,27 +95,14 @@ # This is an undocumented feature... --debug) debug=yes ;; - -*) + *) echo "Unrecognized option \`$option'" 1>&2 usage exit 1 ;; - *) - if test "x$install_device" != x; then - echo "More than one install_devices?" 1>&2 - usage - exit 1 - fi - install_device="${option}" ;; esac done -if test "x$install_device" = x; then - echo "install_device not specified." 1>&2 - usage - exit 1 -fi - # If the debugging feature is enabled, print commands. if test $debug = yes; then set -x @@ -147,14 +126,6 @@ device_map=${grubdir}/device.map # Check if GRUB is installed. -set $grub_setup dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - set $grub_mkimage dummy if test -f "$1"; then : @@ -199,20 +170,19 @@ fi # Copy the GRUB images to the GRUB directory. -for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img; do +for file in ${grubdir}/*.mod ${grubdir}/*.lst; do if test -f $file && [ "`basename $file`" != menu.lst ]; then rm -f $file || exit 1 fi done -for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst ${pkglibdir}/*.img; do +for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do cp -f $file ${grubdir} || exit 1 done # Create the core image. First, auto-detect the filesystem module. fs_module=`$grub_probe --target=fs --device-map=${device_map} ${grubdir}` -if test "x$fs_module" = x -a "x$modules" = x; then - echo "Auto-detection of a filesystem module failed." 1>&2 - echo "Please specify the module with the option \`--modules' explicitly." 1>&2 +if test "x$fs_module" = xfat; then :; else + echo "${grubdir} doesn't look like an EFI partition." 1>&2 exit 1 fi @@ -227,11 +197,7 @@ # _chain is often useful modules="$modules $fs_module $partmap_module _chain" -$grub_mkimage --output=${grubdir}/core.img $modules || exit 1 - -# Now perform the installation. -$grub_setup --directory=${grubdir} --device-map=${device_map} \ - ${install_device} || exit 1 +$grub_mkimage --output=${grubdir}/grub.efi $modules || exit 1 # Prompt the user to check if the device map is correct. echo "Installation finished. No error reported."
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel