Calculate required efiboot.img size instead of hardcoding it

Use du to count the file size of the kernel(s), initramfs images and boot loader (and its configuration).
This allows to compress initramfs with something other than xz, or have more than one kernel installed.

Fixes https://gitlab.archlinux.org/archlinux/archiso/-/issues/62 .
This commit is contained in:
nl6720 2020-09-17 14:17:27 +03:00
parent 8c047047ab
commit f34c95797d
No known key found for this signature in database
GPG key ID: 5CE88535E188D369

View file

@ -540,12 +540,21 @@ _make_boot_on_fat() {
# Prepare efiboot.img::/EFI for EFI boot mode
_make_boot_uefi-x64.systemd-boot.esp() {
local efiboot_imgsize="0"
_msg_info "Setting up systemd-boot for UEFI booting..."
install -d -m 0755 -- "${isofs_dir}/EFI/archiso"
efiboot_imgsize="$(( (( (( $(du --apparent-size -bc \
"${airootfs_dir}/usr/lib/systemd/boot/efi/systemd-bootx64.efi" \
"${airootfs_dir}/usr/share/edk2-shell/x64/Shell_Full.efi" \
"${profile}/efiboot/" \
"${airootfs_dir}/boot/vmlinuz-"* \
"${airootfs_dir}/boot/initramfs-"*".img" \
"${airootfs_dir}/boot/"{intel-uc.img,intel-ucode.img,amd-uc.img,amd-ucode.img,early_ucode.cpio,microcode.cpio} \
2>/dev/null | awk 'END {print $1}') / 1048576 )) +1 )) * 1024 ))"
# The FAT image must be created with mkfs.fat not mformat, as some systems have issues with mformat made images:
# https://lists.gnu.org/archive/html/grub-devel/2019-04/msg00099.html
mkfs.fat -C -n ARCHISO_EFI "${isofs_dir}/EFI/archiso/efiboot.img" 65536
mkfs.fat -C -n ARCHISO_EFI "${isofs_dir}/EFI/archiso/efiboot.img" "$efiboot_imgsize"
mmd -i "${isofs_dir}/EFI/archiso/efiboot.img" ::/EFI ::/EFI/BOOT
mcopy -i "${isofs_dir}/EFI/archiso/efiboot.img" \