[PATCH] installer: operate on FAT image directly
--- It feels cleaner to me to operate directly on the FAT image, rather than constructing the directory on the build filesystem and then copying it into the FAT image at the end. But, I'm wondering if maybe there's a reason it's better to do it the other way that I've missed? installer/default.nix | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/installer/default.nix b/installer/default.nix index f7e84ac..0818091 100644 --- a/installer/default.nix +++ b/installer/default.nix @@ -24,6 +24,7 @@ let esp = runCommand "esp.img" { nativeBuildInputs = [ grub libfaketime dosfstools mtools ]; + grubTargetDir = "${grub}/lib/grub/${grub.grubTarget}"; # Definition copied from util/grub-install-common.c. # Last checked: GRUB 2.06 pkglib_DATA = [ @@ -31,23 +32,23 @@ let "parttool.lst" "video.lst" "crypto.lst" "terminal.lst" "modinfo.sh" ]; } '' - mkdir -p files/grub/${grub.grubTarget} - cp ${grubCfg} files/grub/grub.cfg - cp ${grub}/lib/grub/${grub.grubTarget}/*.mod files/grub/${grub.grubTarget} + truncate -s 15M $out + faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n EFI $out + mmd -i $out ::/EFI ::/EFI/BOOT \ + ::/grub ::/grub/${grub.grubTarget} ::/grub/fonts + + mcopy -i $out ${grubCfg} ::/grub/grub.cfg + mcopy -i $out $grubTargetDir/*.mod ::/grub/${grub.grubTarget} for file in $pkglib_DATA; do - path="${grub}/lib/grub/${grub.grubTarget}/$file" - ! [ -e "$path" ] || cp "$path" files/grub/${grub.grubTarget} + path="$grubTargetDir/$file" + ! [ -e "$path" ] || mcopy -i $out "$path" ::/grub/${grub.grubTarget} done + mcopy -i $out ${grub}/share/grub/unicode.pf2 ::/grub/fonts - install -D ${grub}/share/grub/unicode.pf2 files/grub/fonts/unicode.pf2 grub-mkimage -o grubx64.efi -p "(hd0,gpt1)/grub" -O ${grub.grubTarget} part_gpt fat - install -D grubx64.efi files/EFI/BOOT/BOOTX64.EFI + mcopy -i $out grubx64.efi ::/EFI/BOOT/BOOTX64.EFI - img=$out - truncate -s 15M $img - faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n EFI $img - (cd files; mcopy -psvm -i $img ./* ::) - fsck.vfat -vn $img + fsck.vfat -n $out ''; installer = runCommand "installer.img" { -- 2.33.0
participants (1)
-
Alyssa Ross