Post Reply 
 
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Detect if bios or uefi possible?
2016-01-02, 14:12 (This post was last modified: 2016-01-03 03:19 by MultimediaMan.)
Post: #3
RE: Detect if bios or uefi possible?
But as far as the iPXE Binary goes, you need to go up one level to the DHCP server, otherwise, if the machine attempts to boot an incompatible iPXE binary, it will bring things to a halt:

DHCP Server Settings (ISC DHCPd -compliant):
Robinsmidrod has an excellent example on his githhub page: https://gist.github.com/robinsmidsrod/4008017

Relevant Excerpt:
Code:
# Make sure the iPXE we're loading supports what we need,
# if not load a full-featured version
if    exists ipxe.http
  and exists ipxe.menu
  and exists ipxe.nfs
  and ( ( exists ipxe.pxe
      and exists ipxe.bzimage
      and exists ipxe.elf
      and exists ipxe.comboot
      and exists ipxe.iscsi
  ) or (
      exists ipxe.efi
  ) ) {
    filename "nfs://nas.smidsrod.lan/raid/boot/boot.ipxe";
    #filename "http://boot.smidsrod.lan/boot.ipxe";
}
elsif exists user-class and option user-class = "iPXE" {
    # We're already using iPXE, but not a feature-full version,
    # and possibly an out-of-date version from ROM, so load a more
    # complete version with native drivers
    # Allow both legacy BIOS and EFI architectures
    if option arch = 00:06 {
        filename "ipxe-x86.efi";
    } elsif option arch = 00:07 {
        filename "ipxe-x64.efi";
    } elsif option arch = 00:00 {
        filename "ipxe.pxe";
    }
}
elsif exists user-class and option user-class = "gPXE" {
    # If someone has an old version of gPXE burned into their ROM,
    # load a more recent iPXE
    filename "ipxe.pxe";
}
elsif option arch = 00:06 {
    # EFI 32-bit
    # I like to use iPXE-provided drivers, so therefore give ipxe.efi
    # to all non-iPXE clients, use snponly.efi if you have unsupported
    # or misbehaving NICs
    filename "ipxe-x86.efi";
    #filename "snponly-x86.efi";
}
elsif option arch = 00:07 {
    # EFI 64-bit
    # I like to use iPXE-provided drivers, so therefore give ipxe.efi
    # to all non-iPXE clients, use snponly.efi if you have unsupported
    # or misbehaving NICs
    filename "ipxe-x64.efi";
    #filename "snponly-x64.efi";
}
elsif option arch = 00:00 {
    # Legacy BIOS x86 mode
    # I like to use iPXE-provided drivers, so therefore give ipxe.pxe
    # to all non-iPXE clients, use undionly.kpxe if you have unsupported
    # or misbehaving NICs
    filename "ipxe.pxe";
    #filename "undionly.kpxe";
}
else {
    # Unsupported client architecture type, so do nothing
}

As far as platform detection goes in scripts, there are a couple of ways to do it which allow for minimal repetition of code; it is also important to preserve the iPXE environment in the event of a failure for either another boot attempt or an alternate path of action:

Code:
cpuid --ext 29 && set arch x86_64 || set arch i386 ; echo ${platform} ${arch}
set CentOS67path ${17}/Media-Depot/linux/CentOS/6.7/EL/${arch}/OEM/os

goto CentOS67-${platform}

:CentOS67-efi
chain ${CentOS67path}/EFI/BOOT/BOOTX64.efi || goto failed

:CentOS67-pcbios
initrd ${CentOS67path}/images/pxeboot/initrd.img || goto failed
chain ${CentOS67path}/images/pxeboot/vmlinuz || goto failed

:failed
chain -ar ${17}/NetBoot/iPXE/ipxelinux.cfg/default/default.ipxe

"Thus far, you have been adrift within the sheltered harbor of my patience..."
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: Detect if bios or uefi possible? - MultimediaMan - 2016-01-02 14:12



User(s) browsing this thread: 1 Guest(s)