Hey there, I’m setting up my first custom arch install, having used Opensuse/Fedora/Tuxedo in the past with grub.
For now the arch install lives in a QEMU playground, but should eventually share an esp with Windows and Tuxedo. (I plan to shift Tuxedo from Grub to systemd-boot beforehand though)
For a this new setup, I’ve chosen systemd-boot and mkinitcpio with linux-lts. I’ve got the loader configs for sd-boot working with some trial&error. The default preset in mkinitcpio is still not doing what I want though.
Part of this is just me not understanding mountpoints in Arch. I’m used to the esp being mounted to “/boot/efi” with kernels and ramdisks living in something like “boot/efi/arch/{kernelver}-{kernelname}/kernel.img” and executables/UKIs living in “/boot/efi/EFI/Linux/arch/uki.efi”. It seems that packages for kernels and ucode are hardcoded to the esp being at “/boot”. Which does mess with me, but so be it. Mkinitcpio also has a disabled preset to put UKIs in “/efi”, a mountpoint I have never seen used. Given that it references an “EFI”-folder in there, this seems to also want to be the esp-root.
Could someone explain the mountpoint setup in arch to me? And also, is there a point/way to bend the paths to use /boot/efi, or am I better served to just mount the esp at /boot and accept the difference?
Thanks in advance.


You set everything to
/bootbecause that’s the mount point of your boot partition./dev/sda1or whatever gets mounted to/boot/boot/EFI/<NAME>/grubx64.efiand will dump a bunch of files to/boot/grub./etc/default/gruband generate the actual configs withgrub-mkconfig/boot/EFI/systemd/systemd-bootx64.efiand loader configs to/boot/loader/boot/loader/.imgfiles to/boot/If you mount your boot partition to
/boot/efiinstead of just/boot, you’ll have to specify that with command line flags for each of those commands. At first that’s easy enough.grub-mkconfigandgrub-installonly need to be run once. I believe that the same forbootctl.mkinitcpiohowever runs via a pacman hook whenever you update your kernel. You’ll have to ensure that the hook doesn’t default to/boot. I don’t know how to do that though.Better off to just accept the difference IMO. Things will “just work”.