[syslinux] [ipxe-devel] sanbooting FreeBSD ISO under UEFI

Rick Miller
2017-01-23T15:25:35Z

Whoops, apologies.  The intent was to send this email to ipxe-devel.  I'll
repost to that list.

On Mon, Jan 23, 2017 at 10:12 AM, Shao Miller <ipxe at sha0.net> wrote:

> On 1/23/2017 09:17, Rick Miller via Syslinux wrote:
>
>> Hi all,
>>
>> I currently use iPXE to load memdisk and, subsequently, a FreeBSD disk
>> image to perform an OS installation to disk.  This works great in BIOS,
>> but
>> upcoming requirements make UEFI a prerequisite.  Because memdisk is not
>> UEFI-aware, new UEFI-aware media is necessary.  The current plan is to
>> integrate the installation scripts (currently in the hard drive image)
>> into
>> a bootable FreeBSD ISO (something I?ve previous experience with) and
>> instead of loading it via memdisk, load it directly from iPXE using
>> `sanboot` (or similar).
>>
>> Unfortunately, I have been unable to get iPXE to sanboot an ISO.  It
>> errors
>> citing ?Operation not permitted?.  The current working theory is that
the
>> necessary features aren?t enabled in the current UEFI-aware iPXE
program.
>> This has lead me to the general.h[2] header file where many of the
image
>> types are disabled, including IMAGE_PXE, which seems to be the image
type
>> necessary for PXE booting.  However, uncommenting and building the
>> resulting code via:
>>
>> # pwd
>> /ipxe/src
>> # make bin-x86_64-efi/ipxe.efi
>>
>> produces the following error:
>>
>>    [AR] bin-x86_64-efi/blib.a
>> ar: creating bin-x86_64-efi/blib.a
>>    [HOSTCC] util/elf2efi64
>>    [VERSION] bin-x86_64-efi/version.ipxe.efi.o
>>    [LD] bin-x86_64-efi/ipxe.efi.tmp
>> bin-x86_64-efi/blib.a(librm.o): In function `pm_esp':
>> (.data.pm_esp+0x0): relocation truncated to fit: R_X86_64_32 against
>> symbol
>> `_estack' defined in .stack section in
bin-x86_64-efi/blib.a(stack.o)
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x1): relocation truncated to fit: R_X86_64_PC16
>> against symbol `enable_a20' defined in .text16.early section in
>> bin-x86_64-efi/blib.a(liba20.o)
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x8): relocation truncated to fit: R_X86_64_16
>> against symbol `rm_ds' defined in .text16.data.rm_ds section in
>> bin-x86_64-efi/blib.a(librm.o)
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x22): relocation truncated to fit: R_X86_64_16
>> against `.bss16.rm_virt_addrs'
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x2e): relocation truncated to fit: R_X86_64_16
>> against `.bss16.rm_virt_addrs'
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x33): relocation truncated to fit: R_X86_64_16
>> against `.bss16.rm_virt_addrs'
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x39): relocation truncated to fit: R_X86_64_16
>> against `.data16.gdt'
>> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
>> (.text16.real_to_prot+0x58): relocation truncated to fit: R_X86_64_32
>> against `.text.real_to_prot'
>> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
>> (.text.real_to_prot+0x10): relocation truncated to fit: R_X86_64_32
>> against
>> `.data.pm_esp'
>> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
>> (.text.real_to_prot+0x17): relocation truncated to fit: R_X86_64_32
>> against
>> symbol `idtr32' defined in .data.idtr32 section in
>> bin-x86_64-efi/blib.a(librm_mgmt.o)
>> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
>> (.text.real_to_prot+0x1f): additional relocation overflows omitted from
>> the
>> output
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
>> (.text16.data+0x26): undefined reference to `_data16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
>> (.text16.data+0x2e): undefined reference to `_data16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
>> (.text16.data+0x36): undefined reference to `_text16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
>> (.text16.data+0x3e): undefined reference to `_text16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
>> (.text16.data+0x76): undefined reference to `_data16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
>> (.text16.data+0x82): undefined reference to `_data16_memsz'
>> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
>> (.text16.data+0x86): undefined reference to `_text16_memsz'
>> make: *** [bin-x86_64-efi/ipxe.efi.tmp] Error 1
>> rm bin-x86_64-efi/version.ipxe.efi.o
>>
>> Are there additional options, such as PXE_STACK, that are required when
>> booting a FreeBSD ISO from iPXE under UEFI, but perhaps disabled that
>> might
>> mitigate this error or perhaps this feature is unavailable under UEFI?
>>
>>
>> [1]http://ipxe.org/efi/vision
>> [2]https://git.ipxe.org/ipxe.git/blob/HEAD:/src/config/general.h
>>
>>
> Good day, Rick.
>
> I'll try to "move" the discussion over to the iPXE
mailing-list. :) You
> might consider joining that list: https://lists.ipxe.org/mailman
> /listinfo/ipxe-devel
>
> The following forum-post might be related: http://forum.ipxe.org/showthre
> ad.php?tid=6896&pid=9117#pid9117
> --
> Shao Miller
> Synthetel Corporation
> W: https://www.synthetel.com
>



--
Take care
Rick Miller