260 lines
9.3 KiB
Text
260 lines
9.3 KiB
Text
#!ipxe
|
|
###############################################################################
|
|
# Centra Cloud PXE Boot Menu
|
|
#
|
|
# This iPXE script provides network boot options for bare-metal provisioning
|
|
# of Centra Cloud infrastructure nodes.
|
|
#
|
|
# Boot Profiles:
|
|
# - Control Plane: All 8 core services (flaredb, iam, plasmavmc, etc.)
|
|
# - Worker: Compute-focused services (k8shost, plasmavmc, basic services)
|
|
# - All-in-One: Testing/homelab deployment with all services on a single node
|
|
#
|
|
# Network Boot Flow:
|
|
# 1. DHCP assigns IP and points to TFTP server
|
|
# 2. TFTP serves iPXE bootloader (undionly.kpxe or ipxe.efi)
|
|
# 3. iPXE requests this script via HTTP
|
|
# 4. User selects profile or automatic selection via MAC mapping
|
|
# 5. iPXE loads NixOS kernel and initrd via HTTP
|
|
# 6. NixOS installer provisions the node based on profile
|
|
###############################################################################
|
|
|
|
# Set console output
|
|
console --picture --left 0 --right 0
|
|
|
|
# Configuration Variables
|
|
set boot-server 10.0.100.10
|
|
set boot-url http://${boot-server}/boot
|
|
set nixos-url ${boot-url}/nixos
|
|
set provisioning-server http://${boot-server}
|
|
set deployer-url http://${boot-server}:8080
|
|
|
|
# Detect network configuration
|
|
echo Network Configuration:
|
|
echo IP Address: ${ip}
|
|
echo Subnet Mask: ${netmask}
|
|
echo Gateway: ${gateway}
|
|
echo MAC Address: ${mac}
|
|
echo
|
|
|
|
# MAC-based Profile Selection
|
|
# This section automatically selects a profile based on MAC address
|
|
# Useful for automated provisioning without user interaction
|
|
|
|
isset ${profile} || set profile unknown
|
|
|
|
# Control-plane nodes (MAC address mapping)
|
|
iseq ${mac} 52:54:00:12:34:56 && set profile control-plane && set hostname control-plane-01 && goto boot ||
|
|
iseq ${mac} 52:54:00:12:34:59 && set profile control-plane && set hostname control-plane-02 && goto boot ||
|
|
iseq ${mac} 52:54:00:12:34:5a && set profile control-plane && set hostname control-plane-03 && goto boot ||
|
|
|
|
# Worker nodes (MAC address mapping)
|
|
iseq ${mac} 52:54:00:12:34:57 && set profile worker && set hostname worker-01 && goto boot ||
|
|
iseq ${mac} 52:54:00:12:34:5b && set profile worker && set hostname worker-02 && goto boot ||
|
|
iseq ${mac} 52:54:00:12:34:5c && set profile worker && set hostname worker-03 && goto boot ||
|
|
|
|
# All-in-one nodes (MAC address mapping)
|
|
iseq ${mac} 52:54:00:12:34:58 && set profile all-in-one && set hostname all-in-one-01 && goto boot ||
|
|
|
|
# No MAC match - show interactive menu
|
|
goto menu
|
|
|
|
###############################################################################
|
|
# Interactive Boot Menu
|
|
###############################################################################
|
|
|
|
:menu
|
|
clear menu
|
|
menu Centra Cloud - Bare-Metal Provisioning
|
|
item --gap -- ------------------------- Boot Profiles -------------------------
|
|
item control-plane 1. Control Plane Node (All Services)
|
|
item worker 2. Worker Node (Compute Services)
|
|
item all-in-one 3. All-in-One Node (Testing/Homelab)
|
|
item --gap -- ------------------------- Advanced Options -------------------------
|
|
item shell iPXE Shell (for debugging)
|
|
item reboot Reboot System
|
|
item exit Exit to BIOS
|
|
item --gap -- ------------------------- Information -------------------------
|
|
item --gap -- MAC: ${mac}
|
|
item --gap -- IP: ${ip}
|
|
choose --timeout 30000 --default control-plane selected || goto cancel
|
|
goto ${selected}
|
|
|
|
:cancel
|
|
echo Boot cancelled, rebooting in 5 seconds...
|
|
sleep 5
|
|
reboot
|
|
|
|
###############################################################################
|
|
# Control Plane Profile
|
|
###############################################################################
|
|
|
|
:control-plane
|
|
set profile control-plane
|
|
echo
|
|
echo ========================================================================
|
|
echo Booting: Control Plane Node
|
|
echo ========================================================================
|
|
echo
|
|
echo This profile includes ALL Centra Cloud services:
|
|
echo - FlareDB: Distributed database (PD, Store, TiKV-compatible)
|
|
echo - IAM: Identity and Access Management
|
|
echo - PlasmaVMC: Virtual Machine Controller
|
|
echo - K8sHost: Kubernetes node agent
|
|
echo - FlashDNS: High-performance DNS server
|
|
echo - ChainFire: Firewall/networking service
|
|
echo - Object Storage: S3-compatible storage
|
|
echo - Monitoring: Prometheus, Grafana, AlertManager
|
|
echo
|
|
echo Target use case: Control plane nodes in production clusters
|
|
echo
|
|
sleep 2
|
|
goto boot
|
|
|
|
###############################################################################
|
|
# Worker Profile
|
|
###############################################################################
|
|
|
|
:worker
|
|
set profile worker
|
|
echo
|
|
echo ========================================================================
|
|
echo Booting: Worker Node
|
|
echo ========================================================================
|
|
echo
|
|
echo This profile includes COMPUTE-FOCUSED services:
|
|
echo - K8sHost: Kubernetes node agent (primary workload runner)
|
|
echo - PlasmaVMC: Virtual Machine Controller (VM workloads)
|
|
echo - ChainFire: Firewall/networking (network policy enforcement)
|
|
echo - FlashDNS: Local DNS caching
|
|
echo - Basic monitoring agents
|
|
echo
|
|
echo Target use case: Worker nodes for running customer workloads
|
|
echo
|
|
sleep 2
|
|
goto boot
|
|
|
|
###############################################################################
|
|
# All-in-One Profile
|
|
###############################################################################
|
|
|
|
:all-in-one
|
|
set profile all-in-one
|
|
echo
|
|
echo ========================================================================
|
|
echo Booting: All-in-One Node
|
|
echo ========================================================================
|
|
echo
|
|
echo This profile includes ALL services on a SINGLE node:
|
|
echo - Complete Centra Cloud stack
|
|
echo - Suitable for testing, development, and homelab use
|
|
echo - NOT recommended for production (no HA, resource intensive)
|
|
echo
|
|
echo Target use case: Development, testing, homelab deployments
|
|
echo
|
|
sleep 2
|
|
goto boot
|
|
|
|
###############################################################################
|
|
# Boot Logic - Load NixOS Kernel and Initrd
|
|
###############################################################################
|
|
|
|
:boot
|
|
# Set hostname if not already set
|
|
isset ${hostname} || set hostname centra-node-${mac:hexhyp}
|
|
|
|
echo
|
|
echo ========================================================================
|
|
echo Network Boot Configuration
|
|
echo ========================================================================
|
|
echo Profile: ${profile}
|
|
echo Hostname: ${hostname}
|
|
echo MAC Address: ${mac}
|
|
echo IP Address: ${ip}
|
|
echo Boot Server: ${boot-server}
|
|
echo ========================================================================
|
|
echo
|
|
|
|
# Kernel parameters for NixOS netboot
|
|
# These parameters are passed to the NixOS installer
|
|
set kernel-params initrd=initrd ip=dhcp
|
|
set kernel-params ${kernel-params} centra.profile=${profile}
|
|
set kernel-params ${kernel-params} centra.hostname=${hostname}
|
|
set kernel-params ${kernel-params} centra.mac=${mac}
|
|
set kernel-params ${kernel-params} centra.provisioning-server=${provisioning-server}
|
|
set kernel-params ${kernel-params} plasmacloud.deployer_url=${deployer-url}
|
|
set kernel-params ${kernel-params} console=tty0 console=ttyS0,115200n8
|
|
|
|
# For debugging, enable these:
|
|
# set kernel-params ${kernel-params} boot.shell_on_fail
|
|
# set kernel-params ${kernel-params} systemd.log_level=debug
|
|
|
|
echo Loading NixOS kernel...
|
|
# NOTE: These paths will be populated by the S3 image builder (T032.S3)
|
|
# For now, they point to placeholder paths that need to be updated
|
|
kernel ${nixos-url}/bzImage ${kernel-params} || goto failed
|
|
|
|
echo Loading NixOS initrd...
|
|
initrd ${nixos-url}/initrd || goto failed
|
|
|
|
echo
|
|
echo Booting NixOS installer for ${profile} provisioning...
|
|
echo
|
|
boot || goto failed
|
|
|
|
###############################################################################
|
|
# Error Handling
|
|
###############################################################################
|
|
|
|
:failed
|
|
echo
|
|
echo ========================================================================
|
|
echo Boot Failed!
|
|
echo ========================================================================
|
|
echo
|
|
echo Failed to load kernel or initrd from ${nixos-url}
|
|
echo
|
|
echo Troubleshooting:
|
|
echo 1. Check that the HTTP server is running on ${boot-server}
|
|
echo 2. Verify that NixOS boot files exist at ${nixos-url}/
|
|
echo 3. Check network connectivity: ping ${boot-server}
|
|
echo 4. Review firewall rules (HTTP port 80/443 should be open)
|
|
echo
|
|
echo Dropping to iPXE shell for debugging...
|
|
echo Type 'menu' to return to the boot menu
|
|
echo
|
|
goto shell
|
|
|
|
###############################################################################
|
|
# iPXE Shell (for debugging)
|
|
###############################################################################
|
|
|
|
:shell
|
|
echo
|
|
echo Entering iPXE shell. Useful commands:
|
|
echo - dhcp: Renew DHCP lease
|
|
echo - ifstat: Show network interface status
|
|
echo - route: Show routing table
|
|
echo - ping <host>: Test connectivity
|
|
echo - menu: Return to boot menu
|
|
echo - kernel <url>: Load kernel manually
|
|
echo - initrd <url>: Load initrd manually
|
|
echo - boot: Boot loaded kernel
|
|
echo
|
|
shell
|
|
|
|
###############################################################################
|
|
# Reboot
|
|
###############################################################################
|
|
|
|
:reboot
|
|
echo Rebooting system...
|
|
reboot
|
|
|
|
###############################################################################
|
|
# Exit to BIOS
|
|
###############################################################################
|
|
|
|
:exit
|
|
echo Exiting iPXE and returning to BIOS boot menu...
|
|
exit
|