iso-image: Use fixed-order mcopy instead of file globbing

mcopy file globbing is non-deterministic with respect to the underlying file
system. As a result, the current mcopy approach is less likely to reproduce
efi.img on different machines. We replace mcopy file globbing with
fixed-order mmd and mcopy operations for better determinism. We also use
faketime on mmd for the same reason. We use faketime, mmd, and mcopy
directly, becase they are already in PATH.

Thank misuzu@ for the feedback.
This commit is contained in:
Ning Shang 2021-04-16 10:15:25 -07:00
parent 2f48585f3f
commit e3cd644458
No known key found for this signature in database
GPG Key ID: 3C611CCC3C31E6E8

View File

@ -415,7 +415,24 @@ let
echo "Image size: $image_size"
truncate --size=$image_size "$out"
faketime "2000-01-01 00:00:00" mkfs.vfat -i 12345678 -n EFIBOOT "$out"
mcopy -psvm -i "$out" ./EFI ./boot ::
# Force a fixed order in mcopy for better determinism, and avoid file globbing
for d in $(find EFI -type d | sort); do
faketime "2000-01-01 00:00:00" mmd -i "$out" "::/$d"
done
for d in $(find boot -type d | sort); do
faketime "2000-01-01 00:00:00" mmd -i "$out" "::/$d"
done
for f in $(find EFI -type f | sort); do
mcopy -pvm -i "$out" "$f" "::/$f"
done
for f in $(find boot -type f | sort); do
mcopy -pvm -i "$out" "$f" "::/$f"
done
# Verify the FAT partition.
fsck.vfat -vn "$out"
''; # */