RHEL Basics #2: Setup — Installing RHEL 9, Subscription Manager, First Login
In #1 we mapped the Red Hat family. This post is the procedure for standing up a single RHEL machine yourself — getting the ISO, installing it into a VM, registering via Subscription Manager, and cleaning up the small post-install items in one cycle.
Where this post sits in the RHEL Basics series:
- #1 What is RHEL — From Fedora to RHEL, plus AlmaLinux and Rocky Linux
- #2 Setup — Installing RHEL 9, Subscription Manager, first login ← this post
- #3 dnf and package management — repo, modules, AppStream
- #4 Intro to systemd — services, targets, journalctl
- #5 Users / groups / permissions — UID/GID, sudo, ACL
- #6 Filesystem basics — XFS, mount, /etc/fstab
- #7 Basic security — firewalld, SSH hardening
Where to install it #
Three places to put a learning RHEL machine.
| Option | Cost | One-line take |
|---|---|---|
| Local VM | Free | Recommended. Easy snapshots and rollbacks; you can break it without consequence |
| Cloud instance | Hourly | EC2 / Lightsail. Reachable from outside, but easy to forget and rack up cost |
| Bare metal / dual boot | Free | Permanently claims a disk. Overkill for learning |
This post uses a local VM as the baseline. If anything goes sideways during install, you just delete the VM and restart — safest path for someone touching an OS for the first time. Tooling depends on the host:
| Host | Recommended tool | Notes |
|---|---|---|
| Apple Silicon (M1~M4) | UTM (mac.getutm.app) | Free; ARM64 RHEL 9 runs well |
| Intel Mac / Windows / Linux | VirtualBox (virtualbox.org) | Free. For business, VMware Workstation/Fusion also works |
The screenshots and examples below assume Apple Silicon + UTM + RHEL 9 (ARM64), but the installer screens and commands are essentially identical on x86_64 / VirtualBox. I’ll flag the differences as they come up.
Side note: you can also boot RHEL on AWS and SSH in (AWS Basics #1). A t2.micro under the Free Tier is enough for learning. This post sticks to a local VM specifically because the experience of seeing the installer screens directly matters.
1) Sign up for the Developer Subscription and grab the ISO #
To use RHEL legally for free, you need the Red Hat Developer Subscription. One account lets you install RHEL on up to 16 machines, and you get the same security patches.
How to sign up:
- Go to developers.redhat.com
- Click Sign in → Register (email + password + company name; students are fine too)
- Confirm the email and you’re done
Downloading the ISO #
At access.redhat.com/downloads, click Red Hat Enterprise Linux 9 to open the download page. Two ISOs are offered:
| ISO | Size | Difference |
|---|---|---|
Binary DVD (x86_64-dvd.iso / aarch64-dvd.iso) | ~9 GB | All packages bundled, can install offline |
Boot ISO (x86_64-boot.iso / aarch64-boot.iso) | ~900 MB | Boot only; packages pulled from the network during install |
For learning, take the Binary DVD. Once downloaded, you can install without internet. Use aarch64 for Apple Silicon, x86_64 otherwise.
Important — Right before downloading, you choose the architecture. Match it to your host CPU. M1~M4 Mac →
aarch64, Intel/AMD →x86_64. Pick wrong and the VM won’t even boot.
The download usually takes 30 minutes to an hour. You can move ahead with the next steps in the meantime.
2) Building the VM #
Apple Silicon — UTM #
Open UTM and you’ll see a welcome screen. Pick Create a New Virtual Machine → Virtualize (not Emulate, which is much slower) → Linux.
| Field | Value |
|---|---|
| ISO Image | Select your downloaded aarch64-dvd.iso |
| Memory | 4096 MB (2 GB minimum, 4 GB comfortable) |
| CPU Cores | 2~4 (about half your host cores) |
| Storage Size | 40 GB (20 GB minimum) |
| Shared Directory | (Optional) — if you want to share a host folder |
On the final Summary screen, give the VM a recognizable Name like rhel9-test. Save and the VM appears in the left sidebar.
Intel/Windows/Linux — VirtualBox #
In VirtualBox: New → enter a name → Type: Linux, Version: Red Hat (64-bit) → memory / CPU / disk match the table above.
After creating it, select the VM and go to Settings → Storage → the Empty CD icon to mount the x86_64-dvd.iso you downloaded. Skip this and the VM stops at “no boot disk” when you try to start.
Either way — start the VM #
Hit Start on the prepared VM and a black screen with a boot menu shows up.
Install Red Hat Enterprise Linux 9.x
Test this media & install Red Hat Enterprise Linux 9.x
Troubleshooting -->Choose the top entry, Install Red Hat Enterprise Linux 9.x, and press Enter. After a brief stream of text logs, the graphical installer (Anaconda) launches.
3) Walking through the Anaconda installer #
The Anaconda screen is shaped as one hub (Installation Summary) + several spokes (individual settings). Items with a yellow ! must be opened at least once before installation can begin.
┌──────────────────────────────────────────────┐
│ INSTALLATION SUMMARY │
├──────────────────────────────────────────────┤
│ LOCALIZATION │
│ 🌐 Keyboard [English (US)] │
│ 🌐 Language Support [English] │
│ 🌐 Time & Date [Americas/New York] │
├──────────────────────────────────────────────┤
│ SOFTWARE │
│ 💿 Connect to Red Hat │
│ 💿 Installation Source [Local media] │
│ 💿 Software Selection [Server with GUI] │
├──────────────────────────────────────────────┤
│ SYSTEM │
│ 💾 Installation Destination ⚠️ │
│ 💾 KDUMP │
│ 💾 Network & Host Name │
│ 💾 Security Profile │
├──────────────────────────────────────────────┤
│ USER SETTINGS │
│ 👤 Root Password ⚠️ │
│ 👤 User Creation │
└──────────────────────────────────────────────┘
[Begin Installation]You can fill these out in any order, but top-down is the natural flow. The key items:
Language / Keyboard / Time & Date #
- Language — English or whatever you prefer. For server learning I recommend English; error messages are easier to search.
- Keyboard — usually whatever your physical keyboard is.
- Time & Date — pick your zone (
Asia / Seoul,America / New_York, etc.). Leave NTP auto-sync on.
Software Selection #
The default is Server with GUI. If GUI isn’t a burden, leave it. If you want lighter, choose Server (text mode) or Minimal Install.
This series assumes Server with GUI. The GNOME desktop is installed too, but in practice most work happens in the terminal.
Installation Destination — disk partitioning #
This is the ⚠️ that trips people up most often. Click in and you’ll see the disk list. There should be one VM disk; click and check it, then:
- Storage Configuration: choose Automatic
- Encryption: leave off for learning. Turn on LUKS in production (Advanced #5)
Done to exit, and confirm the ⚠️ disappears. Auto-partitioning produces something like this:
/boot 1 GB XFS
/boot/efi 600 MB EFI (if UEFI boot)
/ 70% of remaining XFS
/home 30% of remaining XFS
swap roughly memory sizeEverything is wrapped in LVM, and the filesystem defaults to XFS (covered in #6). Manual partitioning is out of scope for this post.
Network & Host Name #
Wired (eth0/enp0s1) is detected automatically but disabled (OFF). Don’t forget to flip this to ON — install without it and the system has no internet after first boot.
In the lower-right of the screen, set Host Name to something like rhel9-test and click Apply. Skip it and you’ll boot into localhost.localdomain.
Connect to Red Hat (optional) #
This option registers the system at install time. Drop in your Red Hat account ID/PW and Subscription is auto-attached.
This post skips it in favor of registering by command after install. The end result is identical, but the experience of typing subscription-manager yourself is worth more.
Root Password #
Another ⚠️. Make it long (12+ characters recommended). Don’t use a pattern-y password even on a learning VM.
There are options for Lock root account and Allow root SSH login with password. For learning, leave both at default (don’t lock, don’t allow SSH password login). In production, lock root and allow only SSH key auth (#7).
User Creation #
Create a daily-driver user. Don’t get into the habit of working as root.
| Field | Example |
|---|---|
| Full name | Curtis Kim |
| User name | curtis |
| Make this user administrator | ✅ Check (so sudo works) |
| Password | (a different strong password) |
Checking Make this user administrator puts the user in the wheel group, which gives sudo. Leave it unchecked and you’ll have to su - with the root password every single time.
Begin Installation #
When all ⚠️ are gone, Begin Installation activates. Click it to start.
Installing the software ...
100 / 1240 packages
...Depending on VM specs and disk speed, 10~25 minutes. You can step away.
When it finishes, a Reboot System button appears. Click it and the VM restarts — but very often the installer boot screen comes up again. When that happens, unmount the ISO from the VM (UTM: stop VM, then Edit → Drive → Eject; VirtualBox: Devices → Optical Drives → Remove disk) and boot again.
4) First boot and login #
After ejecting the ISO and rebooting, the GRUB boot menu flashes briefly (auto-progress in 5 seconds) and then a graphical login screen comes up.
You may see an Initial Setup screen the first time. Accept the License Information (I accept the license agreement) and exit via FINISH CONFIGURATION.
Log in as the user you just made (curtis). If a GNOME welcome wizard appears, Skip through it. When you see a black desktop with a terminal, the OS is properly up.
Open a shell via Activities → Terminal (or Ctrl+Alt+T).
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.5 (Plow)
$ uname -a
Linux rhel9-test 5.14.0-503.x.x.el9_5.aarch64 ...
$ whoami
curtisIf /etc/redhat-release shows Red Hat Enterprise Linux release 9.x, you’re definitely on RHEL. AlmaLinux or Rocky will print a different string (covered below).
5) Subscription Manager registration #
Now you need to tie this machine to your Red Hat account. Without this, almost every dnf install fails because the package repos aren’t accessible yet.
Register #
$ sudo subscription-manager register --username <RHID> --password <PW>
The system has been registered with ID: a1b2c3d4-...
The registered system name is: rhel9-test<RHID> is the Red Hat account ID you signed up with at developers.redhat.com; <PW> is the password. If you don’t want to put the password on the command line, omit --password and you’ll get a prompt.
When the command succeeds, you’re auto-attached in Simple Content Access mode and all RHEL repositories become enabled.
Verify #
$ sudo dnf repolist
repo id repo name
rhel-9-for-aarch64-appstream-rpms Red Hat Enterprise Linux 9 ...
rhel-9-for-aarch64-baseos-rpms Red Hat Enterprise Linux 9 ...Two lines means success. If they’re missing, registration didn’t complete properly. Check sudo subscription-manager status and try again.
First update #
$ sudo dnf update -y
Last metadata expiration check: 0:00:01 ago ...
Dependencies resolved.
...
Complete!Days or weeks have passed since the install ISO was burned, so security patches have piled up. The first update typically runs 5~15 minutes.
If the kernel changed during the update, you need to reboot.
$ sudo dnf needs-restarting -r
Core libraries or services have been updated since boot-up:
* kernel
Reboot is required to fully utilize these updates.
$ sudo reboot6) Post-install fixes — time / hostname / sudo / SSH #
Install is done, but there are a few things to clean up before going live.
Time sync — chronyd #
The time-sync daemon on RHEL 9 is chronyd. It should already be running.
$ timedatectl
Local time: Fri 2026-04-10 14:23:01 KST
Universal time: Fri 2026-04-10 05:23:01 UTC
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
NTP service: active
$ chronyc sources
MS Name/IP address Stratum ...
^* ntp.example.com 2 ...If System clock synchronized: yes and NTP service: active, you’re good. If the timezone is wrong:
$ sudo timedatectl set-timezone Asia/SeoulCheck / change hostname #
$ hostnamectl
Static hostname: rhel9-test
Icon name: computer-vm
Chassis: vm
...
# To change
$ sudo hostnamectl set-hostname rhel9-labOpen a new shell after changing and the prompt now shows the new name.
Is sudo working? #
If you checked Make this user administrator during install, the user is in the wheel group, and the default RHEL 9 sudoers policy gives wheel sudo.
$ groups
curtis wheel
$ sudo whoami
[sudo] password for curtis:
rootIf wheel isn’t in the group list, log in as root and add it:
# After su -
# usermod -aG wheel curtis
# exit # log back in as the user for it to take effectConnect via SSH #
Living in the VM console gets old fast. SSH from the host terminal gives you copy/paste, multiple windows, the works.
First, find the IP from inside the VM:
$ ip -4 addr show
2: enp0s1: ...
inet 192.168.64.15/24 ...From the host terminal:
$ ssh curtis@192.168.64.15
The authenticity of host '192.168.64.15 (192.168.64.15)' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no)? yes
curtis@192.168.64.15's password:
[curtis@rhel9-lab ~]$Password for now, but we’ll switch to SSH key auth in the later post (#7).
VirtualBox users — the default NAT network doesn’t allow direct SSH from the host to the VM. Either add a port forward at Settings → Network → Advanced → Port Forwarding mapping host
2222→ guest22, thenssh -p 2222 curtis@127.0.0.1, or switch the network to Bridged Adapter.
Following along on AlmaLinux / Rocky #
Almost identical. The differences:
| Step | RHEL | AlmaLinux / Rocky |
|---|---|---|
| ISO download | developers.redhat.com (account required) | almalinux.org / rockylinux.org (no signup) |
| Installer | Anaconda | Same (different branding) |
| Subscription Manager registration | Required (subscription-manager register) | Not needed — skip the whole step |
/etc/redhat-release | Red Hat Enterprise Linux release 9.x | AlmaLinux release 9.x / Rocky Linux release 9.x |
| Other commands | dnf / systemctl / firewalld / SELinux | All identical |
So skip step (5) and everything else is the same. The rest of this series (#3 onward) follows just as well.
Common pitfalls #
“VM won’t boot” #
Wrong ISO architecture is the top cause. M1~M4 Mac with an x86_64 ISO, or Intel with aarch64 — won’t boot. Re-download.
In VirtualBox, leaving Version at something generic like Linux/Other (64-bit) occasionally blocks boot too. Use Red Hat (64-bit) specifically.
“Install finished but the installer keeps appearing” #
The ISO is still mounted in the virtual CD drive and the VM keeps booting back to it. Stop VM → remove ISO → reboot.
“Every dnf install fails”
#
99% of the time, Subscription registration didn’t complete. Check sudo subscription-manager status.
“sudo doesn’t work”
#
You forgot to check Make this user administrator during install. Log in as root and run usermod -aG wheel <user>, then re-login as the user.
“GUI is too heavy” #
Once you’re comfortable, drop the GUI and boot into text mode — way lighter on memory and CPU.
$ sudo systemctl set-default multi-user.target
$ sudo rebootTo get GUI back, set it to graphical.target (target details in #4 systemd).
Wrap-up #
The flow from this post:
- Run a learning RHEL on a local VM — UTM on Apple Silicon, VirtualBox elsewhere.
- Get the ISO from access.redhat.com/downloads after signing up for a Developer Subscription. Wrong architecture (
aarch64/x86_64) means no boot. - The ⚠️ items in Anaconda — disk (Installation Destination) / Root Password / User Creation. Don’t forget Make this user administrator.
- Don’t skip the Network & Host Name → ON toggle.
- After install, register with
subscription-manager registerto attach RHEL repos and unlockdnf. dnf update -yfor the first patch round; reboot if the kernel changed.- AlmaLinux / Rocky behaves nearly identically — just skip the Subscription step entirely.
Next — package management for real #
The RHEL machine is alive and online. Next up is what we install and remove on top of it — the starting point of all operations.
#3 dnf and package management — repo, modules, AppStream covers the dnf command set (install, remove, search, info, history, repoquery), why AppStream is split from BaseOS, picking specific versions of a package via modules (PostgreSQL 13/15/16, etc.), and safely attaching external repos like EPEL or COPR — all in one go.