Zero Touch Provisioning for rXg Installation on Dell PowerEdge
April 08, 2026
Overview
The rXg ISO installer is already nearly fully unattended. The custom bsdinstall_auto script handles disk selection, ZFS configuration, OS install, and rXg package install automatically with no interactive menus to navigate. For a single-disk Dell PowerEdge with blank storage, the install is fully hands-off from ISO boot to reboot. The remaining gap is post-install site-specific configuration (hostname, management IP, licensing, cluster join).
This article documents the installer internals, what iDRAC SCP needs to do, and the available approaches for closing the post-install provisioning gap.
Installer Boot Sequence
ISO Boot -> rc.local -> bsdinstall_auto -> post-install -> reboot -> rxgd create_defaults -> Web UI
Phase 1: rc.local (Boot Entrypoint)
Detects console type, sets environment variables from the package name, calls bsdinstall which invokes the custom bsdinstall_auto script. On success, shows a 5-second countdown then reboots.
Phase 2: bsdinstall_auto (Core Installer)
- Disk Selection (automated): Enumerates disks, filters out USB/MMC/mounted md devices, selects all disks matching the largest capacity. On blank disks: zero prompts. On disks with existing partitions (non-VM): one confirmation dialog.
- ZFS Configuration: Single disk is fully unattended. Multiple equal-size disks show one RAID mode dialog (stripe/mirror/RAIDZ).
- FreeBSD Install (automated): Checksum, extract base+kernel, write fstab, install bootloader.
- rXg Package Install (automated): Extracts custom kernel, configures local pkg repo, runs
pkg install rxg.
Phase 3: post-install (System Bootstrap)
Sets root password, generates SSH keys, writes boot/service configuration with hypervisor-specific tuning, creates service users (backup, cluster, snort), installs rxgd service, sets up USB automount.
Phase 4: First Boot (create_defaults)
When rxgd starts with an empty database: creates Cloak/Huggermugger records, discovers physical interfaces, creates default config (interfaces, DHCP, DNS, RADIUS, policies, bandwidth queues, purgers).
Interactive Prompts Summary (New Dell PowerEdge, Blank Disks)
| Prompt | Appears? | Reason |
|---|---|---|
| Serial terminal type | No | Only on serial console |
| Existing partitions warning | No | Blank disks skip this |
| ZFS RAID mode | Only if 2+ equal-size disks | Single disk = fully silent |
| 5-second reboot countdown | Yes | Informational, auto-proceeds |
What iDRAC SCP Needs to Do
The SCP JSON handles Phase 1 only:
- BIOS Boot Mode: UEFI
- Boot Order: Virtual CD first, then disk
- Virtual Media: Mount rXg ISO (HTTP/CIFS/NFS share)
- One-Time Boot: Virtual CD (after reboot, boots from disk)
- NIC Configuration: At least one NIC enabled for DHCP
iDRAC SCP deployment: ```bash
Via racadm
racadm -r -u root -p set -f scp.json -t json
Via Redfish API
curl -k -u root: -X POST \ https:///redfish/v1/Managers/iDRAC.Embedded.1/Actions/Oem/EID_674_Manager.ImportSystemConfiguration \ -H "Content-Type: application/json" -d @scp-import-payload.json ```
Post-Install Provisioning Approaches
Approach 1: Cluster Node Auto-Registration (Data Plane Nodes)
Built-in mechanism via bootstrap.yml. Fresh rXg boots, gets DHCP address. Write /space/rxg/bootstrap.yml with controller IP and auto_registration: true. Node calls POST /api/register_cluster_node.json on the controller. Controller responds with DB password if approved.
Limitation: Requires controller already set up and someone to write bootstrap.yml to the node.
Approach 2: First-Boot API Automation (Standalone Nodes -- Recommended)
After rXg comes up on DHCP with default config, a provisioning server pushes configuration via the REST API. Authenticate to https://<ip>/admin (admin/admin), then configure hostname, management IP, licensing, VLANs via API calls. No modification to installer or build process needed.
Approach 3: USB/Virtual Floppy Config Injection (Air-Gapped Sites)
The post-install script already sets up USB automount at /media. A custom first-boot script could read a ztp-config.yml from the mounted USB. This does NOT exist today -- would require an enhancement.
Approach 4: Custom ISO with Pre-Baked Config (Large Fleets)
Modify the ISO build to embed site-specific config. Truly zero-touch but requires a custom ISO per site/role.
Post-Install Verification
uname -a # FreeBSD version
pkg info rxg # rXg package version
service rxgd status # rxgd running
zpool status # ZFS pool health
zfs list # Dataset layout
ifconfig # Network interfaces
sockstat -4 -l # Listening services (443, 3000, 8080)
Timing
- OS install from ISO: ~5-10 minutes
- First rxgd initialization +
create_defaults: ~10-15 minutes - Total from ISO boot to Web UI: ~15-25 minutes
Default Credentials After Fresh Install
- SSH root:
rgnets - Web UI admin:
admin/admin