PXE Boot Menu Generator
{{ result.primary }}
{{ result.summaryLine }}
{{ badge.label }}
PXE boot menu inputs
Use the environment or build lane name operators expect to see at boot.
Pick the menu file you are most likely to copy first.
Use the ID column from the boot entry rows, such as ubuntu-autoinstall.
Set 0 to wait indefinitely on bootloaders that support an infinite menu wait.
seconds
One entry per line. Quote the arguments cell when it contains commas.
Samples replace the current rows and stay in the browser.
Use the HTTP directory that serves kernels, initrds, and chained scripts to iPXE clients.
The selected module must exist beside pxelinux.0 or in the expected TFTP path.
Use Append style unless your environment has standardized on INITRD directives.
Choose the command pair your UEFI GRUB build supports.
Emits PROMPT 0 when enabled; disable only when operators need the raw boot prompt.
Adds a small retry loop before rendering the iPXE menu.
Adds a last-resort Local disk entry where the bootloader has a suitable command.
Adds a Reboot option using reboot.c32, iPXE reboot, or GRUB reboot.
{{ result.outputs.pxelinux || '# Fix validation errors to generate pxelinux.cfg/default.' }}
{{ result.outputs.ipxe || '# Fix validation errors to generate boot.ipxe.' }}
{{ result.outputs.grub || '# Fix validation errors to generate grub.cfg.' }}
ID Title Type Kernel or target Initrd Arguments Source Copy
No boot entries parsed yet.
{{ row.id }} {{ row.title }} {{ row.type }} {{ row.kernel || '-' }} {{ row.initrd || '-' }} {{ row.args || '-' }} {{ row.source }}
Severity Check Detail Recommendation Copy
No review findings yet.
{{ row.severity }} {{ row.check }} {{ row.detail }} {{ row.recommendation }}
{{ jsonPayload }}
Customize
Advanced
:

Introduction

Preboot Execution Environment menus give bare-metal machines and virtual machines a choice before an operating system is already running. A client can be pointed toward an installer, rescue image, memory diagnostic, local disk fallback, or another boot script, with the bootloader deciding how the selected target is loaded.

The hard part is keeping the same boot plan readable across firmware and bootloader differences. Legacy BIOS fleets often use PXELINUX-style configuration, iPXE scripts are common when HTTP-hosted assets and script logic are needed, and UEFI environments may expect a GRUB menu. Each format has its own command names, timeout units, and kernel/initrd syntax.

A boot menu is also operationally sensitive. A wrong default can reinstall the wrong machine, a missing initrd can drop an installer into a failure shell, and a relative path can work for one bootloader while failing for another. The menu text should be treated as a draft until it has been tested on the real DHCP, TFTP, HTTP, firmware, and bootloader path it will use.

PXE menu generation is most useful when the boot choices already exist and the main task is consistency. It can organize IDs, labels, kernels, initrds, arguments, chain targets, and fallbacks into comparable menu outputs, but it cannot prove that a boot server is reachable or that a target image supports the arguments being passed to it.

Technical Details:

PXE boot menus sit between firmware handoff and operating-system startup. The bootloader reads a menu definition, shows entries when a menu interface is available, and then runs the selected entry as a sequence of loader commands. Linux entries normally pair a kernel path with an optional initial RAM disk and a kernel command line. Chain entries hand control to another image or script, while local and reboot entries return control to firmware behavior.

The same boot intent must be rendered differently because PXELINUX, iPXE, and GRUB do not share one syntax. PXELINUX uses label blocks with directives such as KERNEL, APPEND, INITRD, LOCALBOOT, and COM32 modules. iPXE uses script labels, menu items, kernel, initrd, chain, boot, exit, and reboot. GRUB uses menuentry blocks with linux or linuxefi, matching initrd commands, optional chainloading, and menu IDs.

Boot rows pass through menu generation and become PXELINUX, iPXE, GRUB, and review outputs.
The same row set can produce several bootloader drafts, while the review output records issues that must be checked before rollout.

Transformation Core:

PXE boot row transformation rules
Input concept Accepted shape Rendered effect Review concern
Entry ID First CSV cell, normalized to a compact label. Becomes the PXELINUX label, iPXE script suffix, GRUB menu ID, and default-entry target. Duplicate IDs block output because labels must be unique.
Linux entry linux, kernel path, optional initrd, and arguments. Emits loader commands for kernel, initrd handling, and kernel command-line arguments. A missing kernel path is an error; an initrd listed twice is a warning.
Chain entry chain plus a target path or URI. Emits chainloading syntax for the supported formats. Chain targets need real firmware and bootloader testing.
Fallback entry local or reboot, entered manually or appended by switches. Adds local disk return or reboot commands where the format supports them. The actual behavior depends on the bootloader build and firmware path.
Shortcut key Single letter or digit in the eighth CSV cell. Adds iPXE menu shortcut hints and keeps the title readable. Other characters are removed after a warning.

