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)'
Kickstart Install (Automated — Recommended)
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 |
|
Start VM |
|
Stop VM |
|
Force stop |
|
Console access |
|
Get IP |
|
Create snapshot |
|
Revert snapshot |
|
Delete VM |
|
Add disk |
|
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
-
[ ] Download Rocky 9 ISO
-
[ ] Create kickstart file
-
[ ] Spin up server1
-
[ ] SSH in and verify
-
[ ] Create snapshot "fresh-install"
-
[ ] Begin Chapter 1 exercises