On the joys of reinstalling systemd-boot…

Because if you have Archlinux and macOS on the same machine, updating the latter prevents you from booting the former…    #archlinux #macos #systemd

This happened to me one-time-too-many, so I am finally noting it down here. I have a Mac Book Pro, where I have Apple’s macOS (forcibly) co-exist with Archlinux. As per the instructions of the very fine Arch Wiki,1 I use systemd-boot as the bootloader, to choose which OS to boot.

And everything ran smoothly ever after—until it was time to update macOS, that is.2 You see, following the (ig)noble tradition of Microsoft’s operating systems, when rebooting after having completed an update, macOS gets a bit full of itself, and simply assumes he owns the place—by which I mean it overrides previous bootloader settings, rendering it impossible to boot up Archlinux. At this point, I would patiently look up the instructions for how to reinstall the boot loader, do it, and then… forget about it. Until it was time to update macOS again… This happened a couple of times, but now I got fed up. So here are the instructions.

Basically you have to boot up from a live USB, mount enough of your existing system in order to be able to chroot into it, do it, and then run the command that sets up the bootloader. In my case, I use disk encryption (the encrypted volume is /dev/sda3), and inside this encrypted volume there are several LVM logical volumes; the one for root (/) is named my-root. Also, I have a separate /boot (/dev/sda1) partition. So the instructions below are for this specific scenario—adapt to your own needs.3

So first, insert the live USB, power up the machine, and hit <F2> until you are shown a list of drives from which to boot up. Select the USB one, and once you are on the prompt of Live Arch, do the following:

# cryptsetup open /dev/sda3 foobar
# mount /dev/mapper/my-root /mnt
# mount /dev/boot /mnt/boot
# arch-chroot /mnt
# bootctl --path=/boot install

The bootloader should be back to its proper functioning form. So exit the chroot (Ctrl-D), unmount what you mounted before, close the encrypted drive, and reboot:

# ^D
# umount /mnt/boot
# umount /mnt
# cryptsetup close foobar
# reboot

Remove the USB drive, and if everything went fine, you should now see the bootloader listing both macOS and Archlinux as options for boot up.

November 15, 2021.

EDIT, February 24, 2022. Slightly amended the instructions to account for the fact that inside the encrypted volume, I have LVM set up.