RHEL Basics #2: Setup — Installing RHEL 9, Subscription Manager, First Login

13 min read

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.

OptionCostOne-line take
Local VMFreeRecommended. Easy snapshots and rollbacks; you can break it without consequence
Cloud instanceHourlyEC2 / Lightsail. Reachable from outside, but easy to forget and rack up cost
Bare metal / dual bootFreePermanently 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:

HostRecommended toolNotes
Apple Silicon (M1~M4)UTM (mac.getutm.app)Free; ARM64 RHEL 9 runs well
Intel Mac / Windows / LinuxVirtualBox (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:

  1. Go to developers.redhat.com
  2. Click Sign inRegister (email + password + company name; students are fine too)
  3. 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:

ISOSizeDifference
Binary DVD (x86_64-dvd.iso / aarch64-dvd.iso)~9 GBAll packages bundled, can install offline
Boot ISO (x86_64-boot.iso / aarch64-boot.iso)~900 MBBoot 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 MachineVirtualize (not Emulate, which is much slower) → Linux.

FieldValue
ISO ImageSelect your downloaded aarch64-dvd.iso
Memory4096 MB (2 GB minimum, 4 GB comfortable)
CPU Cores2~4 (about half your host cores)
Storage Size40 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.

boot menu
   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.

Anaconda's layout
┌──────────────────────────────────────────────┐
│  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:

Auto-partitioning result
/boot          1 GB    XFS
/boot/efi      600 MB  EFI (if UEFI boot)
/              70% of remaining   XFS
/home          30% of remaining   XFS
swap           roughly memory size

Everything 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.

FieldExample
Full nameCurtis Kim
User namecurtis
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.

Install progress
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).

First check
$ 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
curtis

If /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 #

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 #

check repolist
$ 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 #

dnf 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.

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 reboot

6) 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.

Time status
$ 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:

Change timezone
$ sudo timedatectl set-timezone Asia/Seoul

Check / change hostname #

hostname
$ hostnamectl
   Static hostname: rhel9-test
         Icon name: computer-vm
           Chassis: vm
        ...

# To change
$ sudo hostnamectl set-hostname rhel9-lab

Open 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.

check
$ groups
curtis wheel

$ sudo whoami
[sudo] password for curtis:
root

If wheel isn’t in the group list, log in as root and add it:

add to wheel
# After su -
# usermod -aG wheel curtis
# exit  # log back in as the user for it to take effect

Connect 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:

Check IP
$ ip -4 addr show
2: enp0s1: ...
    inet 192.168.64.15/24 ...

From the host terminal:

SSH from host
$ 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 → guest 22, then ssh -p 2222 curtis@127.0.0.1, or switch the network to Bridged Adapter.

Following along on AlmaLinux / Rocky #

Almost identical. The differences:

StepRHELAlmaLinux / Rocky
ISO downloaddevelopers.redhat.com (account required)almalinux.org / rockylinux.org (no signup)
InstallerAnacondaSame (different branding)
Subscription Manager registrationRequired (subscription-manager register)Not needed — skip the whole step
/etc/redhat-releaseRed Hat Enterprise Linux release 9.xAlmaLinux release 9.x / Rocky Linux release 9.x
Other commandsdnf / systemctl / firewalld / SELinuxAll 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.

Default boot to text mode
$ sudo systemctl set-default multi-user.target
$ sudo reboot

To 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 register to attach RHEL repos and unlock dnf.
  • dnf update -y for 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.

X