Skip to content

Draft: initramfs-tools/hooks/add_modules: add exfat support in initramfs so kexec based bootloader can find ISO under partition pointed by UUID

Fixes #20621


In absence of this patch, when Heads boots from exfat partition's verified detached signed ISO (In debug mode):

DEBUG: eval kexec -d -l /boot/live/vmlinuz --initrd=/boot/live/initrd.img --append="initrd=/live/initrd.img boot=live config live-media=removable nopersistence noprompt timezone=Etc/UTC splash noautologin module=Tails slab_nomerge slub_debug=FZ mce=0 vsyscall=none init_on_free=1 mds=full,nosmt page_alloc.shuffle=1 randomize_kstack_offset=on spec_store_bypass_disable=on FSUUID= quiet  fromiso=/dev/disk/by-uuid/ED96-E06B/tails-amd64-6.8.1.iso img_dev=/dev/disk/by-uuid/ED96-E06B iso-scan/filename=/tails-amd64-6.8.1.iso img_loop=tails-amd64-6.8.1.iso iso=ED96-E06B/tails-amd64-6.8.1.iso"
DEBUG: kexec-select-boot stdout:
LOG: kexec-iso-init stdout: Loading the new kernel:
LOG: kexec-select-boot stdout: Loading the new kernel:
LOG: kexec-iso-init stdout: kexec -d -l /boot/live/vmlinuz --initrd=/boot/live/initrd.img --append="initrd=/live/initrd.img boot=live config live-media=removable nopersistence noprompt timezone=Etc/UTC splash noautologin module=Tails slab_nomerge slub_debug=FZ mce=0 vsyscall=none init_on_free=1 mds=full,nosmt page_alloc.shuffle=1 randomize_kstack_offset=on spec_store_bypass_disable=on FSUUID= quiet  fromiso=/dev/disk/by-uuid/ED96-E06B/tails-amd64-6.8.1.iso img_dev=/dev/disk/by-uuid/ED96-E06B iso-scan/filename=/tails-amd64-6.8.1.iso img_loop=tails-amd64-6.8.1.iso iso=ED96-E06B/tails-amd64-6.8.1.iso"
LOG: kexec-select-boot stdout: kexec -d -l /boot/live/vmlinuz --initrd=/boot/live/initrd.img --append="initrd=/live/initrd.img boot=live config live-media=removable nopersistence noprompt timezone=Etc/UTC splash noautologin module=Tails slab_nomerge slub_debug=FZ mce=0 vsyscall=none init_on_free=1 mds=full,nosmt page_alloc.shuffle=1 randomize_kstack_offset=on spec_store_bypass_disable=on FSUUID= quiet fromiso=/dev/disk/by-uuid/ED96-E06B/tails-amd64-6.8.1.iso img_dev=/dev/disk/by-uuid/ED96-E06B iso-scan/filename=/tails-amd64-6.8.1.iso img_loop=tails-amd64-6.8.1.iso iso=ED96-E06B/tails-amd64-6.8.1.iso"

Analysis: kexec loads iso's kernel and initrd, appending all grub.cfg entry arguments, then appends iso magic additionally known needed parameters to tell initramfs where the iso can be found again (mounted) to resume init ops: fromiso=/dev/disk/by-uuid/ED96-E06B/tails-amd64-6.8.1.iso img_dev=/dev/disk/by-uuid/ED96-E06B iso-scan/filename=/tails-amd64-6.8.1.iso img_loop=tails-amd64-6.8.1.iso iso=ED96-E06B/tails-amd64-6.8.1.iso"

After kexec call, from ISO's intramfs (failing) since no exfat permitting to mount ISO's underlying partition:

Unable to find a medium containing a live file system
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.
Warning: unable to mount /dev/disk/by-uuid/ED96-E06B.

With this patch: ISO is found on exfat partition and livecd boots as expected from Tails debian's defaults modules added into initramfs

Signed-off-by: Thierry Laurion insurgo@riseup.net

Edited by thierry laurion

Merge request reports

Loading