Timeouts are a good example of why one input cannot be pasted into every target unchanged. PXELINUX uses tenths of a second, iPXE menu selection uses milliseconds, and GRUB uses seconds. A timeout entered as 8 seconds therefore becomes TIMEOUT 80, an iPXE choose timeout of 8000, and a GRUB set timeout=8.

Bootloader-specific PXE menu output behavior
Format Default handling Timeout unit Path behavior to verify
PXELINUX BIOS menu ONTIMEOUT references the selected label, and the default menu entry receives MENU DEFAULT. Tenths of a second. Kernel and initrd paths are interpreted from the PXELINUX working directory unless configured otherwise.
iPXE script choose stores a selected item, then jumps to the matching boot label. Milliseconds. Relative paths are joined to the asset base URL when one is entered; absolute values stay as written.
GRUB UEFI menu set default uses a zero-based menu index derived from the chosen entry. Seconds. Kernel commands can use linux/initrd or linuxefi/initrdefi, depending on the GRUB build.

Validation is syntactic and planning-focused. It checks row shape, supported entry types, duplicate IDs, missing required targets, default-entry presence, simple shortcut keys, whitespace in paths, chain-entry review needs, and the iPXE asset base URL. It does not verify DHCP options, TFTP roots, HTTP content, module availability, installer arguments, Secure Boot policy, or whether the selected machine will actually start the target image.

Everyday Use & Decision Guide:

Start with the Menu title, Selected menu format, Default entry ID, and Menu timeout. For a first pass, keep the default entry on the safest installer or fallback, then set the selected format to the menu you plan to copy first. All supported formats remain available in the result tabs.

Use Boot entry rows as the source of truth. Each line uses the shape id,title,type,kernel-or-target,initrd,arguments,category,shortcut. Quote the arguments cell when it contains a comma, and keep IDs meaningful enough for an operator to recognize in the ledger and generated menu labels.

  • Use Ubuntu sample for a Linux-installer starting point with kernel, initrd, and installer arguments already present.
  • Use Mixed sample when you need to see Linux, chain, and firmware fallback patterns together.
  • Use Normalize rows after editing or pasting rows to rebuild parsed entries in the canonical eight-cell shape.
  • Set iPXE asset base URL when iPXE should resolve relative kernel, initrd, or chain paths from a known HTTP directory.
  • Leave PXELINUX initrd style on append style unless the target environment expects a separate INITRD directive.
  • Add local disk and reboot fallbacks only when those actions are acceptable during unattended or remote boot work.

Warnings deserve attention even when output is still generated. A chain entry may be valid text but still fail on the actual firmware. A path with spaces may be hard to boot reliably. A row with both an initrd cell and an existing initrd= argument may boot a different image than the person reviewing the table expects.

Generation happens in the browser session after the page loads. The page does not contact boot servers, fetch kernels, or test DHCP. Avoid putting secrets in kernel arguments, because those values can appear in the generated menus, JSON, CSV or DOCX outputs, copied text, page state, or screenshots.

Step-by-Step Guide:

Build the menu from rows first, then use the review tabs to decide whether the output is ready for a lab boot.

  1. Enter Menu title. The title should match the build lane or environment operators expect to see during network boot.
  2. Choose Selected menu format. The summary copy action follows this choice, while PXELINUX Menu, iPXE Script, and GRUB UEFI Menu remain available as separate tabs.
  3. Set Default entry ID. If the summary reports a default-entry error, open Boot Entry Ledger and copy an ID that actually appears there.
  4. Set Menu timeout in seconds. Check the generated format if the target expects a specific unit, because PXELINUX, iPXE, and GRUB render the value differently.
  5. Paste or edit Boot entry rows. Use linux, chain, local, or reboot in the type column, and quote argument cells that contain commas.
  6. Open Advanced when you need the iPXE asset base URL, a different PXELINUX menu module, separate initrd directives, GRUB EFI command names, DHCP retry, local boot fallback, or reboot fallback.
  7. Read PXE Validation Review. Clear every Error before copying menus, then decide whether each Warning is a real environment choice or a mistake.
  8. Use Boot Entry Ledger to compare parsed IDs, titles, types, targets, initrds, arguments, and generated fallback rows before moving the chosen menu text into a boot-server workflow.

