[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [EFI] grub-installer: use grub-efi for EFI machines



Hi Steve

Steve McIntyre <steve@einval.com> writes:

> Hi,
>
> Reasonably simple changes here, again heavily inspired by Ubuntu
> code. One extra issue I found - it looks like /sys and /proc need to
> be mounted in /target when we run the postinst, otherwise we'll fail
> to drive efibootmgr. I've added code to do that here, but I'm not sure
> it's the right way to do it - better suggestions welcome!

>From the debian-installer-utils README file:
in-target: Runs the specified command in /target and returns its exit
status. The debconf passthrough frontend is used to make debconf questions
be asked using cdebconf in the installer. This is especially useful for
running things like dpkg-reconfigure, debconf-apt-progress, and tasksel.
The log-output utility is used to log any output; if in-target is called
with the option --pass-stdout, log-output will respect it.

The README does not say so explicitly but in-target takes care of all
the necessary setup to have a woking chroot in /target including
mounting of /sys and /proc. IMO it's the prefered way to run commands
chrooted to /target even if you don't need the full setup.

Gaudenz

>
> Depends on the libdebian-installer patch to add the "efi" subarch.
>
> -- 
> Steve McIntyre, Cambridge, UK.                                steve@einval.com
> "Because heaters aren't purple!" -- Catherine Pitt
> mr diff: /home/steve/debian/d-i/d-i/packages/grub-installer
> diff --git a/debian/changelog b/debian/changelog
> index 979eddd..0d857fb 100644
> --- a/debian/changelog
> +++ b/debian/changelog
> @@ -1,3 +1,13 @@
> +grub-installer (1.78) unstable; urgency=low
> +
> +  [ Steve McIntyre ]
> +  * Allow grub for amd64/efi and i386/efi, installing grub-efi instead of
> +    grub-pc.
> +  * Make sure that we have /sys and /proc mounted in /target in the
> +    postinst, so that efibootmgr will work ok.
> +
> + -- Steve McIntyre <93sam@debian.org>  Tue, 21 Aug 2012 22:10:40 +0100
> +
>  grub-installer (1.77) unstable; urgency=low
>  
>    [ Cyril Brulebois ]
> diff --git a/debian/isinstallable b/debian/isinstallable
> index e66bac1..c404929 100755
> --- a/debian/isinstallable
> +++ b/debian/isinstallable
> @@ -8,13 +8,6 @@ log() {
>  ARCH="$(archdetect)"
>  
>  case $ARCH in
> -    i386/mac|amd64/mac)
> -	# Note: depends on partman-efi to load the efivars module!
> -	if [ -d /sys/firmware/efi ]; then
> -		log "GRUB not yet usable on Intel-based Macs booted using EFI"
> -		exit 1
> -	fi
> -	;;
>      powerpc/chrp_pegasos)
>  	;;
>      powerpc/*)
> diff --git a/debian/postinst b/debian/postinst
> index b32a1d0..5e001f1 100755
> --- a/debian/postinst
> +++ b/debian/postinst
> @@ -1,2 +1,8 @@
>  #! /bin/sh -e
> +
> +# If we're installing grub-efi, it wants /sys mounted in the
> +# target. Maybe /proc too?
> +mount -t sysfs sys /target/sys || true
> +mount -t proc procfs /target/proc || true
> +
>  grub-installer /target
> diff --git a/grub-installer b/grub-installer
> index a0a4d8c..e9f350e 100755
> --- a/grub-installer
> +++ b/grub-installer
> @@ -312,11 +312,16 @@ case $ARCH in
>  	if [ -d /sys/firmware/efi ]; then
>  		# This point can't be reached (yet).  See debian/isinstallable.
>  		grub_package="grub-efi"
> -		experimental_arch
>  	else
>  		grub_package="grub-pc"
>  	fi
>  	;;
> +    i386/efi|amd64/efi)
> +	grub_package="grub-efi"
> +	;;
> +    i386/*|amd64/*)
> +	grub_package="grub-pc"
> +	;;
>      powerpc/*)
>  	grub_package="grub-ieee1275"
>  	experimental_arch
> @@ -409,10 +414,13 @@ db_progress INFO grub-installer/progress/step_install
>  # to grub legacy, or vice-versa
>  case "$grub_package" in
>      grub)
> -	log-output -t grub-installer $chroot $ROOT dpkg -P grub-pc-bin grub-pc
> +	log-output -t grub-installer $chroot $ROOT dpkg -P grub-pc-bin grub-pc grub-efi grub-efi-amd64-bin grub-efi-amd64 grub-efi-ia32-bin grub-efi-ia32 grub-gfxpayload-lists
>  	;;
>      grub-pc)
> -	log-output -t grub-installer $chroot $ROOT dpkg -P grub grub-legacy
> +	log-output -t grub-installer $chroot $ROOT dpkg -P grub grub-legacy grub-efi grub-efi-amd64-bin grub-efi-amd64 grub-efi-ia32-bin grub-efi-ia32
> +    ;;
> +    grub-efi)
> +	log-output -t grub-installer $chroot $ROOT dpkg -P grub grub-legacy grub-pc-bin grub-pc grub-gfxpayload-lists
>  	;;
>  esac
>  
> @@ -662,7 +670,7 @@ if [ -z "$frdisk" ]; then
>  
>  		CODE=0
>  		case $ARCH:$grub_package in
> -		    *:grub|*:grub-pc|sparc:grub-ieee1275)
> +		    *:grub|*:grub-pc|*:grub-efi|sparc:grub-ieee1275)
>  			info "Running $chroot $ROOT grub-install $grub_install_params \"$bootdev\""
>  			log-output -t grub-installer $chroot $ROOT grub-install $grub_install_params "$bootdev" || CODE=$?
>  			;;
> @@ -675,7 +683,7 @@ if [ -z "$frdisk" ]; then
>  			info "grub-install ran successfully"
>  		else
>  			case $ARCH:$grub_package in
> -			    *:grub|*:grub-pc|sparc:grub-ieee1275)
> +			    *:grub|*:grub-pc|*:grub-efi|sparc:grub-ieee1275)
>  				error "Running 'grub-install $grub_install_params \"$bootdev\"' failed."
>  				;;
>  			    *)
> @@ -962,7 +970,7 @@ if [ "$serial" ] ; then
>  		) >$ROOT/boot/grub/$menu_file.new
>  		mv $ROOT/boot/grub/$menu_file.new $ROOT/boot/grub/$menu_file
>  		;;
> -	    grub-pc)
> +	    grub-pc|grub-efi)
>  		if grep -q "^GRUB_TERMINAL=" $ROOT/etc/default/grub; then
>  			sed -i $ROOT/etc/default/grub -e "s/^\(GRUB_TERMINAL\)=.*/\1=serial/g"
>  		else
>
> mr diff: finished (1 ok)

-- 
Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better.
~ Samuel Beckett ~


Reply to: