UEFI PXE BOOT



  • I’ve got some problems to make works boot PXE UEFI.
    I’ve got this problem with new dell lattitude 5580.

    BIOS configuration :

    Secure Boot - Secure Boot Enable - Disabled
    Advanced Boot Options - Enable Legacy Option ROMs
    System Configuration - Integrated NIC - Enable UEFI Network Stack - Enabled w/PXE
    Boot Sequence -
         Onboard NIC (IPV4)
         Windows Boot Manager
    

    I use FOG 1.5.0 (@IP : 192.168.39.243)
    I dont use the DHCPD server of FOG but my own DHCPD server (isc-dhcp-server).
    Before trying use UEFI PXE boot everything worked fine with only LEGACY .
    I followed this article : https://wiki.fogproject.org/wiki/index.php?title=BIOS_and_UEFI_Co-Existence#Example_1
    And then add to my dhcpd.conf these lines :

    General options

    option space PXE;
    option PXE.mtftp-ip    code 1 = ip-address;
    option PXE.mtftp-cport code 2 = unsigned integer 16;
    option PXE.mtftp-sport code 3 = unsigned integer 16;
    option PXE.mtftp-tmout code 4 = unsigned integer 8;
    option PXE.mtftp-delay code 5 = unsigned integer 8;
    option arch code 93 = unsigned integer 16; # RFC4578
    

    Subnet options :

    next-server 192.168.39.243;
     class "UEFI-32-1" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00006";
        filename "i386-efi/ipxe.efi";
        }
        class "UEFI-32-2" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00002";
         filename "i386-efi/ipxe.efi";
        }
        class "UEFI-64-1" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007";
         filename "ipxe.efi";
        }
        class "UEFI-64-2" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008";
        filename "ipxe.efi";
        }
        class "UEFI-64-3" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009";
         filename "ipxe.efi";
        }
        class "Legacy" {
        match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000";
        #filename "undionly.kkpxe";
        filename "ipxe.pxe"; 
        }
    

    The computer boot PXE correctly and i’ve got the PXE menu.
    But after that when i choose “Boot from hard disk”, i’ve got the
    "chainloading failed…" error message.
    I cant understand what is the problem.
    Does someone could help me ?


  • Developer

    @plegrand UEFI implementations can be a real pain. It’s meant to be Kind of universal but everyone is just doing his/her own thing. So some UEFI clients work great while others just don’t want to play nicely. There is not much we can do about it. Well, you can try using rEFInd and start playing with the config file. If you are lucky it’s justa matter of finding the right options.



  • @sebastian-roth
    I tryed with different type without success.
    Then i configured all computers with legacy boot.
    Then no more problem ;-)



  • @sebastian-roth @Quazz
    I tryed
    Sanboot : loop in menu
    REFIND_EFI : launch a strange windows and stuck on dell logo
    exit : chainloading failed…

    Do i have to try GRUB option ?

    GRUB_FIRST_HDD : loop in menu
    GRUB_FIRST_FOUND_WINDOWS : loop in menu


  • Developer

    @plegrand Clients that boot from hard disk after the menu use different mechanisms. In FOG we call this exit type. You can configure the exit type used per host and globally. Please check this host’s settings and try different types to see which one works for this client in UEFI mode.


  • Moderator

    @plegrand The EFI Exit Type



  • @quazz
    Hello and thanks for your answer
    Here is actually the configuration for the host

    0_1530268484351_32ac7580-ec1e-41a1-a4b0-ad625ff62bd4-image.png

    What i have to modify ?


  • Moderator

    You can change the “Boot from hard disk” method globally, per group or per host.

    Change EFI Exit Type from sanboot to something like rEFInd



  • As i saw that host had this message : host is pending approval
    I was able to approve it (qwerty keyboard…)
    Then i can see the dell computer in fog and see that it has more than one Mac address.
    Could it be the problem ?



  • As you ask sometime to give the result of this command :
    http://192.168.39.243/fog/service/ipxe/boot.php?mac=10:65:30:64:39:54

    It’s the mac address of the problematic computer
    Here is the result

    #!ipxe
    set fog-ip 192.168.39.243
    set fog-webroot fog
    set boot-url http://${fog-ip}/${fog-webroot}
    cpuid --ext 29 && set arch x86_64 || set arch i386
    goto get_console
    :console_set
    colour --rgb 0x00567a 1 ||
    colour --rgb 0x00567a 2 ||
    colour --rgb 0x00567a 4 ||
    cpair --foreground 7 --background 2 2 ||
    goto MENU
    :alt_console
    cpair --background 0 1 ||
    cpair --background 1 2 ||
    goto MENU
    :get_console
    console --picture http://192.168.39.243/fog/service/ipxe/bg.png --left 100 --right 80 && goto console_set || goto alt_console
    :MENU
    menu
    colour --rgb 0x00567a 0 ||
    cpair --foreground 1 1 ||
    cpair --foreground 0 3 ||
    cpair --foreground 4 4 ||
    item --gap Host is pending approval!
    item --gap -- -------------------------------------
    item fog.local Boot from hard disk
    item fog.memtest Run Memtest86+
    item fog.deployimage Deploy Image
    item fog.multijoin Join Multicast Session
    item fog.sysinfo Client System Information (Compatibility)
    item fog.approvehost Approve This Host
    choose --default fog.local --timeout 10000 target && goto ${target}
    :fog.local
    sanboot --no-describe --drive 0x80 || goto MENU
    :fog.memtest
    kernel memdisk initrd=memtest.bin iso raw
    initrd memtest.bin
    boot || goto MENU
    :fog.deployimage
    login
    params
    param mac0 ${net0/mac}
    param arch ${arch}
    param username ${username}
    param password ${password}
    param qihost 1
    isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
    isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
    param sysuuid ${uuid}
    :fog.multijoin
    login
    params
    param mac0 ${net0/mac}
    param arch ${arch}
    param username ${username}
    param password ${password}
    param sessionJoin 1
    isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
    isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
    param sysuuid ${uuid}
    :fog.sysinfo
    kernel bzImage32 loglevel=4 initrd=init_32.xz root=/dev/ram0 rw ramdisk_size=127000 keymap=fr web=http://192.168.39.243/fog/ consoleblank=0 rootfstype=ext4 storage=192.168.39.243:/home/images/ storageip=192.168.39.243 loglevel=4 mode=sysinfo
    imgfetch init_32.xz
    boot || goto MENU
    :fog.approvehost
    login
    params
    param mac0 ${net0/mac}
    param arch ${arch}
    param username ${username}
    param password ${password}
    param approveHost 1
    isset ${net1/mac} && param mac1 ${net1/mac} || goto bootme
    isset ${net2/mac} && param mac2 ${net2/mac} || goto bootme
    param sysuuid ${uuid}
    :bootme
    chain -ar http://192.168.39.243/fog/service/ipxe/boot.php##params ||
    goto MENU
    autoboot
    

 

353
Online

41.8k
Users

12.3k
Topics

116.0k
Posts