This is an original planning guide. It is not a vendor manual, an official standard, or legal advice. Example addresses use documentation ranges. Review every command before you paste it.
Where RHEL sits
Red Hat Enterprise Linux is the commercial distribution with a subscription or simple content access, a long support window, and a family of rebuilds that are not this page. dnf installs packages. Subscription status is part of whether dnf can see updates. A host that cannot see updates is a patch-guide problem, not a reason to disable security controls.
NetworkManager is the usual network tool. nmcli sets a lab address of 192.0.2.10/24 via 192.0.2.1 and you replace it outside the lab. firewalld is the usual firewall. SELinux is enforcing on a normal install. getenforce should say Enforcing. Permissive is a diagnostic hour, not a permanent setting. Disabled is a rebuild conversation.
The hostname is set with hostnamectl. Services are systemd. The systemd guide applies. Units still are not edited under /usr.
This page is not Rocky, Alma, CentOS Stream, Fedora, or Oracle Linux. Those have their own pillars because the update source and the promise differ even when the commands look alike.
The first hour on a lab host
Step 1 on RHEL covers identity. Read /etc/redhat-release and subscription status. A host that is not registered will not patch later. The check is: The release and the entitlement match the ticket. If that check fails, stop and fix the ticket before the next step. The way back is the previous file or the previous image, which the provisioning guide told you to keep. Do not install a second package to hide a failed step. The browser generators for RHEL draft a starter. They do not log in. Read the draft, delete what this lab does not need, and replace prompt-for-this. A line that worked on a different distribution is not a reason to paste it here.
Step 2 on RHEL covers hostname and user. Set hostname edge-01. Create a named admin with a key and sudo. Do not SSH as root. The hardening guide turns root SSH off after the key works. The check is: The key login and sudo both work. If that check fails, stop and fix the ticket before the next step. The way back is the previous file or the previous image, which the provisioning guide told you to keep. Do not install a second package to hide a failed step. The browser generators for RHEL draft a starter. They do not log in. Read the draft, delete what this lab does not need, and replace prompt-for-this. A line that worked on a different distribution is not a reason to paste it here.
Step 3 on RHEL covers address and firewall. Set the lab address with nmcli. Allow SSH from the lab prefix in firewalld. Reload. A firewall that does not allow your prefix looks like a dead host. The check is: SSH from the prefix works. An address outside it does not. If that check fails, stop and fix the ticket before the next step. The way back is the previous file or the previous image, which the provisioning guide told you to keep. Do not install a second package to hide a failed step. The browser generators for RHEL draft a starter. They do not log in. Read the draft, delete what this lab does not need, and replace prompt-for-this. A line that worked on a different distribution is not a reason to paste it here.
Step 4 on RHEL covers SELinux. Confirm Enforcing. If a service is denied, read the denial before you change a mode. Permissive left on is an unfinished diagnostic. The check is: getenforce says Enforcing at the end of the window. If that check fails, stop and fix the ticket before the next step. The way back is the previous file or the previous image, which the provisioning guide told you to keep. Do not install a second package to hide a failed step. The browser generators for RHEL draft a starter. They do not log in. Read the draft, delete what this lab does not need, and replace prompt-for-this. A line that worked on a different distribution is not a reason to paste it here.
Step 5 on RHEL covers updates. dnf update from the entitled repositories, then reboot if the kernel changed. The patch guide's ring applies as soon as this is more than a lab. The check is: The running kernel matches the ticket after reboot. If that check fails, stop and fix the ticket before the next step. The way back is the previous file or the previous image, which the provisioning guide told you to keep. Do not install a second package to hide a failed step. The browser generators for RHEL draft a starter. They do not log in. Read the draft, delete what this lab does not need, and replace prompt-for-this. A line that worked on a different distribution is not a reason to paste it here.
# RHEL lab. Review before you paste.
# dnf, NetworkManager, firewalld, SELinux Enforcing.
# Lab address 192.0.2.10/24 via 192.0.2.1.
# Do not setenforce 0 as a fix.
# prompt-for-this is not a password to keep.
The commands you will actually repeat
dnf check-update and a read of the list, then an update in the patch ring. Reboot when the kernel changes. Record the version.
firewall-cmd changes are permanent only when you say --permanent and reload, and you still allow the management prefix. A rich rule you do not understand does not go in.
SELinux denials have a reason you can read. Fix the file context or the policy. Do not setenforce 0 and walk away.
Subscription or entitlement is checked when dnf fails to see repositories. Adding a random repository is not the fix.
What RHEL is not
RHEL is not CentOS Stream. Stream moves first. RHEL is the product you are entitled to.
It is not Fedora, and it is not a rebuild. Do not file a rebuild bug as if Red Hat owes that host a ticket.
It is not Ubuntu. apt and netplan are the wrong tools.
The hour you stop
Write the hostname, the role, and the clock time before you change RHEL. If this host is also serving users, it is not the lab and this first hour belongs on a spare. The provisioning guide is how the spare gets built. A change without a spare is a change you can still postpone.
Keep the console or the out-of-band path open for the whole hour. Reloading a network service, a firewall, or a secure-shell daemon from the only session is how a lab becomes a drive across town. The hardware guide names that path for a physical machine. A virtual machine uses the hypervisor console. A cloud instance uses the serial console the platform gives you. Test it before the reload, not after.
The address 192.0.2.10/24 and the gateway 192.0.2.1 are documentation. They belong in the lab note and nowhere else. On a real network, use the prefix the network desk already assigned. On a cloud instance, use the address the platform assigned and do not hard-code the documentation range into user-data. If a generator filled the documentation address into a production draft, delete it.
prompt-for-this is a reminder that a secret is missing. It is not a password you set, not a token you commit, and not a string you leave in a configuration file because the service started. The real secret lives in the password store. The ticket says who can read it. A file that still contains the reminder is a file you have not finished.
One service is enough for the first hour on RHEL. The purpose from the fundamentals page says which service. Every other package stays uninstalled until its own guide has a ticket. A host that enables a web server, a database, and a queue in the first hour has three changes and no proof. Finish the login, the address, and the update. Then stop.
Read the package transaction before you accept it. A count of packages is not a review. If the list contains a repository you did not add, stop. If it contains a kernel, the patch guide's reboot decision applies and the console stays open. If it contains software this role does not need, remove that line from the plan rather than installing it and disabling it later.
The previous image, the previous configuration file, or the previous package version is the rollback. Write the path down while the host still works. A rollback you invent after a failed reload is a guess. The migration guide assumes the old copy is still there. Do not delete it in the same hour to free a disk.
When the checks pass, copy the notes into the ticket and leave the host alone. The next host waits until a second person can repeat the login and the address from the notes. A fleet built from memory drifts. A fleet built from the file the provisioning guide stored stays boring, which is the point of RHEL in production.
If a step on RHEL fails twice, stop for the day. The failure is the result. Adding a forum command beside a half-applied config produces a host nobody can rebuild. Rebuild from the image instead. The time you lose is smaller than the time you will spend explaining the hybrid.
Hand the finished lab to the guide that matches the role: web, mail, storage, backup, or hardening. RHEL being installed is not the same as the role being ready. The role guide has its own proof. Do not skip it because the package manager exited without an error.
A second person reads the hostname, the address, and the rollback path aloud before you build the next host. If they cannot find those three in the ticket, the notes are not done. Silence is not agreement. The check is the sentence they repeat back.
Store the working notes next to the image version. A month from now RHEL will still boot from that pair, and the chat where you remembered a flag will be gone. The file is the memory. The host is replaceable. That is the whole point of writing this hour down.
RHEL checks before a second host
Confirm this before you call the change done: RHEL is the OS the hostname reports, not a neighbour you copied from. The lab address 192.0.2.10/24 is gone before this host is placed on a real network. prompt-for-this is not the password that was set, and no password is in the ticket. The named admin can log in with a key. The package manager used is the one this page names. A network file from a different distribution was not pasted in. The config test or the apply command for this network tool succeeded. The previous image or install file is kept. No new third-party repository was added in the first hour. A service you do not need was not enabled to see what it does. Console or out-of-band access works before you reload SSH. A second person read the hostname and the address. getenforce is Enforcing. firewalld allows the management prefix and not the world. The host is registered to the entitlement you expect. And no Ubuntu or Debian network file was added. If one of those fails, stop.
Tools for this guide
These tools run in the browser on this site. They do not log into your machines.
- RHEL Initial Server Setup Script Generator
- RHEL Static IP Configuration Script Generator
- RHEL Change Hostname Script Generator
Related pillar guides
Guides in this cluster
These supporting pages belong to this pillar.
- Cheat Sheet: RHEL Commands Cheat Sheet
- Troubleshooting: RHEL Troubleshooting Guide
- How-To: Initial Server Setup on RHEL
- How-To: How to Set a Static IP on RHEL
- How-To: How to Change the Hostname on RHEL
- How-To: How to Create a Sudo User on RHEL
- How-To: How to Harden SSH on RHEL
- How-To: How to Set Up firewalld on RHEL
- How-To: How to Add a Package Repository on RHEL
- How-To: How to Enable Automatic Security Updates on RHEL
- How-To: How to Set Timezone and NTP on RHEL
- How-To: How to Add Swap Space on RHEL
- How-To: How to Add and Mount a New Disk on RHEL
- How-To: How to Set Up LVM on RHEL
- How-To: How to Extend the Root Filesystem on RHEL
- How-To: How to Set Up an NFS Server on RHEL
- How-To: How to Mount an NFS Share on RHEL
- How-To: How to Set Up a Samba File Share on RHEL
- How-To: How to Install a LAMP Stack on RHEL
- How-To: How to Install a LEMP Stack on RHEL
- How-To: How to Install Docker on RHEL
- How-To: How to Install Node.js on RHEL
- How-To: How to Install Python on RHEL
- How-To: How to Install Java on RHEL
- How-To: How to Install a Let's Encrypt SSL Certificate on RHEL
- How-To: How to Set Up Fail2ban on RHEL
- How-To: How to Configure SELinux on RHEL
- How-To: How to Upgrade RHEL to the Next Release
- How-To: How to Update the Kernel on RHEL
- How-To: How to Set Up Remote Desktop (xrdp) on RHEL
- How-To: How to Disable IPv6 on RHEL
- How-To: How to Join RHEL to Active Directory
- How-To: How to Forward Logs with rsyslog on RHEL
- How-To: How to Set Up Network Bonding on RHEL