Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion guides/common/assembly_bootloader-binary-location.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ include::modules/ref_pxelinux-bootloaders.adoc[leveloffset=+1]

include::modules/ref_grub2-uefi-bootloaders.adoc[leveloffset=+1]

include::modules/ref_ipxe-bootloaders.adoc[leveloffset=+1]
include::modules/ref_http-bootloaders.adoc[leveloffset=+1]
35 changes: 30 additions & 5 deletions guides/common/modules/con_bootloader-binary-location-overview.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,47 @@
[id="con_bootloader-binary-location-overview_{context}"]
= Boot loader management and file structure

[role="_abstract"]
{Project} manages and serves boot loader binaries through the *{SmartProxy}*, which provides the network boot services used during automated host provisioning.
{Project} supports PXE boot for BIOS and UEFI firmware on various architectures utilizing TFTP or HTTP(S).

During a network-based installation, {SmartProxy} coordinates the following services:

* DHCP: DHCP: Assigns IP addresses and provides the boot loader filename and server information.
DHCP:: Assigns IP addresses and provides the boot loader filename and server information.

* TFTP: Delivers boot loaders such as PXELinux, Grub2, or iPXE binaries to clients.
TFTP:: Delivers boot loaders such as PXELinux, Grub2, or iPXE binaries to clients. TFTP also servers the following resources:
. Configuration files for boot loaders
. Kernels and `initramdisk`

* HTTP(S): Serves boot loaders and installation files via the {SmartProxy}’s HTTPBoot module.
HTTP(S):: Serves boot loaders and installation files via the {SmartProxy}’s HTTPBoot module. HTTP(S) also serves the following resources:
. Configuration files for bootloaders
. Kernels & initramdisk
. Installation config files (Kickstart)
. Repository content
. Communication between Host <> Proxy <> Foreman

When a host begins a network boot, it retrieves the appropriate boot loader (for example, `pxelinux.0`, `grubx64.efi`, or `ipxe.efi`) according to *PXE Loader* setting in {Project}.
When a host begins a network boot, it retrieves the appropriate boot loader (for example, `pxelinux.0`, `grubx64.efi`, or `ipxe.efi`) according to the *PXE Loader* option in {Project}.
The boot loader then loads {Project}-generated configuration files that define which kernel and initrd to boot, initiating the OS installation process.

The *{SmartProxy}* manages the distribution of these boot loader binaries and their configuration files.
All boot loaders are stored under the {SmartProxy}’s TFTP root directory (/var/lib/tftpboot/), which is also shared by the HTTPBoot service.
All boot loaders are stored on {SmartProxy} under the TFTP root directory (`/var/lib/tftpboot/`), which is also shared by the HTTPBoot service.

The {SmartProxy} also generates a directory for each provisioned host and names the directory with the host MAC address. In these directories, the {SmartProxy} creates symlinks to the boot files and configuration files, for example:
+
----
├── host-config
│ └── 00-aa-aa-99-99-04
│ └── grub2
│ ├── boot.efi -> ../../../grub2/grubx64.efi
│ ├── boot-sb.efi -> ../../../grub2/shimx64.efi
│ ├── grub.cfg-00:aa:aa:99:99:04 -> ../../../grub2/grub.cfg-00:aa:aa:99:99:04
│ ├── grub.cfg-01-00-aa-aa-99-99-04 -> ../../../grub2/grub.cfg-01-00-aa-aa-99-99-04
│ ├── grubx64.efi -> ../../../grub2/grubx64.efi
│ └── shimx64.efi -> ../../../grub2/shimx64.efi
----
+
This is useful for placing your own boot loader binaries in the `bootloader_universe` directory and use them instead of the default ones provided in `/var/lib/tftpboot/boot`.
This is useful, for example, when you provision ARM hosts, for which {ProjectName} does not provide boot loaders.

By default, boot loader binaries are placed directly under service-specific directories such as `grub2/`
(for example, `/var/lib/tftpboot/grub2/grubx64.efi`).
Expand Down
90 changes: 45 additions & 45 deletions guides/common/modules/ref_bootloader-types.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,23 @@
[id="ref_bootloader-types_{context}"]
= Boot loader types in {Project}

[role="_abstract"]
{Project} uses multiple types of PXE boot loaders during network provisioning, depending on firmware type, protocol, and boot environment.

In {Project}, you can configure a **PXE Loader** for each host.
The PXE Loader determines which boot loader binary the host retrieves during network boot and how it communicates with the {SmartProxy} (via TFTP or HTTP).
Select a PXE Loader based on whether the host uses **BIOS**, **UEFI**, **Secure Boot**, or **HTTP Boot**.

== PXE Loader Types and Boot Protocols in {Project}
== PXE loader types and boot protocols in {Project}

The following table lists the PXE Loader options available in the {Project}.
Each loader is associated with a specific boot protocol and firmware type.

.PXE Loader Types and Boot Protocols
.PXE loader types and boot protocols

