Boot Process
TrinityX core philosophy is that only controller nodes should have stateful and persistent storage, in order to allow its configurations to persist across reboots.
All other machines managed by the controller, such as compute, storage, or login nodes should be diskless and configured to boot from network. The image files required to boot those nodes are stored on the controller and managed by the Luna daemon, which configures the controller to act as a boot server.
See also: for the daemon-internal view of this flow — how
base/boot.pyassembles the iPXE / node-boot / installer templates, thetempl_installsegments, and the node-sideluna2-clientpre-pivot hook — see luna2 daemon architecture.
The boot process works as follows:
- Power Up the machine, either the BIOS or UEFI code will be read from ROM, firing up the first-stage bootloader.
- Select the network boot option, this will load the code to initialize the Network interface and perform the required DHCP and TFTP operations.
- Send a first boot request with DHCP and get the location of the second-stage bootloader (iPXE)
- Download the second-stage bootloader (iPXE) with TFTP
- Chainload the second-stage bootloader (iPXE) and boot from there
- Send a second boot request with DHCP and get the location of the Luna image
- Download the Base Luna image containing the kernel, aria2 and essential utilities with HTTP
- Boot Base Luna image
- Use aria2 to download Full Luna Image
- Chroot into Full Luna Image