When I installed Debian on my MacBookAir4,1 in 2012, there was no way to do it without manual intervention yet. I followed a tutorial on how to boot GRUB from the EFI Boot option in the MacBook EFI Menu. I did not want to fiddle with rEFIt, and I didn’t want to boot GRUB by default. When I want to boot Linux, I press the Option key during power up and select EFI Boot from the Apple boot menu.
Unfortunately, I neglected to collect notes about how I did it manually. However, Linux 3.2 is getting a bit old, so I finally wanted to replace my manual boot configuration with something handled by the package system.
In case you don’t have /boot/efi
in /etc/fstab
yet,
you need to mount /dev/sda1
on /boot/efi
for the following to work.
The documentation I found on the net suggested to just
reinstall grub-efi-amd64
and everything should work.
That is not quite true. When I do
# apt-get install --reinstall grub-efi-amd64
Nothing changes in /boot/efi
.
I sort of expected that /boot/efi/EFI/debian
would be
created, and the EFI image should be placed in there. However,
that did not happen. Why is that?
It turns out that when I installed grub-efi-amd64
manually in 2012, I
created /boot/efi/EFI/boot/bootx64.efi
which is the EFI fallback location,
and apparently exactly what I want on this MacBook which does not support
multiple boot options.
Matthew Garrett posted an interesting article called
Booting with EFI which sheds light on this issue, go and read it.
Looking at /var/lib/dpkg/info/grub-efi-amd64.postinst
revealed
that /boot/efi/EFI/debian
needs to be created manually first.
If this directory does not exist, grub-efi-amd64
basically
does nothing on reinstall.
Running grub-install
will actually create a new EFI image.
However, it is being created in the wrong place for this machine.
# grub-install --target=x86_64-efi
does the trick. Now /boot/efi/EFI/debian/grubx64.efi
gets
created. However, since I don’t want to make GRUB the default,
there is yet another manual step to do:
# cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
Now I can select EFI Boot after pressing the Option key during startup. GRUB is loaded and Linux 3.13 gets booted. Strike!
Looking more closely reveals that there is actually a way to
tell grub-install
that it should install to
the fallback location directly. The --removable
option does that.
For the faint of heart, what does grub-install
actually do
on an EFI system? It does not directly write to the disk, therefore
it does not need a device specified. It looks for files in
/boot/efi
and assumes the EFI partition is mounted there.
So for my use case, the correct way to upgrade to a current GRUB EFI image should have been:
# grub-install --removable --target=x86_64-efi
Meanwhile I’ve been made aware of Bug#708430.
I guess it would be nice to have an option in /etc/default/grub
which would indicate that installation to the fallback location
is desired. While this is a rather ugly hack to work around a stupid
limitation, it is still what I’d like on this MacBook. At least
since I don’t have a triplle boot situation. Fallback location works
fine with just two OSes coexisting.