PXE Boot from CentOS 7.9

Dears at first thanks for your work!
I have seen your presentation during the last FOSDEM24 and now I’m moving to your distribution.

To migrate to AlmaLinux 9.3 I’m using a PXE boot environment configured on CentOS 7.9, with Apache, TFTP Server and Kickstart to automatize the installation of all my servers.

The PXE configuration is working and I have tested it with CentOS 7.6.

Unfortunately with AlmaLinux 9.3 before to enter in the Anaconda installation I get an error message that broke the procedure:

EFI loader partition unkown, exiting.
(The boot loader did not set EFI variable LoaderDevicePartUUID.)

My grub.cfg and the Kickstart file is copied from a previous version that was used with CentOS 7.6, and is working fine, I have only modified some paths to use the latest version of vmlinuz and initrd.img.

Someone have experience of a working PXE installation from CentOS with AlmaLinux?
There is a way to debug a little bit more the problem? Unfortunately the Anaconda shell is not working because the error appear just before the execution of it.

Thanks in advance for your help!
Kind regards.
G.

The DHCP tells PXE firmware in NIC to load bootloader from TFTP,
the bootloader loads grub.cfg and according to entry in it loads
vmlinuz and initrd.img from TFTP.


Which bootloader do you use for EFI? I.e. where did you get the *.efi file(s) from?

Dear @jlehtone, thanks for your help!!

I have fixed some issues in the dhcpd.conf and in the TFTP server and I have tried on another node of the cluster and the boot from PXE is working as expected! :slight_smile:

But the problem on the old node persist… I have tried also the boot in legacy mode but I obtain a terrible “Kernel panic”! :confused:

I have tried to check the bios configuration but without any result… maybe I have to modify the ILO/IMM configuration to solve the problem!

Any other suggestion is welcome!
Thanks again for your support!

g.

How old node? Which CPU?

The node is from 2015 and is equipped with a CPU Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz.

Not “old” then. That CPU has x86-64-v2 features. The el9 reguires CPU instructions listed in x86-64-v2. Therefore, that isn’t the problem here.

I’m testing again on the same node and I got the same error message:

EFI loader partition unkown, exiting.
(The boot loader did not set EFI variable LoaderDevicePartUUID.)

I have tried to change the BIOS configuration to make it work on UEFI mode but the error still persist.

Any suggestion is welcome! :slight_smile:

Here what happen if I try the legacy boot with AlmaLinux 9.3

Unable to mount root fs on unknown-block(2,0)

and “list of all partitions” looks empty. How it got to that must have been earlier.
But is this “no filesystems” because the initrd image did not download and activate properly?
Where the output stop is after the things went wrong, not when.

The system that runs the TFTP server could/should have logs that show what the client (tried to) download.

The log apparently say nothing relevant:

Apr 30 17:04:18 pxe-server in.tftpd[2196]: RRQ from 192.168.1.1 filename pxelinux.0
Apr 30 17:04:18 pxe-server in.tftpd[2196]: Error code 0: TFTP Aborted
Apr 30 17:04:18 pxe-server in.tftpd[2197]: RRQ from 192.168.1.1 filename pxelinux.0
Apr 30 17:04:18 pxe-server in.tftpd[2197]: Client 192.168.1.1 finished pxelinux.0
Apr 30 17:04:18 pxe-server in.tftpd[2198]: RRQ from 192.168.1.1 filename pxelinux.cfg/75d46e51-e3a6-e411-a812-40f2e911f7c1
Apr 30 17:04:18 pxe-server in.tftpd[2198]: Client 192.168.1.1 File not found pxelinux.cfg/75d46e51-e3a6-e411-a812-40f2e911f7c1
Apr 30 17:04:18 pxe-server in.tftpd[2199]: RRQ from 192.168.1.1 filename pxelinux.cfg/01-40-f2-e9-11-f7-c1
Apr 30 17:04:18 pxe-server in.tftpd[2199]: Client 192.168.1.1 File not found pxelinux.cfg/01-40-f2-e9-11-f7-c1
Apr 30 17:04:18 pxe-server in.tftpd[2200]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A80101
Apr 30 17:04:18 pxe-server in.tftpd[2200]: Client 192.168.1.1 File not found pxelinux.cfg/C0A80101
Apr 30 17:04:18 pxe-server in.tftpd[2201]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A8010
Apr 30 17:04:18 pxe-server in.tftpd[2201]: Client 192.168.1.1 File not found pxelinux.cfg/C0A8010
Apr 30 17:04:18 pxe-server in.tftpd[2202]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A801
Apr 30 17:04:18 pxe-server in.tftpd[2202]: Client 192.168.1.1 File not found pxelinux.cfg/C0A801
Apr 30 17:04:18 pxe-server in.tftpd[2203]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A80
Apr 30 17:04:18 pxe-server in.tftpd[2203]: Client 192.168.1.1 File not found pxelinux.cfg/C0A80
Apr 30 17:04:18 pxe-server in.tftpd[2204]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A8
Apr 30 17:04:18 pxe-server in.tftpd[2204]: Client 192.168.1.1 File not found pxelinux.cfg/C0A8
Apr 30 17:04:18 pxe-server in.tftpd[2205]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0A
Apr 30 17:04:18 pxe-server in.tftpd[2205]: Client 192.168.1.1 File not found pxelinux.cfg/C0A
Apr 30 17:04:18 pxe-server in.tftpd[2206]: RRQ from 192.168.1.1 filename pxelinux.cfg/C0
Apr 30 17:04:18 pxe-server in.tftpd[2206]: Client 192.168.1.1 File not found pxelinux.cfg/C0
Apr 30 17:04:18 pxe-server in.tftpd[2207]: RRQ from 192.168.1.1 filename pxelinux.cfg/C
Apr 30 17:04:18 pxe-server in.tftpd[2207]: Client 192.168.1.1 File not found pxelinux.cfg/C
Apr 30 17:04:18 pxe-server in.tftpd[2208]: RRQ from 192.168.1.1 filename pxelinux.cfg/default
Apr 30 17:04:18 pxe-server in.tftpd[2208]: Client 192.168.1.1 finished pxelinux.cfg/default
Apr 30 17:04:18 pxe-server in.tftpd[2209]: RRQ from 192.168.1.1 filename menu.c32
Apr 30 17:04:18 pxe-server in.tftpd[2209]: Client 192.168.1.1 finished menu.c32
Apr 30 17:04:18 pxe-server in.tftpd[2210]: RRQ from 192.168.1.1 filename pxelinux.cfg/default
Apr 30 17:04:18 pxe-server in.tftpd[2210]: Client 192.168.1.1 finished pxelinux.cfg/default
Apr 30 17:04:26 pxe-server in.tftpd[2218]: RRQ from 192.168.1.1 filename images/AlmaLinux-9.3/vmlinuz
Apr 30 17:04:26 pxe-server dhcpd: isc-dhcpd-4.2.5
Apr 30 17:04:29 pxe-server in.tftpd[2218]: Client 192.168.1.1 finished images/AlmaLinux-9.3/vmlinuz

