3.5.3. Configuring Boot Over Fabric
3.5.3.1. UEFI Secure Boot Support
OPX Software includes support for UEFI Secure Boot, both in the UEFI SuperNIC firmware environment and in Linux.
3.5.3.1.1. UEFI Firmware Support
All UEFI drivers shipped as part of the CN5000 OPX Software are signed to support UEFI Secure Boot using the Microsoft UEFI CA signing process.
3.5.3.1.2. Linux Support
Kernel modules shipped with major Linux distributions are signed using the keys for those distributions.
Kernel modules shipped as part of the OPX Software installation suite are signed using a Cornelis key. The Cornelis public key is automatically added to the Machine Owner Key (MOK) list in the UEFI firmware environment with no action required by the user.
The following MOK utility can be used to list the currently enrolled keys in the MOK list keyring:
mokutil --list-enrolled
For more information about UEFI Secure Boot support in RHEL, refer to the RHEL documentation at https://docs.redhat.com/en.
For more information about UEFI Secure Boot support in SLES, refer to the SLES documentation at https://documentation.suse.com/.
3.5.3.1.2.1. Limitations
When UEFI Secure Boot mode is enabled, the SuperNIC firmware cannot be updated or downgraded.
3.5.3.2. Configuring PXE Boot Over IPoIB
The following sections provide instructions for setting up PXE Boot on RHEL 9.x and RHEL 10.x operating systems.
Important
The standard installation
initrd.imgprovided by Red Hat does not bundle all drivers required to establish IPoIB communications over the CN5000 SuperNIC. The RAM disk image must be modified before attempting to boot over fabric.The target OS/version
initrd.imgmust be compiled and modified on a machine running the matching OS and kernel version.
3.5.3.2.1. Overview and Architecture
Boot Over Fabric requires at least two nodes connected to an Omni-Path fabric (either directly back-to-back or via a CN5000 Switch). One node serves as the PXE Server, while the other is the Client Node where the operating system will be installed. Communication between both nodes occurs over IP over InfiniBand (IPoIB).
The PXE boot exchange proceeds through four distinct stages:
DHCP Stage: The Client broadcasts a DHCP request across the IPoIB fabric partition. The DHCP server returns an IP address, the TFTP server address, and the bootloader file path (
uefi/grubx64.efi).Note
For secure PXE Boot, use
shimx64.efiinstead ofgrubx64.efi.TFTP Stage: The Client contacts the TFTP server and downloads the UEFI bootloader image (
grubx64.efi) and boot configuration (grub.cfg).Kernel and initrd Stage: The Client executes GRUB, downloads the installer kernel (
vmlinuz) and initial RAM disk (initrd_CN5K.img) from the TFTP server, and boots the kernel.OS Installation Stage (HTTP): The OS installer initializes on the Client and retrieves the complete OS installation tree, runtime image (
install.img), and packages from the HTTP server via inst.repo.
3.5.3.2.2. Prerequisites and Fabric Setup
Verify fabric readiness and assign static addressing on the PXE Server before configuring daemon services.
Fabric Manager and Port Verification
Ensure the Fabric Manager is running on the fabric and the SuperNIC port is active by running opainfo:
opainfo | grep -iE 'PortState|LinkSpeed'
Expected output includes:
PortState: Active LinkSpeed Act: 100Gb #or target link rate
Configure Server IPoIB Address
The PXE environment operates on partition key (P_Key) 0x8001. The server must bind 192.168.100.1/24 to the child interface representing this partition (for example, ibs5d1 or ibp13s0d1):
Locate the child interface corresponding to
pkey 0x8001with an active carrier:for d in /sys/class/net/ib*; do n=$(basename "$d") echo "$n pkey=$(cat $d/pkey 2>/dev/null) carrier=$(cat $d/carrier 2>/dev/null)"; done
Assign the static IP address and bring up the interface:
ip addr add 192.168.100.1/24 dev <server-ib-child> ip link set <server-ib-child> up
Note
<server-ib-child>represents the server's local IPoIB partition child interface, for example,ibs5d1.Confirm datagram mode and address assignment:
ip -4 addr show dev <server-ib-child> | grep inet cat /sys/class/net/<server-ib-child>/mode
Expected mode: datagram
3.5.3.2.3. Configure HTTP Installation Server
The HTTP server hosts the extracted OS repository and stage2 installation runtime images.
Install Apache HTTP Server:
dnf install -y httpd mkdir -p /var/www/html/netinstall
Create configuration
/etc/httpd/conf.d/netinstall.conf:Alias /netinstall /var/www/html/netinstall <Directory /var/www/html/netinstall> Options Indexes FollowSymLinks Require all granted </Directory>
Bind Apache exclusively to the IPoIB interface. In
/etc/httpd/conf/httpd.conf, comment outListen 80and add:# Listen 80 Listen 192.168.100.1:80
Enable and start Apache:
systemctl enable --now httpd.service
3.5.3.2.4. Set Up Procedure for RHEL 9.x PXE Server
This section details how to configure the PXE server, inject CN5000 SuperNIC drivers into the initial RAM disk, and stage boot assets using the Internet Systems Consortium (ISC) DHCP server and standalone TFTP daemon for RHEL 9.x clients.
Configure the DHCP Server
Install the ISC DHCP server:
dnf install -y dhcp-server
Edit
/etc/dhcp/dhcpd.conf:# DHCP Server Configuration file. # option space pxelinux; option pxelinux.magic code 208 = string; option pxelinux.configfile code 209 = text; option pxelinux.pathprefix code 210 = text; option pxelinux.reboottime code 211 = unsigned integer 32; option architecture-type code 93 = unsigned integer 16; allow booting; allow bootp; subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.2 192.168.100.230; option subnet-mask 255.255.255.0; option broadcast-address 192.168.100.255; option routers 192.168.100.1; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.100.1; if option architecture-type = 00:07 { filename "uefi/grubx64.efi"; } else { filename "pxelinux/pxelinux.0"; } } }Enable and start the DHCP service:
systemctl enable --now dhcpd.service
Configure the TFTP Server
Install TFTP server packages:
dnf install -y tftp tftp-server
Create systemd socket unit
/etc/systemd/system/tftp.socket:[Unit] Description=TFTP Trivial File Transfer Protocol Socket [Socket] ListenDatagram=69 [Install] WantedBy=sockets.target
Create systemd service unit
/etc/systemd/system/tftp.service:[Unit] Description=Tftp Server Requires=tftp.socket [Service] # The user the server will run as User=root # The TFTP server executable and its arguments ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot StandardInput=socket StandardError=journal [Install] WantedBy=multi-user.target Also=tftp.socket
Reload systemd and start the TFTP socket:
systemctl daemon-reload systemctl enable --now tftp.socket tftp.service
Prepare the Client initrd Image
Mount the OS ISO and unpack the
initrd.Mount the installation ISO:
mount -o loop RHEL-9.x-x86_64-dvd.iso /media/
Create the working directory and switch to it:
mkdir -p /tmp/images/initrd cd /tmp/images/initrd
Copy the initrd image for backup/local reference:
cp /media/images/pxeboot/initrd.img .
Decompress and unpack the
initrdfilesystem:xz -dc initrd.img | cpio -idmv
Inject Drivers.
Define the Environment Variables:
KERNEL_VERSION=5.14.0_687.5.3.el9_8.x86 # match the target OS ISO INITRD=/tmp/images/initrd OPXS=/lib/modules/$KERNEL_VERSION/extra/opxs-kernel-updates BASE=$INITRD/lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband
Create required driver directory structure:
mkdir -p $BASE/hw/hfi1 $BASE/sw/rdmavt $BASE/core $BASE/ulp/ipoib
Remove inbox compressed drivers, if present, to prevent precedence conflicts:
rm -f $BASE/hw/hfi1/hfi1.ko* $BASE/sw/rdmavt/rdmavt.ko* \ $BASE/core/ib_uverbs.ko* $BASE/ulp/ipoib/ib_ipoib.ko*Copy the SuperNIC drivers UNCOMPRESSED
Note
This avoids CRC64 decompression failure status 6 caused by default
xz.cp $OPXS/hfi1.ko $BASE/hw/hfi1/ cp $OPXS/rdmavt.ko $BASE/sw/rdmavt/
Decompress and inject required core InfiniBand and IPoIB dependencies to plain
.ko:xz -dc /lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband/core/ib_uverbs.ko.xz \ > $BASE/core/ib_uverbs.ko xz -dc /lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband/ulp/ipoib/ib_ipoib.ko.xz \ > $BASE/ulp/ipoib/ib_ipoib.koCopy SuperNIC link training firmware files:
mkdir -p $INITRD/lib/firmware/updates for fw in hfi1_dc8051.fw hfi1_fabric.fw hfi1_pcie.fw hfi1_sbus.fw; do cp /lib/firmware/updates/$fw $INITRD/lib/firmware/updates/ doneRegenerate module dependencies inside the unpacked
initrd:depmod -b $INITRD $KERNEL_VERSION
Verify injected modules are uncompressed and present:
for f in hw/hfi1/hfi1 sw/rdmavt/rdmavt core/ib_uverbs ulp/ipoib/ib_ipoib; do test -f $BASE/$mod.ko && echo "$f.ko OK" || echo "MISSING $f.ko" test -e $BASE/$f.ko.xz && echo "LEFTOVER $f.ko.xz (BAD)" doneVerify
modules.depwas successfully generated with hfi1:grep -q "/hfi1\.ko" $INITRD/lib/modules/$KERNEL_VERSION/modules.dep && echo "hfi1 in modules.dep"
Ensure ib_ipoib loads at boot:
mkdir -p $INITRD/lib/modules-load.d printf "# Load ib_ipoib.ko at boot\nib_ipoib\n" \ > $INITRD/lib/modules-load.d/ib_ipoib.conf
Note
Write this file with truncation
>, not append>>, to avoid duplicate entries when the procedure is rerun.No udev rule is needed to create the partition child interface. Once
ib_ipoibloads and the SM programs the port's P_Key table, the IPoIB stack automatically creates the matching child interface (e.g.,ibs8d1forP_Key 0x8001). The grubip=argument in the next section points DHCP at that auto-created interface.
Repack the RAM disk:
cd $INITRD find . | cpio -o -c -R root:root | gzip -9 > ../initrd_CN5K.img mkdir -p /var/lib/tftpboot/uefi cp ../initrd_CN5K.img /var/lib/tftpboot/uefi/ cp /media/images/pxeboot/vmlinuz /var/lib/tftpboot/uefi/
Stage Install Tree and GRUB Configuration
Publish the ISO contents to HTTP.
Define target OS minor release directory (for example, RHEL9.5, RHEL9.8):
OS_DIR="RHEL9.5"
Create netinstall directory for the target release:
mkdir -p /var/www/html/netinstall/ISO/$OS_DIR
Copy installation files from the mounted ISO:
rsync -av /media/ /var/www/html/netinstall/ISO/$OS_DIR
Unmount the temporary loopback mount:
umount /media
Set ownership and permissions for Apache:
chmod -R 755 /var/www/html/netinstall/ISO/$OS_DIR chown -R apache:apache /var/www/html/netinstall/ISO/$OS_DIR
Stage the UEFI bootloader binary in TFTP boot directory:
cp /var/www/html/netinstall/ISO/$OS_DIR/EFI/BOOT/grubx64.efi /var/lib/tftpboot/uefi/
Configure
/var/lib/tftpboot/uefi/grub.cfg.RHEL 9.5 Entry:
set timeout=20 menuentry 'RHEL 9.5 Install (SuperNIC IPoIB)' { linuxefi uefi/vmlinuz net.ifnames=0 biosdevname=0 rd.neednet=1 rd.net.timeout.carrier=60 rd.driver.pre=hfi1,ib_ipoib ip=ib1:dhcp ip.bootdev=ib1 bootproto=dhcp inst.repo=http://192.168.100.1/netinstall/ISO/RHEL9 iommu=pt initrdefi uefi/initrd_CN5K.img }RHEL 9.8 Entry:
Replace
<IFACE>with the client's PCI altname, for example,ibp13s0d1.set timeout=20 menuentry 'RHEL 9.8 Install (SuperNIC IPoIB)' { linuxefi uefi/vmlinuz biosdevname=0 rd.neednet=1 rd.net.timeout.carrier=60 rd.driver.pre=hfi1,ib_ipoib ip=<IFACE>:dhcp bootproto=dhcp inst.waitfornet=60 inst.repo=http://192.168.100.1/netinstall/ISO/RHEL9 iommu=pt initrdefi uefi/initrd_CN5K.img }Note
<IFACE>represents the client's IPoIB partition child interface as discovered inside the installer initrd, for example,ib1oribp13s0d1.To determine the
<IFACE>on the PXE partition, list the client's IB netdevs in ifindex order and pick the link-up P_Key 0x8001 child (non-zero dev_port); itsib<N>name is its position in that ordering:for d in /sys/class/net/ib*; do n=$(basename "$d") printf "ifindex=%s name=%s pkey=%s carrier=%s dev_port=%s\n" \ "$(cat $d/ifindex)" "$n" "$(cat $d/pkey)" "$(cat $d/carrier)" "$(cat $d/dev_port)" done | sortThe link-up (
carrier=1) pkey=0x8001 child (dev_port!=0) isib<N>at itsifindexposition.
Verify the Server Before Booting
Confirm the DHCP/TFTP service and the HTTP install tree from the PXE server:
dhcpd.service is active and bound to the ib interface:
systemctl is-active dhcpd.service journalctl -u dhcpd.service --no-pager -n 10
tftp.socket is active and socket listener is bound to port 69:
systemctl is-active tftp.socket ss -ulnp | grep :69
Boot Files are in the TFTP Staging Directory:
ls -lh /var/lib/tftpboot/uefi/
Test HTTP Access and Installation Image:
HTTP install tree (expect HTTP/1.1 200 OK):
curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/ curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/.treeinfo curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/images/install.img
install.img size (~600–1200 MB depending on release):
curl -sI http://192.168.100.1/netinstall/ISO/$OS_DIR/images/install.img | grep -i content-length
3.5.3.2.5. Set Up Procedure for RHEL 10.x PXE Server
This section details the PXE server configuration and boot image staging for RHEL 10.x clients, using dnsmasq for integrated DHCP and TFTP services and injecting uncompressed SuperNIC drivers to comply with Linux Kernel module integrity checks.
Configure Combined DHCP and TFTP Server (dnsmasq)
Note
Kea DHCP Incompatibility: Kea cannot be used for IPoIB PXE boot. Its raw socket rejects non-802.3 InfiniBand framing, and its UDP mode fails to capture RFC 4390 broadcast traffic. dnsmasq handles IPoIB natively while providing integrated TFTP.
Install dnsmasq:
dnf install -y dnsmasq mkdir -p /etc/dnsmasq.d /var/lib/tftpboot/uefi
Create
/etc/dnsmasq.d/ipoib-pxe.conf(substituting<server-ib-child>with your partition interface, e.g.,ibs5d1).Disable DNS listener (port 0); serve only DHCP and TFTP:
port=0 interface=<server-ib-child> bind-interfaces dhcp-authoritative log-dhcp
Dynamic IPoIB range and gateway:
dhcp-range=192.168.100.2,192.168.100.230,255.255.255.0,1h dhcp-option=option:router,192.168.100.1
UEFI x86_64 architecture matching (RFC 4578 codes 7 and 9) :
dhcp-match=set:efi-x86_64,option:client-arch,7 dhcp-match=set:efi-x86_64,option:client-arch,9 dhcp-boot=tag:efi-x86_64,uefi/grubx64.efi,,192.168.100.1 dhcp-boot=tag:!efi-x86_64,pxelinux/pxelinux.0,,192.168.100.1
Integrated TFTP configuration:
enable-tftp tftp-root=/var/lib/tftpboot
Test syntax and start dnsmasq:
dnsmasq --test systemctl enable --now dnsmasq journalctl -u dnsmasq --no-pager -n 5 # expect: sockets bound exclusively to interface ...
(Optional) Pin a static IP using RFC 4361 Client-Identifier.
Because IPoIB lacks Ethernet MAC addresses, chaddr is zeroed (htype=32, hlen=0) per RFC 4390. Pin reservations using the Option 61 identifier:
tcpdump -i <server-ib-child> -vvv -s0 'port 67 or port 68'
The Client-ID (61) begins with the IPoIB hardware type 0x20 (32) followed by the 8-byte port GUID tail, for example,
hardware-type 32, d0:06:6a:02:01:00:3b:1a.Then add a reservation to
/etc/dnsmasq.d/ipoib-pxe.confand restart:dhcp-host=id:20:d0:06:6a:02:01:00:3b:1a,192.168.100.50,cn5k-client systemctl restart dnsmasq
Prepare the Client initrd Image
Important
Inject Modules Uncompressed: Linux Kernel 6.12 rejects .ko.xz compressed with default CRC64 (decompression failed with status 6 / Invalid argument). All injected modules must be installed as uncompressed .ko files.
Mount the RHEL 10.x ISO and extract initrd.img.
Download and mount the ISO (where x is the target RHEL version) :
wget <RHEL-10.x-dvd.iso> mount -t iso9660 -o loop RHEL-10.x-dvd.iso /media/
Extract the installer initrd into a work tree:
mkdir -p /tmp/images/initrd cd /tmp/images/initrd xz -dc /media/images/pxeboot/initrd.img | cpio -idmvAll paths below use $KERNEL_VERSION (the installer kernel for the target OS).
Set environment paths and inject SuperNIC kernel modules uncompressed.
Set the Environment Variables:
KERNEL_VERSION=6.12.0-124.8.1.el10_1.x86_64 # Match your target ISO kernel INITRD=/tmp/images/initrd OPXS=/lib/modules/$KERNEL_VERSION/extra/opxs-kernel-updates BASE= $INITRD/lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband
Create required driver directory structure:
mkdir -p $BASE/hw/hfi1 $BASE/sw/rdmavt $BASE/core $BASE/ulp/ipoib
Remove inbox compressed drivers, if present:
rm -f $BASE/hw/hfi1/hfi1.ko.xz $BASE/sw/rdmavt/rdmavt.ko.xz
Copy the SuperNIC drivers UNCOMPRESSED:
cp $OPXS/hfi1.ko $BASE/hw/hfi1/ cp $OPXS/rdmavt.ko $BASE/sw/rdmavt/
Decompress required core dependencies to plain
.ko:# ib_uverbs (rdmavt dependency) xz -dc /lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband/core/ib_uverbs.ko.xz > $BASE/core/ib_uverbs.ko rm -f $BASE/core/ib_uverbs.ko.xz # ib_ipoib (creates the IPoIB netdev) xz -dc /lib/modules/$KERNEL_VERSION/kernel/drivers/infiniband/ulp/ipoib/ib_ipoib.ko.xz > $BASE/ulp/ipoib/ib_ipoib.ko rm -f $BASE/ulp/ipoib/ib_ipoib.ko.xz
Update module dependencies and stage the SuperNIC link firmware.
Regenerate dependency map:
depmod -b $INITRD $KERNEL_VERSION
Copy link training firmware:
mkdir -p $INITRD/lib/firmware/updates for fw in hfi1_dc8051.fw hfi1_fabric.fw hfi1_pcie.fw hfi1_sbus.fw; do cp /lib/firmware/updates/$fw $INITRD/lib/firmware/updates/ doneForce ib_ipoib loading at boot:
mkdir -p $INITRD/lib/modules-load.d printf "# Load ib_ipoib.ko at boot\nib_ipoib\n" > $INITRD/lib/modules-load.d/ib_ipoib.conf
Note
Write this file with truncation
>, not append>>, to avoid duplicate entries when the procedure is rerun.No udev rule is needed to create the partition child interface. Once
ib_ipoibloads and the SM programs the port's P_Key table, the IPoIB stack automatically creates the matching child interface (e.g.,ibs8d1forP_Key 0x8001). The grubip=argument in the next section points DHCP at that auto-created interface.
Verify injected modules before repacking.
hfi1/rdmavt are present as plain
.ko, no leftover.ko.xz:for f in hw/hfi1/hfi1 sw/rdmavt/rdmavt core/ib_uverbs ulp/ipoib/ib_ipoib; do test -f $BASE/$f.ko && echo "$f.ko OK" || echo "MISSING $f.ko" test -e $BASE/$f.ko.xz && echo "ERROR: Leftover .ko.xz detected in $f" donehfi1 vermagic matches the installer kernel:
modinfo -F vermagic $BASE/hw/hfi1/hfi1.ko # must start with $KERNEL_VERSION
depmod registered hfi1:
grep -q "/hfi1\.ko" $INITRD/lib/modules/$KERNEL_VERSION/modules.dep && echo "modules.dep OK"
Repack initrd and stage boot files:
cd $INITRD find . | cpio -o -c -R root:root | gzip -9 > ../initrd_CN5K.img mkdir -p /var/lib/tftpboot/uefi cp $INITRD/initrd_CN5K.img /var/lib/tftpboot/uefi/ cp /media/images/pxeboot/vmlinuz /var/lib/tftpboot/uefi/
Stage Install Tree and GRUB Configuration
Copy ISO contents to HTTP document root.
Define target OS minor release directory (for example, RHEL10.1):
OS_DIR="RHEL10.1"
Create netinstall directory for the target release:
mkdir -p /var/www/html/netinstall/ISO/$OS_DIR
Copy installation files from the mounted ISO:
rsync -av /media/ /var/www/html/netinstall/ISO/$OS_DIR
Unmount the temporary loopback mount:
umount /media
Set ownership and permissions for Apache:
chmod -R 755 /var/www/html/netinstall/ISO/$OS_DIR chown -R apache:apache /var/www/html/netinstall/ISO/$OS_DIR
Stage the UEFI bootloader binary in TFTP boot directory:
cp /var/www/html/netinstall/ISO/$OS_DIR/EFI/BOOT/grubx64.efi /var/lib/tftpboot/uefi/
Stage the UEFI bootloader binary in TFTP boot directory:
cp /var/www/html/netinstall/ISO/$OS_DIR/EFI/BOOT/grubx64.efi /var/lib/tftpboot/uefi/
Configure
/var/lib/tftpboot/uefi/grub.cfg:cat << 'EOF' > /var/lib/tftpboot/uefi/grub.cfg set default="0" set timeout=20 menuentry 'RHEL 10.x Install (SuperNIC IPoIB)' { linuxefi uefi/vmlinuz net.ifnames=0 biosdevname=0 rd.neednet=1 \ rd.net.timeout.carrier=120 rd.net.timeout.dhcp=60 rd.driver.pre=hfi1,ib_ipoib \ ip=ib1:dhcp ip.bootdev=ib1 bootproto=dhcp inst.waitfornet=180 \ inst.repo=http://192.168.100.1/netinstall/ISO/RHEL10.1 iommu=pt initrdefi uefi/initrd_CN5K.img } EOFFor a single-SuperNIC node with one active port, the base port is
ib0and the P_Key 0x8001 child isib1.Note
<IFACE>represents the client's IPoIB partition child interface as discovered inside the installer initrd, for example,ib1oribp13s0d1.To determine the
<IFACE>on the PXE partition, list the client's IB netdevs in ifindex order and pick the link-up P_Key 0x8001 child (non-zero dev_port); itsib<N>name is its position in that ordering:for d in /sys/class/net/ib*; do n=$(basename "$d") printf "ifindex=%s name=%s pkey=%s carrier=%s dev_port=%s\n" \ "$(cat $d/ifindex)" "$n" "$(cat $d/pkey)" "$(cat $d/carrier)" "$(cat $d/dev_port)" done | sortThe link-up (
carrier=1) pkey=0x8001 child (dev_port!=0) isib<N>at itsifindexposition.Reload HTTP:
systemctl restart httpd.service
Verify the Server Before Booting
Confirm the DHCP/TFTP service and the HTTP install tree from the PXE server:
dnsmasq is active and bound to the ib interface
systemctl is-active dnsmasq journalctl -u dnsmasq --no-pager -n 20 | grep 'sockets bound exclusively to interface'
HTTP install tree (expect HTTP/1.1 200 OK)
curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/.treeinfo curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/images/install.img curl -I http://192.168.100.1/netinstall/ISO/$OS_DIR/
install.imgsize (~600–1200 MB depending on release)curl -sI http://192.168.100.1/netinstall/ISO/$OS_DIR/images/install.img | grep -i content-length
3.5.3.2.6. Set Up Client Firmware and Boot Execution
Access the Client BIOS/UEFI Setup utility.
Enable the following settings:
UEFI Network Stack: Enabled
IPv4 PXE Support: Enabled
Cornelis SuperNIC Option ROM: Enabled
Set UEFI PXE (IPv4) as the first boot device in the boot order.
On the PXE Server, monitor service interaction in real time:
RHEL 9.x Server:
journalctl -u dhcpd.service -f
RHEL 10.x Server:
journalctl -u dnsmasq -f
Monitor HTTP repository downloads:
tail -f /var/log/httpd/access_log
3.5.3.2.7. Post-Install OPX Software and IPoIB Interface Setup
During the PXE boot phase, network configuration lives in temporary memory (initrd). Once booted into the target OS, the client must be configured to persistently obtain or assign its IP address on the SuperNIC interface.
In modern Linux distributions (RHEL 9.x and RHEL 10.x), persistent network configuration is managed via NetworkManager keyfiles located in /etc/NetworkManager/system-connections/.
Configure persisent IpoIB NetworkManager Connection
Because communication occurs over partition
0x8001, configure a child partition connection bound to the physical parent interface:Define interface names (for example, parent=
ib0, child=ib0.8001)PARENT_IF="ib0" CHILD_IF="ib0.8001" PKEY="0x8001" UUID=$(uuidgen)
Create NetworkManager keyfile for the IPoIB child partition
cat << EOF > /etc/NetworkManager/system-connections/$CHILD_IF.nmconnection [connection] id=$CHILD_IF uuid=$UUID type=infiniband interface-name=$CHILD_IF [infiniband] transport-mode=datagram parent=$PARENT_IF p-key=$PKEY [ipv4] method=auto [ipv6] addr-gen-mode=eui64 method=auto EOF
Lock down file permissions to root (mandatory for NetworkManager keyfiles)
chmod 600 /etc/NetworkManager/system-connections/$CHILD_IF.nmconnection
Reload NetworkManager and bring up the partition interface
nmcli connection reload nmcli connection up $CHILD_IF
Install OPX Software and Configure Partitions
Because the clean OS installation from the ISO does not contain the updated Omni-Pathsoftware stack, the installed OS requires final driver and interface initialization:
Install the OPX Software.
Install the OPX Software package on the client so that native SuperNIC drivers (hfi1, rdmavt) and link firmware are loaded permanently across standard kernel updates. Refer to “Install the OPX Software”.
Configure Fabric Subnets (Parent vs. Child Interfaces):
Parent interface (for example,
ib0): Bound to the default fabric partition (0x7fff/0xffff).Child interface (for example,
ib0.8001oribs1d1): Bound to partition key0x8001.Important
Child interfaces must be assigned to a different IP subnet than their parent interfaces. Because they operate on distinct fabric partitions, assigning them to the same IP subnet will cause packet forwarding and routing failures due to P_Key mismatches.
3.5.3.2.8. Troubleshooting PXE Boot
Symptom/Error | Root Cause | Corrective Action |
|---|---|---|
Dracut emergency shell; dmesg reports decompression failed with status 6 | On RHEL 10.x, kernel module was injected using | Inject modules as plain uncompressed |
modprobe: FATAL: Module hfi1 not found | depmod was not executed after copying new modules into initrd. | Run |
Client hangs at DHCP discovery; no packets on server | dnsmasq configured with | Remove |
Client receives IP via Ethernet rather than SuperNIC |
| Explicitly define the boot interface in GRUB: |
Installer fails stage2 image download | IPoIB fabric link training and broadcast group join lagged timeouts. | Increase GRUB boot parameters: |
SuperNIC link fails to achieve Active state | Firmware missing from | Verify |