Release Engineering

This project is intented for all release related issues (isos, installer, etc), under the umbrella of the ArchLinux Release Engineers
Tasklist

FS#50188 - [archiso] PXE booting from EFI fails

Attached to Project: Release Engineering
Opened by Peter Wu (Lekensteyn) - Thursday, 28 July 2016, 18:10 GMT
Last edited by Gerardo Exequiel Pozzi (djgera) - Thursday, 28 July 2016, 21:22 GMT
Task Type Feature Request
Category ArchISO
Status Assigned
Assigned To Gerardo Exequiel Pozzi (djgera)
Architecture All
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 0%
Votes 1
Private No

Details

Description:
The current lpxelinux.0 and .c32 files from syslinux only work for BIOS systems[1] and fails to boot a UEFI system.
Booting efistub (arch/boot/x86_64/vmlinuz) directly fails because the initrd cannot be located.
Main problem is that the EFI version of syslinux and the related ldlinux and .c32 modules are missing.

Had to do some tricks to get a working boot:
cp -a /usr/lib/syslinux/efi64 boot/syslinux/efi64 && cd $_
# make sure that ldlinux.e64 is loaded at the first attempt from arch/ (see below)
mv ldlinux.e64 ../../../
# Clone cfg files to load .c32 files from efi64/ instead of loading 32-bit .c32 for BIOS
for i in ../*.cfg; do sed 's,/syslinux/,&efi64/,' "$i" > "${i#*/}"; done
sed '1i PATH boot/syslinux/efi64/' archiso.cfg -i
# ensure that splash file and other files are reachable
ln -s ../{hdt/,memdisk,splash.png} ./

For some reason, if ldlinux.e64 is not the first loaded file (e.g. you put it in arch/boot/syslinux/) no further files are being retrieved:
---8<---
sent /tmp/archiso/arch/boot/syslinux/efi64/syslinux.efi to 192.168.2.61
file /tmp/archiso/arch/ldlinux.e64 not found
file /tmp/archiso/arch//ldlinux.e64 not found
file /tmp/archiso/arch//boot/isolinux/ldlinux.e64 not found
file /tmp/archiso/arch//isolinux/ldlinux.e64 not found
file /tmp/archiso/arch//boot/syslinuxldlinux.e64 not found
sent /tmp/archiso/arch//boot/syslinux/ldlinux.e64 to 192.168.2.61
error 0 No error, file close received from 192.168.2.61
failed sending /tmp/archiso/arch//boot/syslinux/ldlinux.e64 to 192.168.2.61
---8<---
putting ldlinux.e64 in arch/ successfully continues to the bootloader.

Tested on an ASUSTeK COMPUTER INC. X550ZE/X550ZE, BIOS 206 09/02/2015
Same configuration (but additionally using pxelinux.0 instead of lpxelinux.0) also boots an older Clevo B7130 (not using EFI).

dnsmasq.conf
---8<---
interface=br0
bind-interfaces

# DHCP
dhcp-range=192.168.2.60,192.168.2.64,12h

# For EFI (7 = ia64, 6 = ia32)
dhcp-match=set:efi-ia64,option:client-arch,7

#dhcp-boot=/arch/boot/syslinux/lpxelinux.0
# HACK because lpxelinux.0 cannot seem to load ldlinux.c32
dhcp-boot=/arch/boot/syslinux/pxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=66,192.168.2.1
enable-tftp
tftp-root=/tmp/archiso

dhcp-boot=tag:efi-ia64,/arch/boot/syslinux/efi64/syslinux.efi
dhcp-option-force=tag:efi-ia64,209,boot/syslinux/efi64/archiso.cfg
---8<---


Package versions:
* syslinux 6.03-6
* remastered archlinux-2016.07.01-dual.iso

[1]: http://www.syslinux.org/wiki/index.php?title=PXELINUX#UEFI
This task depends upon

Comment by Gerardo Exequiel Pozzi (djgera) - Thursday, 28 July 2016, 21:18 GMT
  • Field changed: Attached to Project (Arch Linux → Release Engineering)
Not a bug. Sure, PXE EFI is not currently supported. I am glad to merge a patch if you provide it. Thanks.

Loading...