Not quite. Shouldn’t it show download of initrd.img too?

Dear @jlehtone, you have reason!

The server doesn’t download the initrd.img

image

I have tried to edit again pxelinux.0/default configuration but without any success.

This is my current not working configuration on CentOS 7.9:

default menu.c32
prompt 0
timeout 300
ONTIMEOUT localboot

menu title ########## PXE Boot Menu Legacy ##########

label 1
menu label ^2) Install AlmaLinux 9.3 with Local Repo - Node Configuration
        kernel images/AlmaLinux-9.3/vmlinuz
        append images/AlmaLinux-9.3/initrd.img method=http://192.168.1.221/install/distro/AlmaLinux-9.3-x86_64/ devfs=nomount ks=http://192.168.1.221/install/distro/ks/ks-alma9.3-node.cfg

I have tried also to increase the verbosity of tftpd service but I don’t have any other error messages.

I have tested the download of initrd.img via tftp client and is working as expected.

tftp> get images/AlmaLinux-9.3/initrd.img

I have neither method nor devfs=nomount and do spell ‘ks=’ as inst.ks=

and there is initrd=

APPEND initrd=images/Alma9.3/initrd.img ...

Thanks! Now it is working but can’t find the .treeinfo in the local repository.
This doesn’t happen on the UEFI server only with legacy.

The read mode is enabled also for others:

image

I have alread tested the connection from another node of the network and I can download the file .treeinfo; maybe it’s a curl problem?

Thanks for your help!
G.

I use dnsmasq-based PXEboot (since it is DHCP, DNS, and TFTP in one process) and local copy of Alma repos that I have get with rsync:

for R in BaseOS AppStream CRB extras
do
  ${RSYNC} ${SOURCE}/${R}/x86_64/os/ ${DEST}/${R}/x86_64/os/
done

Hence I don’t have .treeinfo in ${DEST}/
Furthermore, my repos are shared by NFS4, not HTTP.

However, that is in vain – the kickstart file loads fine from NFS, but the Alma 9 installer has refused to “see” my repos. Perhaps it is the lack of .treefile?

Anyway, I just use nearest official mirror in installer and install only the bare mimimal set of packages. Then I run Ansible plays that install majority of packages and do configure the system. By that time my repos are “fully functional”.

@jlehtone cool configuration! Maybe in the future I will try to read something more about dnsmask and PXEboot!

I have debugged a little bit more adding the shell to dracut for debugging purpose with this string:

label 4                                                                                                                                                                                        
menu label 4) Install AlmaLinux 9.3 with Local Repo - Node Configuration                                                                                                                       
        kernel images/AlmaLinux-9.3/vmlinuz                                                                                                                                                    
        append initrd=images/AlmaLinux-9.3/initrd.img inst.repo=http://192.168.1.221/install/distro/AlmaLinux-9.3-x86_64/ inst.ks=http://192.168.1.221/install/distro/ks/ks-alma9.3-node.cfg rd.shell

Apparently seem that there is something wrong with the DHPC during the installation phase because the server in legacy mode don’t have an IP address. This is the reason of the curl fail!

image

I wonder whether ip=dhcp cmdline option would force it? (Or network option’s parameters in the kickstart.)

No doesn’t work either with ip=dhcp.

Debugging a little bit more with the dracut shell I have found that the network card is not supported by AlmaLinux 9.3.

Here my device:

Emulex Corporation OneConnect 10Gb NIC (rev 03) - ID: 19a2:0710

Today I have tried with the new AlmaLinux 9.4 that seem grant more support to Emulex devices but without any success.

Here the release note with the new hardware supported:

Now I will try to add this string to the boot option to enable the drivers:

  • be2net
  • be2iscsi

rd.driver.pre=be2net rd.driver.pre=be2iscsi

Thanks in advance for any help!