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.
Prerequisites & media
Gather the hardware, then fetch and verify the ISO. A corrupted ISO is the number-one source of “the installer just… stopped”.
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 core (x86_64) | 2 cores |
| RAM | 2 GB | 4–8 GB |
| Disk | 20 GB (XFS) | 40 GB or more |
| Network | NIC + internet or a local mirror | 1 GbE to a healthy mirror |
| Firmware | BIOS or UEFI | UEFI + 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
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
of= 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

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 entry | What it does |
|---|---|
| Install CentOS Stream 10 | The default. Straight into the installer. |
| Test this media & install | Verifies the ISO first, then installs. Choose this if you skipped the checksum. |
| Troubleshooting | Rescue shell, memtest — for when the first two fail. |
Walk the installer
The GNOME Installer for CentOS Stream is a checklist with a big button. Work top to bottom:
- Language & locale — pick what your ops team actually types in.
- Keyboard layout — set it now; changing it later is a rite of passage nobody wants.
- Date & time — enable NTP (chrony) so log timestamps mean something.
- System role — Server, Server with GUI, or Workstation.
- Network & hostname — enable the interface, give the host a real name.
- Installation source — the default (DVD/ISO) is fine; point at a mirror URL for the full Stream repos.
- Installation destination — auto-configure gives XFS on
/dev/vdawith LVM; or go manual.
wheel group for sudo.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.
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
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
# 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.
| Symptom | Usual cause | Fix |
|---|---|---|
| “No install media found” | Unverified or mis-written ISO | Re-check the SHA256; re-write the USB with dd/Rufus (DD mode) |
| USB not in boot menu | UEFI-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 firewall | Set a working DNS by hand, or point the source at a local mirror |
| Boots to emergency shell | Wrong root device / LVM confusion | Boot the Troubleshooting entry, check lsblk, re-run the installer |