Chapter 6. Preparing a UEFI HTTP installation source As an administrator of a server on a local network, you can configure an HTTP server to enable HTTP boot and network installation for other systems on your network. 6.1. Network install overview A network installation allows you to install Red Hat Enterprise Linux to a system that has access to an installation server. At a minimum, two systems are required for a network installation: Server A system running a DHCP server, an HTTP, HTTPS, FTP, or NFS server, and in the PXE boot case, a TFTP server. Although each server can run on a different physical system, the procedures in this section assume a single system is running all servers. Client The system to which you are installing Red Hat Enterprise Linux. Once installation starts, the client queries the DHCP server, receives the boot files from the HTTP or TFTP server, and downloads the installation image from the HTTP, HTTPS, FTP or NFS server. Unlike other installation methods, the client does not require any physical boot media for the installation to start. To boot a client from the network, enable network boot in the firmware or in a quick boot menu on the client. On some hardware, the option to boot from a network might be disabled, or not available. The workflow steps to prepare to install Red Hat Enterprise Linux from a network using HTTP or PXE are as follows: Procedure Export the installation ISO image or the installation tree to an NFS, HTTPS, HTTP, or FTP server. Configure the HTTP or TFTP server and DHCP server, and start the HTTP or TFTP service on the server. Boot the client and start the installation. You can choose between the following network boot protocols: HTTP Red Hat recommends using HTTP boot if your client UEFI supports it. HTTP boot is usually more reliable. PXE (TFTP) PXE boot is more widely supported by client systems, but sending the boot files over this protocol might be slow and result in timeout failures. Additional resources Red Hat Satellite product documentation 6.2. Configuring the DHCPv4 server for network boot Enable the DHCP version 4 (DHCPv4) service on your server, so that it can provide network boot functionality. Prerequisites You are preparing network installation over the IPv4 protocol. For IPv6, see Configuring the DHCPv6 server for network boot instead. Find the network addresses of the server. In the following examples, the server has a network card with this configuration: IPv4 address 192.168.124.2/24 IPv4 gateway 192.168.124.1 Procedure Install the DHCP server: Set up a DHCPv4 server. Enter the following configuration in the /etc/dhcp/dhcpd.conf file. Replace the addresses to match your network card. Start the DHCPv4 service: 6.3. Configuring the DHCPv6 server for network boot Enable the DHCP version 6 (DHCPv4) service on your server, so that it can provide network boot functionality. Prerequisites You are preparing network installation over the IPv6 protocol. For IPv4, see Configuring the DHCPv4 server for network boot instead. Find the network addresses of the server. In the following examples, the server has a network card with this configuration: IPv6 address fd33:eb1b:9b36::2/64 IPv6 gateway fd33:eb1b:9b36::1 Procedure Install the DHCP server: Set up a DHCPv6 server. Enter the following configuration in the /etc/dhcp/dhcpd6.conf file. Replace the addresses to match your network card. Start the DHCPv6 service: If DHCPv6 packets are dropped by the RP filter in the firewall, check its log. If the log contains the rpfilter_DROP entry, disable the filter using the following configuration in the /etc/firewalld/firewalld.conf file: 6.4. Configuring the HTTP server for HTTP boot You must install and enable the httpd service on your server so that the server can provide HTTP boot resources on your network. Prerequisites Find the network addresses of the server. In the following examples, the server has a network card with the 192.168.124.2 IPv4 address. Procedure Install the HTTP server: Create the /var/www/html/redhat/ directory: Download the RHEL DVD ISO file. See All Red Hat Enterprise Linux Downloads . Create a mount point for the ISO file: Mount the ISO file: Copy the boot loader, kernel, and initramfs from the mounted ISO file into your HTML directory: Make the boot loader configuration editable: Edit the /var/www/html/redhat/EFI/BOOT/grub.cfg file and replace its content with the following: In this file, replace the following strings: RHEL-9-3-0-BaseOS-x86_64 and Red Hat Enterprise Linux 9.3 Edit the version number to match the version of RHEL that you downloaded. 192.168.124.2 Replace with the IP address to your server. Make the EFI boot file executable: Open ports in the firewall to allow HTTP (80), DHCP (67, 68) and DHCPv6 (546, 547) traffic: This command enables temporary access until the server reboot. Optional: To enable permanent access, add the --permanent option to the command. Reload firewall rules: Start the HTTP server: Make the html directory and its content readable and executable: Restore the SELinux context of the html directory:

Commands:
dnf install dhcp-server
option architecture-type code 93 = unsigned integer 16; subnet 192.168.124.0 netmask 255.255.255.0 { option routers 192.168.124.1 ; option domain-name-servers 192.168.124.1 ; range 192.168.124.100 192.168.124.200 ; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.124.2 ; if option architecture-type = 00:07 { filename "redhat/EFI/BOOT/BOOTX64.EFI"; } else { filename "pxelinux/pxelinux.0"; } } class "httpclients" { match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient"; option vendor-class-identifier "HTTPClient"; filename "http:// 192.168.124.2 /redhat/EFI/BOOT/BOOTX64.EFI"; } }
systemctl enable --now dhcpd
dnf install dhcp-server
option dhcp6.bootfile-url code 59 = string; option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; subnet6 fd33:eb1b:9b36::/64 { range6 fd33:eb1b:9b36::64 fd33:eb1b:9b36::c8 ; class "PXEClient" { match substring (option dhcp6.vendor-class, 6, 9); } subclass "PXEClient" "PXEClient" { option dhcp6.bootfile-url "tftp:// [fd33:eb1b:9b36::2] /redhat/EFI/BOOT/BOOTX64.EFI"; } class "HTTPClient" { match substring (option dhcp6.vendor-class, 6, 10); } subclass "HTTPClient" "HTTPClient" { option dhcp6.bootfile-url "http:// [fd33:eb1b:9b36::2] /redhat/EFI/BOOT/BOOTX64.EFI"; option dhcp6.vendor-class 0 10 "HTTPClient"; } }
systemctl enable --now dhcpd6
IPv6_rpfilter=no
dnf install httpd
mkdir -p /var/www/html/redhat/
mkdir -p /var/www/html/redhat/iso/
mount -o loop,ro -t iso9660 path-to-RHEL-DVD.iso /var/www/html/redhat/iso
cp -r /var/www/html/redhat/iso/images /var/www/html/redhat/ cp -r /var/www/html/redhat/iso/EFI /var/www/html/redhat/
chmod 644 /var/www/html/redhat/EFI/BOOT/grub.cfg
set default="1" function load_video { insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrus insmod all_video } load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set timeout=60 # END /etc/grub.d/00_header # search --no-floppy --set=root -l ' RHEL-9-3-0-BaseOS-x86_64 ' # BEGIN /etc/grub.d/10_linux # menuentry 'Install Red Hat Enterprise Linux 9.3 ' --class fedora --class gnu-linux --class gnu --class os { linuxefi ../../images/pxeboot/vmlinuz inst.repo=http:// 192.168.124.2 /redhat/iso quiet initrdefi ../../images/pxeboot/initrd.img } menuentry 'Test this media & install Red Hat Enterprise Linux 9.3 ' --class fedora --class gnu-linux --class gnu --class os { linuxefi ../../images/pxeboot/vmlinuz inst.repo=http:// 192.168.124.2 /redhat/iso quiet initrdefi ../../images/pxeboot/initrd.img } submenu 'Troubleshooting -->' { menuentry 'Install Red Hat Enterprise Linux 9.3 in text mode' --class fedora --class gnu-linux --class gnu --class os { linuxefi ../../images/pxeboot/vmlinuz inst.repo=http:// 192.168.124.2 /redhat/iso inst.text quiet initrdefi ../../images/pxeboot/initrd.img } menuentry 'Rescue a Red Hat Enterprise Linux system' --class fedora --class gnu-linux --class gnu --class os { linuxefi ../../images/pxeboot/vmlinuz inst.repo=http:// 192.168.124.2 /redhat/iso inst.rescue quiet initrdefi ../../images/pxeboot/initrd.img } }
chmod 755 /var/www/html/redhat/EFI/BOOT/BOOTX64.EFI
firewall-cmd --zone public --add-port={80/tcp,67/udp,68/udp,546/udp,547/udp}
firewall-cmd --reload
systemctl enable --now httpd
chmod -cR u=rwX,g=rX,o=rX /var/www/html
restorecon -FvvR /var/www/html