Interpreting Results:

Fix menu inputs means at least one blocking issue is active, and the PXELINUX, iPXE, and GRUB text areas stay empty until the problem is corrected. A ready summary means the rows can be rendered as menu text; it does not mean the machine will boot from that text.

PXE boot menu generator result cues
Output cue Meaning Follow-up
Error A row, default ID, type, kernel, or chain target failed a required check. Fix the named row or field before copying any menu text.
Warning The menu can be generated, but a path, initrd, shortcut, chain target, or asset-base assumption needs review. Confirm the warning against the actual bootloader path and target firmware.
review clean No warnings were recorded for the current rows and options. Still perform a lab boot, because server reachability and image behavior are outside the review.
default <id> The default entry matches a parsed boot row and is used in the generated menus. Make sure the selected default is safe if no operator touches the menu.

Use Boot Entry Ledger when the generated menu does not match the plan. The ledger shows parsed entries after normalization and generated fallbacks have been applied. If the ledger is wrong, fix the source rows instead of editing one generated format by hand and leaving the others out of sync.

Worked Examples:

Ubuntu autoinstall with a safe default

A row such as ubuntu-autoinstall,Ubuntu Server 24.04 autoinstall,linux,ubuntu/24.04/vmlinuz,ubuntu/24.04/initrd,ip=dhcp autoinstall ds=nocloud-net;s=http://boot.example.internal/autoinstall/ubuntu-24.04/,Installers,u creates a Linux entry with a kernel path, initrd path, and installer arguments. If Default entry ID is ubuntu-autoinstall, PXE Validation Review should include a pass row for the default entry, and the summary should name that ID as the default.

Mixed firmware menu with a chain target

A mixed row set can include a Rocky Linux kickstart entry, a chain entry such as ipxe-tools,Chain to tools.ipxe,chain,http://boot.example.internal/scripts/tools.ipxe,,,Utilities,t, and a local firmware fallback. The generated iPXE Script can chain to the tools script, while PXE Validation Review warns that chain targets require bootloader-specific support and should be tested on the exact firmware path.

Default ID typo before rollout

If the rows contain debian-rescue but Default entry ID is set to debian-rescue-shell, the review reports that the default ID does not match a parsed entry. The code outputs remain empty, and Boot Entry Ledger gives the corrected ID to use before the menu can be copied.

Initrd argument conflict

A Linux row with an initrd cell and an argument string that already contains initrd=custom.img still generates menu text, but the review warns about the duplicate initrd source. Check Boot Entry Ledger and the generated target format, then keep either the explicit argument or the initrd cell so the booted kernel receives the image you intended.

FAQ:

Which output should I copy first?

Use Selected menu format for the bootloader class you are preparing first. Copy PXELINUX Menu for BIOS PXELINUX clients, iPXE Script for iPXE script booting, or GRUB UEFI Menu for a GRUB-based UEFI path.

Why did generated menu text disappear?

A blocking validation error suppresses menu output. Open PXE Validation Review, fix the named row or field, and confirm the summary no longer says Fix menu inputs.

How should I write rows with commas in kernel arguments?

Keep the eight-column CSV shape and quote the arguments cell when it contains commas. After pasting, use Normalize rows and check Boot Entry Ledger to confirm the arguments stayed in one cell.

Does the page test my boot server?

No. It builds menu text and review rows from the current entries. It does not fetch kernels, test HTTP or TFTP paths, inspect DHCP options, or confirm firmware support.

What does timeout zero mean?

The entered timeout is rendered according to each format. For iPXE, a zero choose timeout waits indefinitely. For PXELINUX and GRUB behavior, confirm the exact target behavior because their zero-timeout handling differs from ordinary positive-second waits.

Glossary:

PXE
Preboot Execution Environment, a firmware boot path that lets a machine start from network-provided boot files.
PXELINUX
A Syslinux-family bootloader commonly used for legacy BIOS network boot menus.
iPXE
A scriptable network boot environment that can load kernels, initrds, and scripts from URIs.
GRUB UEFI
A GRUB menu path used by many UEFI boot environments.
Initrd
An initial RAM disk loaded with a Linux kernel to provide early boot files and installer logic.
Chain entry
A menu entry that hands control to another boot image or script instead of loading a kernel directly.

References: