> ## Documentation Index
> Fetch the complete documentation index at: https://docs.poolside.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Prepare RHEL

> Prepare a Red Hat Enterprise Linux host before you install Poolside model inference on-premises.

export const nvidiaDriverVersion = "580.126.20";

Complete these steps on a Red Hat Enterprise Linux (RHEL) host before you run the [on-premises installation](/deployment/on-prem/install).

For requirements that apply to every host, see [On-premises installation prerequisites](/deployment/on-prem/prerequisites/overview).

## Supported versions and architectures

| Item             | Supported values                        |
| ---------------- | --------------------------------------- |
| Operating system | Red Hat Enterprise Linux (RHEL) 9.6     |
| CPU architecture | `amd64` (`x86_64`), `arm64` (`aarch64`) |

## Step 1: Lock the RHEL release

RHEL can upgrade the host to a newer minor release when new updates become available through `dnf update` or `yum update`.

Before you install packages, lock the release to RHEL 9.6 to prevent automatic minor version upgrades.

```bash theme={null}
# List available versions
sudo subscription-manager release --list

# Lock the release to version 9.6
sudo subscription-manager release --set=9.6

sudo yum clean all
```

## Step 2: Install required tools

* Install `iptables-nft` using `yum` (version `1.8.10-11.el9`)
* Install `container-selinux` using `yum`
* Install `jq` using `yum` (version `1.6` or later)
* Install `yq` (version `v4.49.2` or later) from the [yq releases page](https://github.com/mikefarah/yq/releases/tag/v4.49.2)
  * Download [`yq_linux_amd64.tar.gz`](https://github.com/mikefarah/yq/releases/download/v4.49.2/yq_linux_amd64.tar.gz) or [`yq_linux_arm64.tar.gz`](https://github.com/mikefarah/yq/releases/download/v4.49.2/yq_linux_arm64.tar.gz) and install it to `/usr/local/bin/yq`
* Install `unzip` using `yum` (version `6.00` or later)
* Install `skopeo` using `yum` (package version `1.18.1-2.el9_6` or later for your host architecture)
* Install `terraform` (version `1.8.5`) from the [Terraform 1.8.5 releases page](https://releases.hashicorp.com/terraform/1.8.5)
  * Download [`terraform_1.8.5_linux_amd64.zip`](https://releases.hashicorp.com/terraform/1.8.5/terraform_1.8.5_linux_amd64.zip) or [`terraform_1.8.5_linux_arm64.zip`](https://releases.hashicorp.com/terraform/1.8.5/terraform_1.8.5_linux_arm64.zip) and install the binary to `/usr/local/bin/terraform`
  * `unzip` is required to extract the Terraform binary

To install `kubectl`, add the Kubernetes repository. Ensure that the `kubectl` version is the same as or newer than the RKE2 Kubernetes version.

```bash theme={null}
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key
EOF
```

Then run:

```bash theme={null}
sudo yum install -y kubectl
```

## Step 3: Configure the Terraform command path

<Note>
  In RHEL 9.x, `/usr/local/bin` is not included in the `secure_path` setting in
  `/etc/sudoers` by default. As a result, `sudo terraform` can return a `command
      not found` error.

  Run Terraform with the absolute path: `/usr/local/bin/terraform`.
</Note>

## Step 4: Disable the `nouveau` driver

Confirm that the `nouveau` graphics driver is not loaded. For instructions, see [Disable the nouveau driver in the NVIDIA documentation](https://docs.nvidia.com/ai-enterprise/deployment/vmware/latest/nouveau.html).

Run the following command to check whether the `nouveau` driver is loaded. If the command returns output, follow the next steps to turn off the driver and reboot.

```bash theme={null}
lsmod | grep nouveau
```

If the `nouveau` driver is loaded:

```bash theme={null}
# Check for nouveau in the GRUB configuration.
grep GRUB_CMDLINE_LINUX /etc/default/grub

# If this command does not show that nouveau is blocked, ensure that the
# GRUB_CMDLINE_LINUX line in /etc/default/grub contains "modprobe.blacklist=nouveau",
# for example, at the end of the line.

cat <<EOF | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF

# Regenerate the kernel initramfs.
sudo dracut --force

# Regenerate the GRUB configuration.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# Reboot the system.
sudo systemctl reboot

# After reboot, confirm that the nouveau driver is not loaded.
lsmod | grep nouveau
```

## Step 5: Choose a GPU driver installation method

When no NVIDIA driver is installed on the host, the GPU Operator compiles and installs one from its driver container.

### Let the GPU Operator install the driver

If the host can reach the RHEL package repositories and Secure Boot is disabled, do not preinstall an NVIDIA driver. The driver container uses the repositories to identify the running kernel and obtain the required tools and kernel modules during [Step 2 of the on-premises installation](/deployment/on-prem/install#step-2-install-supporting-infrastructure-services).

The driver compiled by the GPU Operator is not compatible with Secure Boot.

### Preinstall the NVIDIA driver

Preinstall the driver on an air-gapped host or when you require Secure Boot. Follow the [NVIDIA driver installation instructions for RHEL](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#red-hat-enterprise-linux-almalinux-rocky-linux-oracle-linux). For details about obtaining Red Hat-signed NVIDIA GPU drivers as a technical preview, see [NVIDIA's Red Hat-signed driver overview](https://developer.nvidia.com/blog/nvidia-open-gpu-datacenter-drivers-for-rhel9-signed-by-red-hat/).

Install NVIDIA driver version <code>{nvidiaDriverVersion}</code>, which is the version fully validated with this installation bundle. Earlier driver versions are not supported. Later versions might work, but can cause compatibility issues because they have not been validated against this bundle.

After you install the driver, run `nvidia-smi` and confirm that it reports the host GPUs. During installation, the GPU Operator detects the host driver and skips driver compilation.

## Step 6: Verify prerequisites

Your host is ready when the following checks pass:

* Confirm that the release is locked to 9.6:

  ```bash theme={null}
  sudo subscription-manager release --show
  ```

* Confirm that the required tools are installed and on the path:

  ```bash theme={null}
  kubectl version --client
  jq --version
  /usr/local/bin/yq --version
  /usr/local/bin/terraform version
  skopeo --version
  ```

* Confirm that the `nouveau` driver is not loaded. This command returns no output:

  ```bash theme={null}
  lsmod | grep nouveau
  ```

## Next steps

* [Install on-premises](/deployment/on-prem/install)

## Related resources

* [On-premises installation prerequisites](/deployment/on-prem/prerequisites/overview)
* [Install on-premises](/deployment/on-prem/install)
* [On-premises deployment](/deployment/on-prem/overview)
* [STIG hardening considerations](/deployment/on-prem/stig)
* [Supported configurations](/deployment/supported-configurations)
