Sorry to reply to your posts out of order but I would not follow the advice in that message. It is at least out dated. You do not have to change your dhcp config after each install and you can continue to use your fai-chboot config files. Syslinux does support EFI booting. It's in the syslinux-efi package.

Here is the code in my dhcp config file that sets the filename option depending on EFI/BIOS boot:

=== begin ===
# tell a kernel how to boot via PXE or NFS
server-name faiserver;
next-server faiserver;
# Check pxe boot code #93 to determine whether we are booting via BIOS or EFI
# 2018-07-04: jheim
option architecture-type code 93 = unsigned integer 16;
class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        if option architecture-type = 00:00 {
                filename "fai/pxelinux.0";
        } else {
                filename "fai/syslinux.efi64";
        }
}
=== end ===

The file syslinux.efi64 is from the debian syslinux-efi package. It's original name/path was /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi. I renamed it syslinux.efi64 to distinguish it from the 32-bit syslinux.efi file. Then I decided not to bother with 32-bit EFI boots. You also need some libs in your tftp directory to support EFI booting via syslinux. I think if you modify your dhcp config as abobe, copy the necessary files from the syslinux-efi package to your tftp space, you'll successfully boot into the FAI install. You will also need to create new disk config files to partition via gpt instead of msdos. (More on that below.)

1. Cut/passte above code into your dhcp config.
2. apt-get install syslinux-efi
3a. cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /srv/tftp/fai/
3b. cp /usr/lib/syslinux/modules/efi64/ldlinux.e64 /srv/tftp/fai/

Done with the boot stuff. Now the disk config stuff. Code that detects whether you have booted via BIOS or EFI already exists in the fai-doc examples. It's in a class script called 60-grub. It creates either GRUB_PC or GRUB_EFI class. You have to retain your old BIOS disk config files for older machines. I used to create a class called LARGEDISK for disks large enough to partition into /, /var/ usr, ... So I just renamed that GRUB_PC. Then I copied that file to GRUB_EFI andmodified it for gpt partitioning and EFI boot. It looks like this:

=== begin ===
# 2018-07-04: jheim
disk_config disk1 disklabel:gpt fstabkey:label align-at:1
primary /boot/efi 204800K vfat rw
primary /usr/local 157286400K ext4 rw,relatime createopts="-L LOCALFS" primary / 72G- ext4 rw,relatime createopts="-L ROOTFS" primary swap 8G swap rw createopts="-L SWAPFS"
# EOF
=== end ===







On 07/06/2018 07:27 AM, Rémy Dernat wrote:
Hi,

I am trying to set up an UEFI boot pxe mainly because our hardware servers do not support full legacy BIOS anymore (particularly hard disk plugin on those servers).

Our legacy pxelinux works just fine from a while now (and thanks for it).

I followed this link : https://lists.uni-koeln.de/pipermail/linux-fai/2014-February/010294.html ... with no luck. I created an "UEFI" specific class to avoid the erase of DEFAULT, and put everything in that new class, because we will need to keep the pxelinux config.

My tftp fai folder is organised like this:
```
root@faiserv:/srv# tree -L 2
.
├── fai
│   ├── config
│   └── nfsroot
├── nfs4
└── tftp
     └── fai

root@faiserv:/srv/tftp/fai# tree -L 2
.
├── c2960s-universalk9-tar.150-2a.SE9.tar
├── cisco-ios-150-2a.tar -> c2960s-universalk9-tar.150-2a.SE9.tar
├── efi
│   ├── fonts
│   ├── grub.cfg
│   ├── grub.cfg.nok
│   ├── i386-pc
│   ├── locale
│   ├── pxelinux.cfg -> ../pxelinux.cfg
│   ├── unicode.pf2
│   └── x86_64-efi
├── gpxelinux.0
├── initrd.img-3.16.0-4-amd64
├── initrd.img-3.16.0-6-amd64
├── ldlinux.c32
├── lpxelinux.0
├── pxelinux.0
├── pxelinux.0.back
├── pxelinux.cfg
│   ├── 0A01FD03
│   ├── 0A01FFF2
│   ├── A226B5A1.disable
│   ├── A226B5A2.disable
│   ├── A226B5A3.disable
│   ├── A226B5A4.disable
│   ├── A226B5A5.disable
│   ├── A226B5A6.disable
│   ├── A226B5A7.disable
│   ├── A226B5A9
│   ├── A226B5AA.disable
│   ├── A226B5AB.disable
│   ├── A226B5B0.disable
│   ├── A226B5B4.disable
│   ├── A226B5B8
│   └── default
├── syslinux.efi
├── vmlinuz-3.16.0-4-amd64
└── vmlinuz-3.16.0-6-amd64

```

I do not know if the UEFI is also searching for a filename matching its IP address with the hexa value, so I created a symbolic link to the pxelinux.cfg parent directory...


I have no problem with DHCP, and my client is loading the grub.cfg menu. However, it fails while searching for the nfsroot. The error I get (with debug=all) is (replacing sensitive informations):
```
kern/disk.c:196 : Opening `tftp,IP.IP.IP.IP'...
disk/efi/efidisk.c:461 : opening tftp
kern/disk.c: 281: Opening `tftp,IP.IP.IP.IP' failed.
kern/disk.c: 295: Closing `tftp'.
```


Here is my grub.cfg config :
```
root@faiserv:/srv/tftp/fai/efi# cat grub.cfg
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=5
# for debug:
#set pager=1
set debug=all

insmod efi_gop
insmod efi_uga
if loadfont ${prefix}/unicode.pf2
then
     insmod gfxterm
     set gfxmode=auto
     set gfxpayload=keep
     terminal_output gfxterm
fi

menuentry "Install from FAI" {
     linux  vmlinuz-3.16.0-6-amd64 rw ip=dhcp root=/dev/nfs nfsroot=IP.IP.IP.IP:/srv/fai/nfsroot FAI_FLAGS=verbose,sshd,createvt,reboot FAI_ACTION=install server=faiserv.acme.ltd FAI_CONFIG_SRC=nfs://faiserv.acme.ltd/srv/fai/config
      initrd initrd.img-3.16.0-6-amd64
}

```


Any help would be greatly appreciated.

Thanks,
Rémy

Antwort per Email an