RHEL 10 shipped in May 2025 with kernel 6.12, GNOME 47 on Wayland, Python 3.12, GCC 14.2, and a brand new Image Mode (bootc) that lets you deploy the OS as a container image. It also brought post-quantum cryptography support, encrypted DNS, and an x86-64-v3 baseline requirement, which means older pre-2015 CPUs are no longer supported.
This guide walks through a clean RHEL 10 installation from ISO on bare metal or a virtual machine, covering every screen of the Anaconda installer with real screenshots. After the install, you will register the system with Red Hat, apply updates, and configure essential post-install settings. The same steps apply whether you are setting up a physical server, a Proxmox or KVM virtual machine, or a VMware/VirtualBox guest.
Verified working: April 2026 on RHEL 10.1 (kernel 6.12.0-124.8.1.el10_1), Anaconda installer, GNOME 47 desktop
Prerequisites
Before starting, make sure you have the following ready:
- Red Hat account for downloading the ISO and registering the system. A free Red Hat Developer subscription works for personal use and allows up to 16 systems
- RHEL 10 ISO image from the Red Hat Customer Portal (Binary DVD ~8 GB, or Boot ISO ~900 MB for network installs)
- Bootable USB drive (8 GB+) for physical installs, or a hypervisor with the ISO mounted for virtual machines
- Hardware requirements: x86-64-v3 CPU (Intel Haswell / AMD Excavator or newer), 2 GB RAM minimum (4 GB recommended with GUI), 20 GB disk (40 GB+ recommended), network access for registration and updates
- Tested on: RHEL 10.1, x86_64, Proxmox VE 8.3 (KVM), 4 GB RAM, 50 GB disk
RHEL 10 dropped support for x86-64-v2 processors. If your server predates 2013, check CPU compatibility first with grep -o 'avx2' /proc/cpuinfo on an existing Linux install. No output means the CPU lacks AVX2 and won’t boot RHEL 10.
Download the RHEL 10 ISO
Log in to the Red Hat Customer Portal and navigate to the RHEL 10 downloads section. Two ISO options are available:
- Binary DVD (~8 GB): contains all packages for an offline install. Best for air-gapped servers or when you want a full local package set
- Boot ISO (~900 MB): minimal image that pulls packages from Red Hat CDN during install. Faster to download, requires internet on the target machine
For most server installs, the Binary DVD is the safer choice since it does not depend on network availability during installation.

Create Bootable Installation Media
How you prepare the media depends on whether you are installing on physical hardware or a virtual machine.
USB Drive (Physical Servers)
On a Linux workstation, write the ISO directly to the USB device:
sudo dd if=~/Downloads/rhel-10.1-x86_64-dvd.iso of=/dev/sdX bs=4M status=progress oflag=sync
Replace /dev/sdX with your actual USB device. Double-check with lsblk before running this command because dd will overwrite whatever device you point it at.
On Windows, use Rufus with GPT partition scheme and DD image mode. On macOS, balenaEtcher handles the write with a simple drag-and-drop interface.
Virtual Machine Setup
For VMware, VirtualBox, Proxmox, or KVM, upload the ISO to your datastore or storage pool and attach it to a new VM as a CD/DVD drive. Set the VM to boot from the optical drive first.

Mount the ISO to the VM’s virtual CD-ROM and start the machine:

Boot from the RHEL 10 Installer
When the system boots from the ISO, the GRUB boot menu appears. Select Install Red Hat Enterprise Linux 10.0 and press Enter. The “Test this media & install” option runs an integrity check on the ISO first, which adds a few minutes but catches corrupt downloads before they cause cryptic install failures.

Select Installation Language
The Anaconda installer starts with a language selection screen. Pick your preferred language and keyboard layout. This controls the installer’s interface language and sets the default locale for the installed system (you can change it later).

Configure the Installation Summary
After language selection, Anaconda presents the Installation Summary hub. This is where all configuration happens before writing anything to disk. Items marked with a warning icon need attention before you can proceed.

Work through each section that needs configuration:
Root Password
Click Root Password to set the root account credentials. RHEL 10 locks the root account by default unless you explicitly set a password here. For servers, enabling root SSH access is common during initial setup, though production systems should rely on sudo-capable user accounts instead.

Create a User Account
Click User Creation to add a non-root account. Check “Make this user administrator” to grant sudo privileges. This account is what you should use for day-to-day access.

Connect Red Hat Account (Optional)
If the machine has internet access during installation, you can register with Red Hat right from the installer. This pre-registers the system and enables content delivery during install. You can also skip this and register after installation from the command line.

Installation Destination (Disk Partitioning)
Click Installation Destination to select the target disk and partitioning scheme. For most setups, the “Automatic” option creates a sensible LVM layout with /boot, /boot/efi (on UEFI systems), and a root volume group. RHEL 10 defaults to XFS for the root filesystem.
For production servers, consider custom partitioning with separate /var and /home volumes to prevent log files or user data from filling the root filesystem.

Once all sections are configured, click Begin Installation. Anaconda writes the partition table, formats the filesystems, and installs packages. On a local disk with the Binary DVD, this typically takes 5 to 15 minutes depending on disk speed.
Reboot into the Installed System
When the installation completes, Anaconda prompts you to reboot. Remove the USB drive or unmount the ISO from the VM before the system restarts, otherwise it will boot back into the installer.

After reboot, log in with the user account you created during installation:

If you installed the Server with GUI option, GNOME 47 loads on Wayland by default. For a headless server with no desktop, you can log in at the text console or connect over SSH.
Register with Red Hat from the Desktop
If you skipped registration during installation, the GNOME desktop offers a graphical registration path through Settings > System > Registration:

