centos field guide
EOL era · run Stream

CentOS Stream 10 · “Kandara”

Installation Guide

From an empty disk to a hardened host in six moves. Click a step, or ride the arrows — work too.

Shortcut On AWS, GCP, Azure or OCI, pick the CentOS Stream marketplace image and you may skip straight to step 6. Everything below is for bare metal, USB and VMs.
STEP 1 / 6
STEP 01

Prerequisites & media

Gather the hardware, then fetch and verify the ISO. A corrupted ISO is the number-one source of “the installer just… stopped”.

ResourceMinimumRecommended
CPU1 core (x86_64)2 cores
RAM2 GB4–8 GB
Disk20 GB (XFS)40 GB or more
NetworkNIC + internet or a local mirror1 GbE to a healthy mirror
FirmwareBIOS or UEFIUEFI + Secure Boot (supported)
# grab the ISO — mirrors.centos.org redirects to the fastest healthy mirror
curl -fLO https://mirrors.centos.org/…/CentOS-Stream-10-x86_64-20250301-rc2.2.iso
# verify it — the .sha256 file lives next to the ISO on every mirror
sha256sum -c CentOS-Stream-10-x86_64-20250301-rc2.2.iso.sha256
#  CentOS-Stream-10-x86_64-20250301-rc2.2.iso: OK
Never skipIf the checksum does not match, re-download from a different mirror. Do not “just try it anyway”.
STEP 02

Create boot media

Three roads: a USB stick, a VM, or a cloud image. Pick the one that matches where the server is going to live.

USB — Linux / macOS host

dd if=CentOS-Stream-10-x86_64-20250301-rc2.2.iso of=/dev/sdb bs=4M status=progress oflag=sync
Read this firstof= targets the whole device, not a partition. Confirm the device with lsblk first — writing to your root disk is not a tip, it is a tragedy.

USB — Windows host

Use Rufus in DD mode, or Ventoy: format the stick once, then simply copy ISOs onto it and boot whatever you like from its menu.

Virtual machine — KVM

virt-install \
  --name centos10 --memory 4096 --vcpus 2 \
  --disk size=40 \
  --cdrom CentOS-Stream-10-x86_64-20250301-rc2.2.iso \
  --network model=virtio --boot hd \
  --osinfo centos-stream10-x86_64 --graphics vnc
USB drive plugged into a server
FIG. USB — THE CLASSIC
STEP 03

Boot the installer

Reboot into your boot device — F12 / F11 / F8 / Del, depending on the box — select the USB or CD entry, and wait for the GRUB menu.

GRUB entryWhat it does
Install CentOS Stream 10The default. Straight into the installer.
Test this media & installVerifies the ISO first, then installs. Choose this if you skipped the checksum.
TroubleshootingRescue shell, memtest — for when the first two fail.
UEFI noteStream installs cleanly in either BIOS or UEFI mode. If Secure Boot is on, the official media carries the required MOK signatures — no need to switch it off.
STEP 04

Walk the installer

The GNOME Installer for CentOS Stream is a checklist with a big button. Work top to bottom:

  1. Language & locale — pick what your ops team actually types in.
  2. Keyboard layout — set it now; changing it later is a rite of passage nobody wants.
  3. Date & time — enable NTP (chrony) so log timestamps mean something.
  4. System role — Server, Server with GUI, or Workstation.
  5. Network & hostname — enable the interface, give the host a real name.
  6. Installation source — the default (DVD/ISO) is fine; point at a mirror URL for the full Stream repos.
  7. Installation destination — auto-configure gives XFS on /dev/vda with LVM; or go manual.
ThenHit “Begin Installation” (bottom right). While packages install: set the root password (or lock root), and create your first user — add it to the wheel group for sudo.
STEP 05

First boot

After the final reboot you land in the First Boot wizard: timezone, network, SELinux (leave it Enforcing — seriously), users, and subscription registration (skip it unless you hold a Red Hat account). Then: Reboot.

stream@localhost:~$ uname -r
6.12.0-120.el10.x86_64
stream@localhost:~$ sudo dnf repolist
repo id             repo name
c10s                CentOS Stream 10
c10s-updates        CentOS Stream 10 - Updates

You are in. The machine is yours — now make it behave.

STEP 06

Post-install hardening

Ten minutes now saves a 3 a.m. page later. Run the whole block, top to bottom:

sudo dnf update -y
sudo dnf install -y epel-release htop vim rsync
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo useradd -m -s /bin/bash -G wheel deploy
sudo passwd deploy
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
# confirm everything is standing
sudo systemctl --failed
sudo getenforce
sudo firewall-cmd --list-all
sudo dnf check-update
uptime
Keep the keys, drop the passwordsTest the new key login from a second session before you rely on it. A locked-out server is a server you have to walk to.
K

Kickstart — the fast lane

Describe the machine you want; let anaconda build it. Zero clicks.

# ks.cfg — a minimal headless server
lang en_US.UTF-8
keyboard us
rootpw --iscrypted $6$r0k$…hash…
user --name stream --groups wheel
network --bootproto dhcp
selinux -- enforcing
firewall --service=ssh
zerombr
clearpart --none
autopart --type=lvm
install
reboot
Run itServe the file over HTTP (or USB) and boot with an extra argument — the installer runs unattended end to end.
# at the GRUB prompt (press “e” to edit):
boot: vmlinuz inst.ks=http://192.168.1.50/ks.cfg

This is how fleets are born: one ks.cfg per environment, a hundred boxes per afternoon. Pair it with virt-install --extra-args "inst.ks=…" for fully scripted VMs.

?

When it goes wrong

The four failures that cause ninety percent of install-desk despair.

SymptomUsual causeFix
“No install media found”Unverified or mis-written ISORe-check the SHA256; re-write the USB with dd/Rufus (DD mode)
USB not in boot menuUEFI-only stick on a legacy BIOS (or vice versa)Re-write in the matching mode — Rufus asks; dd sticks are MBR-hybrid
Installer hangs at 80%Repo unreachable — DNS or firewallSet a working DNS by hand, or point the source at a local mirror
Boots to emergency shellWrong root device / LVM confusionBoot the Troubleshooting entry, check lsblk, re-run the installer