Once upon a time, isdtor <isdtor at gmail.com>
said:> We have a working PXE setup. I've tried to adapt it to UEFI as per
> RHEL6 manual, but the client won't boot.
I have BIOS+UEFI PXE boot set up, although it took some doing. I still
use SYSLINUX for BIOS, but GRUB2 plus Red Hat's secure boot shim for
UEFI. I never could get SYSLINUX's UEFI support working very well or
reliably, and it didn't support secure boot at all last I looked.
I also feed most of the content out via HTTP (much faster than TFTP).
That includes generating menus on the fly from perl CGIs (I'm
old-fashioned that way :) ).
I'm using dnsmasq as my DHCP server, so I have this in its config (where
pxesrv.cmadams.net has IP 10.10.10.2):
********************
# EFI boot will set ARCH option (93)
dhcp-match=set:efi64,option:client-arch,7
tag-if=set:bios,tag:!efi32,tag:!efi64
# PXE boot
dhcp-boot=tag:efi64,shimx64.efi,pxesrv.cmadams.net,10.10.10.2
dhcp-boot=tag:bios,bios/lpxelinux.0,pxesrv.cmadams.net,10.10.10.2
dhcp-option-force=lan,209,pxelinux.conf
********************
In my TFTP root, I then extract the following RPMs into subdirectories
(from Fedora 29 currently):
syslinux-tftpboot shim-x64 grub2-efi-x64 grub2-efi-x64-modules
I put each in a subdirectory and then add symlinks to make it easier to
replace things with the contents of newer RPMs. I'm including a script
I use that sets that up (and can be re-run at any time to download the
latest RPMs - this assumes the PXE server is Fedora though, but you
should be able to adapt it easily enough).
Since you already have a working BIOS PXE, I'll assume you know how to
make that config file. The kernel/initrd lines take HTTP URLs just
fine, so that's much faster.
Here's what the output of my grub2.pl CGI looks like (I use gfxterm so I
can load a larger font that I set up locally in the TFTP root - you
should be able to just skip that line):
********************
terminal_input console
loadfont /12x26.pf2
insmod gfxterm
set gfxmode=auto
terminal_output gfxterm
set timeout=-1
set timeout=-1
menuentry 'Install Fedora release 29 x86_64' {
set root=(http,pxesrv.cmadams.net)
linuxefi
/pub/fedora/linux/releases/29/Server/x86_64/os/images/pxeboot/vmlinuz
inst.root=http://pxesrv.cmadams.net/pub/fedora/linux/releases/29/Server/x86_64/os/
inst.stage2=http://pxesrv.cmadams.net/pub/fedora/linux/releases/29/Server/x86_64/os/
repo=http://pxesrv.cmadams.net/pub/fedora/linux/releases/29/Everything/x86_64/os
quiet BOOTIF=$net_default_mac
initrdefi
/pub/fedora/linux/releases/29/Server/x86_64/os/images/pxeboot/initrd.img
}
********************
Hope this helps - at least show you some ways to do things. Here's my
tftpboot setup script:
********************
#!/bin/bash
# Set up a BIOS/UEFI PXE TFTP boot tree on a Fedora system
set -e
# Fetch and extract the RPMs
dnf download syslinux-tftpboot shim-x64 grub2-efi-x64 grub2-efi-x64-modules
memtest86+
for rpm in *.rpm; do
pkg=${rpm%.rpm}
if [ ! -d $pkg ]; then
mkdir $pkg
cd $pkg
rpm2cpio ../$rpm | cpio -dumi
cd ..
name=$(rpm -q --qf '%{name}' -p $rpm)
rm -f $name
ln -s $pkg $name
fi
rm $rpm
done
# BIOS setup
if [ ! -d bios ]; then
mkdir bios
cd bios
ln -s
../syslinux-tftpboot/tftpboot/{ldlinux.c32,libutil.c32,lpxelinux.0,memdisk,menu.c32}
.
ln -s ../memtest86+/boot/memtest86+-* memtest-cur
echo "ui menu.c32 http://pxesrv.cmadams.net/local/pxe.pl" >
pxelinux.conf
cd ..
fi
# EFI setup
if [ ! -d EFI ]; then
mkdir EFI
cd EFI
ln -s ../grub2-efi-x64-modules/usr/lib/grub fedora
cd ..
ln -s shim-x64/boot/efi/EFI/fedora/shimx64.efi .
ln -s grub2-efi-x64/boot/efi/EFI/fedora/grubx64.efi .
echo "sournce (http,pxesrv,cmadams.net)/local/grub2.pl" > grub.cfg
fi
********************
--
Chris Adams <linux at cmadams.net>