The command-line method in the next section works for both GUI and headless server installs.
Post-Installation Setup
With RHEL 10 installed, configure the essentials before putting the system into service.
Set the System Hostname
A proper FQDN hostname matters for logging, certificate generation, and subscription management. Set it with hostnamectl:
sudo hostnamectl set-hostname rhel10.example.com --static
Verify the change took effect:
hostnamectl
The output shows the static hostname, operating system version, kernel, and architecture:
Static hostname: rhel10.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: a1b2c3d4e5f6...
Boot ID: f6e5d4c3b2a1...
Virtualization: kvm
Operating System: Red Hat Enterprise Linux 10.1 (Coughlan)
CPE OS Name: cpe:/o:redhat:enterprise_linux:10::baseos
Kernel: Linux 6.12.0-124.8.1.el10_1.x86_64
Architecture: x86-64
Add the hostname to /etc/hosts so it resolves locally without DNS:
echo "10.0.1.50 rhel10.example.com rhel10" | sudo tee -a /etc/hosts
Replace 10.0.1.50 with your server’s actual IP address.
Register and Subscribe the System
Registration connects the system to Red Hat’s content delivery network, unlocking official repos and security updates. Run:
sudo subscription-manager register --auto-attach
Enter your Red Hat username and password when prompted. The --auto-attach flag automatically assigns the best available subscription:
Registering to: subscription.rhsm.redhat.com:443/subscription
Username: [email protected]
Password:
The system has been registered with ID: 1de1c897-0348-48b2-895a-15e1296a8f46
The registered system name is: rhel10.example.com
Installed Product Current Status:
Product Name: Red Hat Enterprise Linux for x86_64
Status: Subscribed
Confirm the registration status:
sudo subscription-manager status
The output should show “Overall Status: Current” meaning the system has valid entitlements and can pull updates.
Apply System Updates
List the available repositories to confirm registration worked:
sudo dnf repolist
You should see the BaseOS and AppStream repositories:
Updating Subscription Management repositories.
repo id repo name
rhel-10-for-x86_64-appstream-rpms Red Hat Enterprise Linux 10 for x86_64 - AppStream (RPMs)
rhel-10-for-x86_64-baseos-rpms Red Hat Enterprise Linux 10 for x86_64 - BaseOS (RPMs)
Pull all available updates:
sudo dnf -y update
If the update includes a new kernel, reboot to load it:
sudo systemctl reboot
Verify the Installed System
After reboot, confirm the OS release and kernel version:
cat /etc/redhat-release
This returns the full release string:
Red Hat Enterprise Linux release 10.1 (Coughlan)
Check the running kernel:
uname -r
Output:
6.12.0-124.8.1.el10_1.x86_64
Enable the CRB Repository
Many third-party packages and development tools depend on packages in the CodeReady Builder (CRB) repository, which is not enabled by default. Enable it with:
sudo subscription-manager repos --enable codeready-builder-for-rhel-10-x86_64-rpms
This is a prerequisite for installing EPEL and many development libraries. See our dedicated guide on enabling the CRB repository on RHEL 10 for more details.
Configure the Firewall
RHEL 10 installs and enables firewalld by default. Verify it is running:
sudo firewall-cmd --state
Open ports for the services you plan to run. For example, to allow SSH and HTTP/HTTPS permanently:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
List the active rules to confirm:
sudo firewall-cmd --list-all
Confirm SELinux is Enforcing
SELinux should be in enforcing mode by default. Verify with:
getenforce
The output should be Enforcing. Never set SELinux to permissive or disabled on a production system. If a service is being blocked, use ausearch -m avc -ts recent to find the specific denial and fix it with the appropriate setsebool or semanage command rather than disabling the entire security framework.
Set the Timezone
Confirm or change the system timezone:
sudo timedatectl set-timezone America/New_York
List available timezones with timedatectl list-timezones and pick the one matching your server’s location. Accurate time is critical for log correlation, certificate validation, and Kerberos authentication.
RHEL 10 Key Specifications
For reference, here are the core components that ship with RHEL 10:
| Component | Version |
|---|---|
| Kernel | 6.12.0 (10.0) / 6.12.0-124 (10.1) |
| GCC | 14.2 |
| glibc | 2.39 |
| Python | 3.12 |
| Perl | 5.40 |
| Go | 1.23 |
| GNOME | 47 (Wayland default) |
| Default filesystem | XFS |
| CPU baseline | x86-64-v3 (AVX2 required) |
| Support lifecycle | Until 2035 (10 years) |
| Codename | Coughlan |
Unregistering the System
If you need to decommission or re-register the system (for example, moving a subscription to another server):
sudo subscription-manager unregister
This releases the subscription entitlement back to your Red Hat account pool.
Production Hardening Checklist
Before putting the server into production, consider these additional steps:
- Disable root SSH login: set
PermitRootLogin noin/etc/ssh/sshd_configand use key-based authentication with your sudo user instead - Configure automatic updates: install
dnf-automaticfor unattended security patches - Set up static IP addressing if the server runs services that need consistent network identity
- Install monitoring: deploy Nagios, Zabbix, or Prometheus to track resource usage and service health
- Enable Cockpit for web-based server management at
https://server-ip:9090(installed by default on Server with GUI) - Configure time sync: RHEL 10 uses chrony by default, verify with
chronyc tracking
For a detailed comparison of RHEL 10 with its free rebuilds, see our Rocky Linux 10 vs AlmaLinux 10 vs RHEL 10 comparison.