This project creates a fully automated RHEL 9 lab environment using Vagrant for macOS (Apple Silicon / M1), designed to replicate the RHCSA 124 course lab.
Itβs ideal for testing, practice, and learning in a controlled virtual infrastructure for Students and Linux enthusiasts working towards RHCSA certification.
.
βββ Vagrantfile
βββ extras/
β βββ initial-setup.sh
β βββ bastion-setup.sh
β βββ workstation-setup.sh
β βββ machines.yaml
βββ synced/
βββ docs/
All virtual machines use simonaesy/rhel9-arm v0.1.0
, a custom Vagrant box specifically compiled for ARM64 (Apple Silicon / M1).
If you want to learn how to create your own custom VM box and publish it on the Vagrant Cloud registry, check out the documentation inside the docs/
folder.
IP addresses and hostnames for the machines are defined in extras/machines.yaml
.
All virtual machines use simonaesy/rhel9-arm v0.1.0. This is an
VM | Hostname | Private IP | Public IP | RAM | CPU |
---|---|---|---|---|---|
Bastion | bastion.lab.example.com | 172.25.250.254 | 172.25.250.222 | 1024 | 2 |
Workstation | workstation.lab.example.com | 172.25.250.9 | - | 2048 | 2 |
ServerA | servera.lab.example.com | 172.25.250.10 | - | 1024 | 2 |
ServerB | serverb.lab.example.com | 172.25.250.11 | - | 1024 | 2 |
- Enables root login and password authentication via SSH
- Creates a
student
user with wheel group membership - Sets passwords:
root
βredhat
student
βstudent
- Updates the system and installs basic utilities (vim, bash-completion)
- Enforces SELinux
- Enables and starts the firewall
- Installs and starts DNS services (
bind
andbind-utils
)
- Creates a symbolic link
/home/student/synced
pointing to/synced
- Installs Gnome GUI
- Configures system to boot in graphical mode
Defines VM names, hostnames, and network settings.
Example:
bastion_hostname: 'bastion.lab.example.com'
bastion_ip: '172.25.250.254'
...
The local synced/
directory is mounted to /synced
inside the workstation VM for easy file sharing between macOS and the virtual environment.
π§ͺ Usage Note
This folder is intended for scripts that will check or automate practice test exercises.
To run a script, log in as student
on the workstation and execute it like this:
/home/student/<practice_folder_set>/<script_name>.sh
All RHCSA practice exam prompts and official Red Hat guides will be placed in the /study-guide
folder inside the workstation VM.
Youβll find:
- Practice exam exercises
- Preparation labs
- Red Hat official PDFs (where applicable)
This will be your central hub for RHCSA exam preparation.
- Vagrant
- VMware Fusion
- Vagrant VMware plugin (Apple Silicon / ARM64 version)
- Install required plugins:
vagrant plugin install vagrant-vmware-desktop vagrant plugin install vagrant-vbguest vagrant plugin install vagrant-hostmanager
git clone https://github.com/SimonaCatanoiu/RHCSA-Playground
cd RHCSA-Playground
vagrant up
vagrant ssh bastion
Inside VMware Fusion:
- Go to Settings β Keyboard & Mouse
- Map
Command + C
toCtrl + Shift + C
- Map
Command + V
toCtrl + Shift + V
- In VMware Fusion, open Virtual Machine Library
- Click + β Scan for Virtual Machines
- Add the path:
<your_path_to_repo>/.vagrant/machines
π‘ Note:
For the workstation VM, you will want to open the GUI in Fusion. There are 2 methods:
The Workstation VM has an v.gui = true
in the Vagrantfile
. In order to open the GUI, you need to do the following after spinning up the VMs:
vagrant suspend workstation
vagrant up workstation
This will automatically open the VMWare Fusion GUI for you.
The VMs will are available in Fusion only when halted by Vagrant.
- Run this command:
vagrant halt
, as Vagrant locks their control while running. - Manually open the VMs in VMWare Fusion.
- SELinux is set to enforcing
- Firewall is active on all VMs
student
user has sudo privileges via thewheel
group
- Tested on macOS M1 with VMware Fusion
- RHEL 9 ARM boxes from: simonaesy/rhel9-arm
- Requires internet connection for box downloads and package installations
- If working on Linux instead, just change the
box
in theVagrantfile
and useVMWare
instead ofVMWare Fusion
as the provider.
For questions, suggestions, or improvements β feel free to open an issue or pull request.
Based on: