A refinement on my previous attempt.
This is how to configure a Jessie live-build environment to boot on UEFI systems, and get a USB key image that works:
# Build a FAT image instead of an ISO image...
lb config -b hdd
# ...and work around #773833
echo "/usr/lib/syslinux/mbr/*.bin /usr/lib/syslinux/" > hooks/9000-fix-773833.chroot
# Get EFI Shell from https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/UefiShell/X64/
curl -o binary/efi/boot/Bootx64.efi https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi
# Configure the EFI shell to boot the live setup
echo 'live\vmlinuz initrd=live\initrd.img append boot=live components' > binary/startup.nsh
Rationale: UEFI understants FAT filesystems, and would run EFI binaries placed under efi/boot.
For a hard drive, it only considers a FAT filesystem on a GPT partition marked with a special UUID, so that it doesn't get confused with other FAT filesystems that are on disk.
For a USB key, it seems that most hardware will happily look for efi/boot
even if the partition table is the old MBR kind.
live-build
can build a FAT image for USB keys, losing the ability to boot on
CDROMs and DVDs. Since I don't need that ability, I can use -b hdd
to get the
live system packaged inside a container that UEFI hardware can understand
(FAT).
At that point, enabling UEFI boot on a Live Debian Jessie is just a matter of
adding an efi/boot/Bootx64.efi
binary that is able to load the kernel and
initrd in memory, and blow life into them.