[cols="1,1,1,1", options="header"]
|===
| PXE Loader (UI Label)
| PXE loader (UI label)
| Category
| Firmware
| Protocol
Expand Down Expand Up @@ -109,83 +110,83 @@ iPXE Direct (HTTP):: Boots directly via embedded or firmware-level iPXE using on

None:: {Project} does not specify a boot loader.

== Boot Loader File Mapping and Architecture Naming
== Boot loader file mapping and architecture naming

{Project} automatically determines the correct boot loader filename for each host based on its *architecture* and the *PXE Loader* selected in the host settings.
This mechanism ensures that the correct boot loader binary (such as `grubx64.efi` or `grubaa64.efi`) is selected automatically,
without requiring administrators to manage architecture-specific filenames.

.PXE Loader to Boot Loader Mapping
.PXE loader to boot loader mapping

[cols="1,1,1", options="header"]
|===
| PXE Loader (UI Label)
| Boot Loader File (Template Path)
| PXE loader (UI label)
| Boot loader file (template path)
| Example (x86_64)

| None
| -
| -

| PXELinux BIOS
| pxelinux.0
| pxelinux.0
| `pxelinux.0`
| `pxelinux.0`

| PXELinux UEFI
| pxelinux.efi
| pxelinux.efi
| `pxelinux.efi`
| `pxelinux.efi`

| Grub2 BIOS
| grub<__arch__>.0
| grubx64.0
| `grub<__arch__>.0`
| `grubx64.0`

| Grub2 ELF
| grub<__arch__>.elf
| grubx64.elf
| `grub<__arch__>.elf`
| `grubx64.elf`

| Grub2 UEFI
| grub<__arch__>.efi
| grubx64.efi
| `grub<__arch__>.efi`
| `grubx64.efi`

| Grub2 UEFI SecureBoot
| shim<__arch__>.efi
| shimx64.efi
| `shim<__arch__>.efi`
| `shimx64.efi`

| Grub2 UEFI HTTP
| grub<__arch__>.efi (via HTTP)
| grubx64.efi
| `grub<__arch__>.efi` (via HTTP)
| `grubx64.efi`

| Grub2 UEFI HTTPS
| grub<__arch__>.efi (via HTTPS)
| grubx64.efi
| `grub<__arch__>.efi` (via HTTPS)
| `grubx64.efi`

| Grub2 UEFI HTTPS SecureBoot
| shim<__arch__>.efi (via HTTPS)
| shimx64.efi
| `shim<__arch__>.efi` (via HTTPS)
| `shimx64.efi`

| iPXE Embedded
| Rendered dynamically as {Project}_url('iPXE')
| Rendered dynamically as `{Project}_url('iPXE')`
| -

| iPXE UEFI HTTP
| ipxe-<__arch__>.efi
| ipxe-x64.efi
| `ipxe-<__arch__>.efi`
| `ipxe-x64.efi`

| iPXE Chain BIOS
| undionly-ipxe.0
| undionly-ipxe.0
| `undionly-ipxe.0`
| `undionly-ipxe.0`

| iPXE Chain UEFI
| ipxe.efi
| ipxe.efi
| `ipxe.efi`
| `ipxe.efi`
|===

== Architecture-Based File Naming
== Architecture-based file naming

{Project} automatically determines the correct boot loader filename for each host based on its architecture.
For example, `x86_64` hosts use `grubx64.efi`, while `aarch64` hosts use `grubaa64.efi`.

.Boot Loader Filenames by Architecture
.Boot loader filenames by architecture

[cols="1,1,1", options="header"]
|===
Expand All @@ -194,23 +195,23 @@ For example, `x86_64` hosts use `grubx64.efi`, while `aarch64` hosts use `grubaa
| Internal Suffix (for reference)

| i386, i686, x86
| grubia32.efi
| ia32
| `grubia32.efi`
| `ia32`

| x86_64, amd64
| grubx64.efi, shimx64.efi
| x64
| `grubx64.efi`, `shimx64.efi`
| `x64`

| aarch64, aa64
| grubaa64.efi, shimaa64.efi
| aa64
| `grubaa64.efi`, `shimaa64.efi`
| `aa64`

| ppc64, ppc64le
| grubppc64.efi
| ppc64, ppc64le
| `grubppc64.efi`
| `ppc64`, `ppc64le`

| Other architectures (for example, riscv64, loongarch64)
| grubriscv64.efi
| `grubriscv64.efi`
| normalized name
|===

Expand All @@ -220,5 +221,4 @@ For example, a host with architecture `aarch64` and PXE Loader set to `Grub2 UEF
/var/lib/tftpboot/grub2/grubaa64.efi
----

This mechanism allows {Project} to select the correct boot loader automatically,
without requiring users to manage architecture-specific filenames manually.
This mechanism allows {Project} to select the correct boot loader automatically, without requiring users to manage architecture-specific filenames manually.
Loading