1

I'm attempting to automate Linux deployments for our department using PXE booting. I've been able to successfully set it up for legacy boot, but UEFI still seems to elude me.

I've been mostly following the instructions here. Legacy works fine, but it seems that UEFI doesn't even contact the TFTP server to load the shim.efi file (nothing shows up in the tftpd logs).

Here are the relevant parts of dhcpd.conf

option architecture-type code 93 = unsigned integer 16;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;

and

subnet 10.10.8.0 netmask 255.255.255.0 {
  option routers 10.10.8.1;
  option broadcast-address 10.10.8.255;
  option subnet-mask 255.255.255.0;
  range 10.10.8.100 10.10.8.200;
  class "pxeclients" {
      match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
      next-server 10.10.8.5; # tinkerbell.eecs.umich.edu

      if option architecture-type = 00:07 {
        filename "uefi/shim.efi";
      } else {
        filename "pxe/pxelinux.0";
      }
  }
}

The DHCP server is running Ubuntu 14.04 isc-dhcp-server and the TFTP server (which hosts all the PXE related files) is running RHEL 7.

2
  • 1
    On your UEFI platforms, can you get to the UEFI shell? Most modern versions of a UEFI shell include a tftp command. You should be able to test tftp connectivity using that command.
    – fpmurphy
    Commented Feb 26, 2017 at 8:11
  • One machine had no way to get to one, and the other didn't have a TFTP command. Commented Mar 5, 2017 at 9:24

1 Answer 1

1

your architecture-type is only partially addressed in your dhcpd.conf

please consider all the possible PC architecture-type values

0 -> BIOS
6 -> EFI32
7 -> EFI64
9 -> EFI64

in your case if your client is an EFI 64 using i.e. "architecture-type=9" the DHCP server will mistakenly offer to load pxelinux.0 as NBP.

EDIT: if you are still in trouble please run a Wireshark traffic capture where you can see what's really going on at packet level.

3
  • That wouldn't address why the TFTP server doesn't show that any attempt to load the file are made. If that was the issue than the server would show that pxelinux was downloaded (which it doesn't). Commented Mar 5, 2017 at 9:23
  • I opened up the TFTP port on the server using netcat and legacy machines showed requests whereas the UEFI mode did not. Commented Mar 6, 2017 at 4:42
  • Why did you do that? if it works on legacy sure port 69 is open for "all" the pre-os platforms. BTW TFTP uses port 69 only when initiating the transfer the actual data is really transferred using a randomly selected port. As I've said before. Use Wireshark and stop the guesswork.
    – Pat
    Commented Mar 6, 2017 at 8:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .