Phase 0: Lab Setup

Lab Setup

Complete lab setup using virsh/virt-install on your Arch workstation. No GUI required.

Prerequisites Check

# Verify virtualization support
lscpu | grep -i virtualization
# Should show: VT-x (Intel) or AMD-V (AMD)

# Check KVM modules loaded
lsmod | grep kvm
# Should show: kvm_intel or kvm_amd, plus kvm

# Verify libvirt installed and running
systemctl status libvirtd
virsh version

# Your user should be in libvirt group
groups | grep -E '(libvirt|kvm)'
# If not: sudo usermod -aG libvirt,kvm $USER && newgrp libvirt

Download Rocky Linux 9

Rocky Linux 9 is 100% binary-compatible with RHEL 9. Same commands, same packages, free.

# Create ISO directory
mkdir -p ~/isos

# Download Rocky 9 minimal (smaller, faster, CLI only)
curl -L -o ~/isos/Rocky-9-latest-x86_64-minimal.iso \
  https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-minimal.iso

# Verify download
curl -L -o ~/isos/Rocky-9-latest-x86_64-minimal.iso.CHECKSUM \
  https://download.rockylinux.org/pub/rocky/9/isos/x86_64/CHECKSUM

cd ~/isos && sha256sum -c Rocky-9-latest-x86_64-minimal.iso.CHECKSUM --ignore-missing

Network Setup

# Check default network exists
virsh net-list --all

# If 'default' network not active:
virsh net-start default
virsh net-autostart default

# Verify network details
virsh net-info default
virsh net-dumpxml default | grep -E '(ip address|range)'

Fully automated, no interaction required. Best for spinning up/destroying VMs quickly.

cat > /tmp/ks-server1.cfg << 'EOF'
# RHCSA Lab Server 1 - Kickstart
#version=RHEL9

lang en_US.UTF-8
keyboard us
timezone America/Los_Angeles --utc

# For lab use, plaintext is fine:
rootpw --plaintext changeme

# Create admin user with sudo
user --name=admin --groups=wheel --plaintext --password=changeme

# Network - DHCP with hostname
network --bootproto=dhcp --device=link --activate --hostname=server1.lab.local

# Partitioning - auto with LVM (exam uses LVM heavily)
clearpart --all --initlabel
autopart --type=lvm

cdrom

%packages
@^minimal-environment
vim-enhanced
bash-completion
tmux
tar
rsync
%end

%post --log=/root/ks-post.log
systemctl enable cockpit.socket
echo '%wheel ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/wheel-nopasswd
mkdir -p /root/.ssh
chmod 700 /root/.ssh
%end

reboot
EOF
# Create server1
sudo virt-install \
  --name rhcsa-server1 \
  --ram 2048 \
  --vcpus 2 \
  --disk size=20,path=/var/lib/libvirt/images/rhcsa-server1.qcow2 \
  --os-variant rocky9 \
  --location ~/isos/Rocky-9-latest-x86_64-minimal.iso \
  --initrd-inject=/tmp/ks-server1.cfg \
  --extra-args="inst.ks=file:/ks-server1.cfg console=ttyS0" \
  --network network=default \
  --graphics none \
  --console pty,target_type=serial \
  --noautoconsole
# Create server2 (for clustering/NFS labs)
sed 's/server1/server2/g' /tmp/ks-server1.cfg > /tmp/ks-server2.cfg

sudo virt-install \
  --name rhcsa-server2 \
  --ram 2048 \
  --vcpus 2 \
  --disk size=20,path=/var/lib/libvirt/images/rhcsa-server2.qcow2 \
  --os-variant rocky9 \
  --location ~/isos/Rocky-9-latest-x86_64-minimal.iso \
  --initrd-inject=/tmp/ks-server2.cfg \
  --extra-args="inst.ks=file:/ks-server2.cfg console=ttyS0" \
  --network network=default \
  --graphics none \
  --console pty,target_type=serial \
  --noautoconsole

VM Management Quick Reference

Task Command

List VMs

virsh list --all

Start VM

virsh start <name>

Stop VM

virsh shutdown <name>

Force stop

virsh destroy <name>

Console access

virsh console <name> (Ctrl+] to exit)

Get IP

virsh domifaddr <name>

Create snapshot

virsh snapshot-create-as <name> --name "label"

Revert snapshot

virsh snapshot-revert <name> --snapshotname "label"

Delete VM

virsh undefine <name> --remove-all-storage

Add disk

virsh attach-disk <name> /path/to/disk.qcow2 vdX --persistent

Add Extra Disks (Storage Labs — Chapters 11-14)

# Create 5GB disk images
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/rhcsa-server1-disk2.qcow2 5G
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/rhcsa-server1-disk3.qcow2 5G

# Attach to running VM (hot-add)
virsh attach-disk rhcsa-server1 /var/lib/libvirt/images/rhcsa-server1-disk2.qcow2 vdb --persistent
virsh attach-disk rhcsa-server1 /var/lib/libvirt/images/rhcsa-server1-disk3.qcow2 vdc --persistent

SSH Key Setup

# Copy SSH key to VMs
ssh-copy-id admin@$(virsh domifaddr rhcsa-server1 | awk '/ipv4/{print $4}' | cut -d/ -f1)

Checklist

  1. [ ] Download Rocky 9 ISO

  2. [ ] Create kickstart file

  3. [ ] Spin up server1

  4. [ ] SSH in and verify

  5. [ ] Create snapshot "fresh-install"

  6. [ ] Begin Chapter 1 exercises