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>