Web lists-archives.com

How to change where PXE booting looks for files with UEFI


I've been learning how to setup PXE booting to install an OS image on a 100% UEFI system (CSM completely disabled). I use Debian 8 as my DHCP server (ISC DHCP) and as my TFTP server (tftpd-hpa). I also use the Debian netboot installer to provide the PXE environment including the bootnetx64.efi file (I use it to serve pxelinux.0 as well).

I'm able to get to menu screens with PXE on UEFI and BIOS, but I have to have specific files in certain directories for UEFI and I don't know how to change the defaults. With BIOS I'm able to control the directories and files that are served by changing the pxelinux.cfg/default file. For BIOS I put my debian-installer directory (which contains the boot screen, menus, etc) under gtk. So I just have lines like this in my pxelinux.cfg/default file:

    path gtk/debian-installer/amd64/boot-screens/
    default gtk/debian-installer/amd64/boot-screens/vesamenu.c32

However, I can't figure out how to tell UEFI to look in specific directories. Instead I've been left with just having to create a symlink from the default directory that bootnetx64.efi looks in to point to the actual directory that my GRUB files exist.

How do you configure UEFI PXE booting to use different directories then the defaults?

Let me try to explain what I'm seeing a little better:

This is my TFTP server. The base directory is /srv/tftp:

    root@broodwar:/srv/tftp/pxeboot# ls -l
    total 48208
    -rw-r--r-- 1 tftp tftp   435712 Mar 15 10:38 bootnetx64.efi
    drwxr-xr-x 1 tftp tftp        4 Sep 28 11:10 centos
    drwxr-xr-x 1 tftp tftp        4 Sep 28 11:10 debian
    drwxr-xr-x 1 tftp tftp        8 Sep 28 11:16 fedora
    drwxr-xr-x 1 tftp tftp      120 Sep 17 10:04 gtk
    -rw-r--r-- 1 tftp tftp   116624 Sep 28 09:30 ldlinux.c32
    -rw-r--r-- 1 tftp tftp    25372 Sep 30 10:40 memdisk
    -rw-r--r-- 1 tftp tftp 29360128 Sep 13  2016 mini.iso
    -rw-r--r-- 1 tftp tftp 19370928 Sep 13  2016 netboot.tar.gz
    drwxr-xr-x 1 tftp tftp       16 Sep 28 11:17 opensuse
    -rw-r--r-- 1 tftp tftp    42988 Sep 13  2016 pxelinux.0
    drwxr-xr-x 1 tftp tftp      248 Sep 30 10:31 pxelinux.cfg
    drwxr-xr-x 1 tftp tftp       20 Sep 28 11:17 ubuntu
    drwxr-xr-x 1 tftp tftp       32 Sep 30 09:40 windows
    drwxr-xr-x 1 tftp tftp       52 Sep 17 10:04 xen

You can see that under the base directory I have a pxeboot directory which can serve both pxelinux.0 and bootnetx64.efi. I also have a gtk folder which is where the debian-installer folder resides under (this has items like my boot screens and menus as well as GRUB related files for UEFI). So, when booting via BIOS I tell my pxelinux.cfg file to look under the gtk folder as shown above. bootnetx64.efi however is looking for the following files:

  • debian-installer/amd64/grub/x86_64-efi/command.lst
  • debian-installer/amd64/grub/x86_64-efi/fs.lst
  • debian-installer/amd64/grub/x86_64-efi/crypto.lst
  • debian-installer/amd64/grub/x86_64-efi/terminal.lst
  • debian-installer/amd64/grub/grub.cfg
I know this because this is what is reported in the tftp log files. I have to have a symlink called debian-installer in my root directory (/srv/tftp/debian-installer) pointing to my gtk folder (srv/tftp/pxeboot/gtk/debian-installer).

    root@broodwar:/srv/tftp/pxeboot# ls -l ..
    total 4
    drwxr-xrwx 1 tftp tftp 128 Jan 23 15:24 cisco_config
    lrwxrwxrwx 1 root root  29 Mar 15 12:34 debian-installer -> pxeboot/gtk/debian-installer/
    drwxr-xr-x 1 tftp tftp 242 Mar 15 12:33 pxeboot

How do I tell bootnetx64.efi to just look directly in that folder instead of looking at the default location?