From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Ho1mM-0003HG-PA for mharc-grub-devel@gnu.org; Tue, 15 May 2007 14:29:46 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ho1mK-0003EJ-GA for grub-devel@gnu.org; Tue, 15 May 2007 14:29:44 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ho1mH-0003E7-IO for grub-devel@gnu.org; Tue, 15 May 2007 14:29:44 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ho1mH-0003E4-CG for grub-devel@gnu.org; Tue, 15 May 2007 14:29:41 -0400 Received: from aybabtu.com ([69.60.117.155]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Ho1eM-0003Xs-Ec for grub-devel@gnu.org; Tue, 15 May 2007 14:21:31 -0400 Received: from [192.168.10.6] (helo=aragorn) by aybabtu.com with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1Ho1eH-0003bZ-Tr for grub-devel@gnu.org; Tue, 15 May 2007 20:21:28 +0200 Received: from rmh by aragorn with local (Exim 4.63) (envelope-from ) id 1Ho1g1-0000Vn-6M for grub-devel@gnu.org; Tue, 15 May 2007 20:23:13 +0200 Date: Tue, 15 May 2007 20:23:13 +0200 From: Robert Millan To: grub-devel@gnu.org Message-ID: <20070515182313.GA1567@aragorn> References: <20070511160314.GA30111@aragorn> <20070511161134.GA30158@aragorn> <20070511162143.GA30863@aragorn> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" Content-Disposition: inline In-Reply-To: <20070511162143.GA30863@aragorn> Organization: free as in freedom X-Message-Flag: Microsoft discourages use of Outlook. X-Debbugs-No-Ack: true User-Agent: Mutt/1.5.13 (2006-08-11) X-detected-kernel: Genre and OS details not recognized. Subject: new patch X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 May 2007 18:29:45 -0000 --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 honeypot@aybabtu.com. Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list. --RnlQjJ0d97Da+TV1 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="efi.diff" 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@" + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +sbindir=@sbindir@ +bindir=@bindir@ +libdir=@libdir@ +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +target_cpu=@target_cpu@ +platform=@platform@ +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 +} + +# 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 +#include #include #include #include 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 #include #include -#include +#include #include #include --RnlQjJ0d97Da+TV1 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="diff_between_pc_and_efi.diff" --- 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 @@ platform=@platform@ 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 @@ -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." --RnlQjJ0d97Da+TV1--