UEFI + Legacy BIOS TFTP/PXELINUX

Rémy Dernat remy.d1 at gmail.com
Mon Jul 9 12:13:33 CEST 2018


Hi John, Toomas,

Thank you very much.

I changed my config to match your config, John, however, I still have an
error (which is a new one).

First of all, it boots fine (the first time), launching the install,
retrieving syslinux.efi, but it detects the class "GRUB_PC" instead of
"GRUB_EFI" (obviously, it should load GRUB_EFI !).

```
root at faiserv:/srv/fai/config# grep -r GRUB_PC .
./package_config/DEBIAN:PACKAGES install GRUB_PC
./package_config/UBUNTU:PACKAGES install GRUB_PC
./class/60-misc:    ifclass -o GRUB_PC GRUB_EFI ||echo GRUB_PC

root at faiserv:/srv/fai/config# find . -name GRUB_PC
./scripts/GRUB_PC
./disk_config/GRUB_PC

root at faiserv:/srv/fai/config# grep -r GRUB_EFI .
./package_config/GRUB_EFI:PACKAGES aptitude GRUB_EFI
./package_config/DEBIAN:PACKAGES install GRUB_EFI
./package_config/UBUNTU:PACKAGES install GRUB_EFI
./class/60-misc:    ifclass -o GRUB_PC GRUB_EFI ||echo GRUB_PC

root at faiserv:/srv/fai/config# find . -name GRUB_EFI
./package_config/GRUB_EFI
./scripts/GRUB_EFI
./disk_config/GRUB_EFI
```

I am a bit lost (...); I do not why it is loading GRUB_PC instead of
GRUB_EFI.

I also tried to switch to the DEMO class to check if it comes from my
defined class; I get the same result: it load also the GRUB_PC class.

My 60-misc class is :
```
cat class/60-misc
#! /bin/bash

ifclass -o CENTOS SLC && exit 0
if ifclass -o I386 AMD64 ; then
    ifclass -o GRUB_PC GRUB_EFI ||echo GRUB_PC
fi
```

Best regards,
Rémy.


Le ven. 6 juil. 2018 à 17:14, John G Heim <jheim at math.wisc.edu> a écrit :

> 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 at faiserv:/srv# tree -L 2
> > .
> > ├── fai
> > │   ├── config
> > │   └── nfsroot
> > ├── nfs4
> > └── tftp
> >      └── fai
> >
> > root at 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 at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.uni-koeln.de/pipermail/linux-fai/attachments/20180709/41fb7a44/attachment.html>


More information about the linux-fai mailing list