Grub EFI fallback - patches for review

Cyril Brulebois kibi at debian.org
Mon Dec 1 15:51:03 UTC 2014


Steve McIntyre <steve at einval.com> (2014-12-01):
> Hmmm, you're right. There's some existing inconsistencies already,
> which don't help. In various places we already use "EFI" (e.g. in the
> GRUB package names, EFI System Partition etc.) but in others it's
> UEFI. Maybe we'd be better with just EFI everywhere...?

Looking at the EFI/UEFI history, I hope nobody will think EFI is the
deprecated, pre-UEFI implementation. With that in mind, and with all EFI
occurrences we already have (including “mandatory” names), it looks to
my non-expert eye that EFI might be the name to standardize over. Maybe
Colin could confirm that.

> >Did you send the templates for review through debian-l10n-english?
> 
> Nope. They're currently entirely my own set of mistakes written in the
> early hours... :-)

:p

> <snip>
> 
> >> +@@ -846,6 +876,7 @@ main (int argc, char *argv[])
> >> +   char *relative_grubdir;
> >> +   char **efidir_device_names = NULL;
> >> +   grub_device_t efidir_grub_dev = NULL;
> >> ++  char *base_efidir = NULL;
> >> +   char *efidir_grub_devname;
> >> +   int efidir_is_mac = 0;
> >> +   int is_prep = 0;
> >> +@@ -878,6 +909,9 @@ main (int argc, char *argv[])
> >> +       bootloader_id = xstrdup ("grub");
> >> +     }
> >> + 
> >> ++  if (removable && force_extra_removable)
> >> ++    grub_util_error (_("Invalid to use both --removable and --force_extra_removable"));
> >> ++
> >> +   if (!grub_install_source_directory)
> >> +     {
> >> +       if (!target)
> >> +@@ -1087,6 +1121,8 @@ main (int argc, char *argv[])
> >> +       if (!efidir_is_mac && grub_strcmp (fs->name, "fat") != 0)
> >> + 	grub_util_error (_("%s doesn't look like an EFI partition.\n"), efidir);
> >> + 
> >> ++      base_efidir = xstrdup(efidir);
> 
> >Needs a matching free()?
> 
> I wish it was that easy - the code in grub-install.c is a mix of
> styles here. Some allocations are freed immediately, while some stay
> around for the life of the program. This needs to be one of the
> latter, I think.

OK. I suspected that way after having looked a bit, but thought asking
wouldn't hurt.

> <snip>
> 
> >> diff --git a/rescue.d/81grub-efi-force-removable b/rescue.d/81grub-efi-force-removable
> >> new file mode 100644
> >> index 0000000..b35b724
> >> --- /dev/null
> >> +++ b/rescue.d/81grub-efi-force-removable
> >> @@ -0,0 +1,91 @@
> >> +#! /bin/sh -e
> >> +
> >> +. /usr/share/debconf/confmodule
> >> +
> >> +. /usr/share/grub-installer/functions.sh
> >> +
> >> +log () {
> >> +	logger -t grub-installer "grub-efi-force-removable $@"
> >> +}
> >> +
> >> +error () {
> >> +	log "error: $@"
> >> +}
> >> +
> >> +die () {
> >> +	local template="$1"
> >> +	shift
> >> +
> >> +	error "$@"
> >> +	db_input critical "$template" || [ $? -eq 30 ]
> >> +	db_go || true
> >> +	exit 1
> >> +}
> >> +
> >> +mountvirtfs () {
> >> +	fstype="$1"
> >> +	path="$2"
> >> +	if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \
> >> +	   ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then
> >> +		mkdir -p "$path" || \
> >> +			die grub-installer/mounterr "Error creating $path"
> >> +		mount -t "$fstype" "$fstype" "$path" || \
> >> +			die grub-installer/mounterr "Error mounting $path"
> >> +		trap "umount $path" HUP INT QUIT KILL PIPE TERM EXIT
> >> +	fi
> >> +}
> >> +
> >> +db_progress START 0 3 grub-installer/progress/title
> >> +db_progress INFO grub-installer/progress/step_force_efi
> >> +
> >> +# Should we also install grub-efi to the removable media path?
> >> +# Ask the user
> >> +log "Prompting user about removable media path"
> >> +db_input high grub-installer/force-efi-extra-removable
> >> +if ! db_go; then
> >> +	# back up to menu
> >> +	db_progress STOP
> >> +	exit 10
> >> +fi
> >> +db_get grub-installer/force-efi-extra-removable
> >> +if [ "$RET" != true ]; then
> >> +	db_progress STOP
> >> +	exit 0
> >> +fi
> >> +
> >> +db_progress STEP 1
> >> +db_progress INFO grub-installer/progress/step_mount_filesystems
> >> +
> >> +log "Mounting filesystems"
> >> +# If we're installing grub-efi, it wants /sys mounted in the
> >> +# target. Maybe /proc too?
> >> +mountvirtfs proc /target/proc
> >> +mountvirtfs sysfs /target/sys
> >> +chroot /target mount /boot/efi || true
> >> +
> >> +db_progress STEP 1
> >> +db_progress INFO grub-installer/progress/step_install_loader
> >> +# Do the installation now
> >> +log "Running grub-install"
> >> +if ! chroot /target grub-install --force-extra-removable; then
> >
> >in-target?
> 
> Hmmm, maybe. I saw a lot of calls to chroot directly in the
> grub-installer code, and almost none using in-target. There aren't any
> other uses of in-target in the rescue scripts either. I was just
> following existing convention, but I'm happy to switch if it makes
> sense.

Nah, matching the surrounding code looks like a good idea.

> <snip>
> 
> Thanks for the review!

You're very welcome.

> Are you happy with the general approach I'm using?

Well, given a few bug reports and (ISTR) some feedback from
users/reporters, it looks like the way to go, so sure.

Mraw,
KiBi.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-grub-devel/attachments/20141201/94667e2e/attachment-0003.sig>


More information about the Pkg-grub-devel mailing list