UEFI kickstart PXE (RHEL 6)

Latest response

I am wondering if anyone here has worked through getting UEFI kickstarts to work via PXE. I am trying to follow the instructions from - https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config-efi.html

And one part is not lining up...

mkdir /var/lib/tftpboot/pxelinux
mkdir /var/lib/tftpboot/pxelinux/bootx64.efi
cp /boot/efi/EFI/redhat/grub.efi /var/lib/tftpboot/pxelinux/bootx64.efi

then.. add this to your dhcpd.conf

 if option arch = 00:06 {
                          filename "pxelinux/bootia32.efi";
                  } else if option arch = 00:07 {
                          filename "pxelinux/bootx64.efi";
                  } else {
                          filename "pxelinux/pxelinux.0";

I assume the "filename" declaration should point to ... a file? The instructions seem to indicate it would instead point to a directory "/var/lib/tftpboot/pxelinux/bootx64.efi" => pxelinux/bootx64.efi which would then have grub.efi in that directory?

Can someone please validate that I my assumption is correct (and possibly lend up some pointers)? Everything works great with BIOS-based kickstarts using PXE, but if I change my machine to only boot UEFI, it fails (and I can't really see what's going on as the machine then proceeds to the next boot device).


Hello James,

this was actually reported earlier. /var/lib/tftpboot/pxelinux/bootx64.efi should indeed be a file in pxeboot/, not a directory. The second mkdir command was not supposed to be there.

The error should be fixed in the 6.6 Beta Installation Guide. Please let me know if the procedure works when you have bootx64.efi in the pxelinux/ directory.

Thanks Petr - I should have updated this thread. I have been able to make this work now. There are some subtle (yet important differences that might need to be mentioned.)

Again - thanks for the follow-up. The beta guide is much better and easier to follow. Nicely done.

Proposed update topics:
/pxelinux.0 - seems to expect that /pxelinux.cfg/default (or a filename based on MAC Address or IP) exists
/BOOTX64.efi - seems to expect /efidefault still exists in the same directory as the efi file itself.

  class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server; # APOC TFTP server
    if option arch = 00:06 {
      filename "/bootia32.efi";
    } else if option arch = 00:07 {
      filename "/BOOTX64.efi";
    } else {
      filename "/pxelinux.0";
[root@apoc RHEL-6.5-x86_64]# tcpdump -i eth0 port 69
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:59:57.836295 IP rhel6b.matrix.private.ansyslmd > apoc.matrix.private.tftp:  42 RRQ "/BOOTX64.efi" octet tsize 0 blksize 1468
19:59:57.931658 IP rhel6b.matrix.private.vfo > apoc.matrix.private.tftp:  34 RRQ "/BOOTX64.efi" octet blksize 1468
19:59:58.212589 IP rhel6b.matrix.private.instl_boots > apoc.matrix.private.tftp:  40 RRQ "/efidefault" octet tsize 0 blksize 512