Flows¶
The three end-to-end paths bty supports. Pick by what infrastructure you have:
Direct flash - one-off provisioning, no server, USB live stick.
Interactive PXE flash - server is up, operator picks an image from the TUI on first PXE contact (default for unknown MACs).
Server-driven PXE flash - fleet provisioning, machines reflash themselves on schedule / on demand / on failure.
Direct flash (CLI / TUI)¶
Used for ad-hoc provisioning of a single box, with no infrastructure on the network.
Operator boots the target machine from the bty USB live image (built by
bty-media).The live environment auto-logins as root on
tty1. The operator runsbty-tuifor an interactive flow, or invokesbtydirectly from the shell.Operator selects an image (sourced from the USB stick itself), a target disk (block device on the booted machine), and a provisioning mode.
bty flashwrites the image, applies the provisioning mode, and reports success.Operator removes the USB stick and reboots; the target boots into the freshly-flashed image.
The whole flow runs offline. No network, no server, no MAC registration.
Interactive PXE flash (boot_policy=tui)¶
The “bty-on-a-USB but over the network” path. Default behaviour for any MAC the server has never seen, so onboarding a new box needs zero per-MAC configuration.
Operator stands up the bty server image (
ddto disk, boot). Default credentials arebty / bty(web UI) andodus / odus(SSH); rotate withpasswdand activate the dnsmasq proxy-DHCP block from the Settings page.A target machine PXE-boots on the same segment for the first time.
bty-webauto-discovers the MAC, creates aMachinerecord withboot_policy=tui, and serves the iPXE-tui template (ipxe_tui.j2).The target chains into the bty live env with
bty.mode=interactive bty.server=URL bty.mac=MACon the kernel cmdline.bty-flash-on-boot.servicesees the interactive flag and short-circuits;bty-tui-on-tty1.servicetakes over tty1 in place of the agetty and launchesbty-tui --server URL --mac MAC.The TUI fetches the catalog from
GET /images, the operator picks an image and a target disk, and confirms the flash. Image bytes stream fromGET /images/{name}straight throughzstd -d | ddto the target disk - no temp file, no intermediate download.On success the TUI
POSTs/pxe/{mac}/donesolast_flashed_atupdates server-side. The next reboot chains the TUI again unless the operator flipsboot_policy(typically tolocalonce the target is happy with what it’s running).
This flow is also useful for the operator who just wants a one-off remote flash without standing up a USB stick: any unknown MAC on the segment becomes a TUI session reachable via IPMI / serial console.
Server-driven PXE flash (boot_policy=flash)¶
Used for fleet-managed provisioning, where targets are reflashed on schedule, on demand, or on failure.
Server appliance is already up (same setup as the interactive flow above).
Operator assigns
MAC -> image + provisioning mode + boot policyin the web UI.boot_policy=flasharms the auto-flash;boot_policy=locallets the target PXE-boot through to its own disk untouched.Target machine PXE-boots; iPXE chains into the bty live environment served over HTTP by
bty-web.The live env’s
bty-flash-on-boot.servicefetches the assigned image fromGET /images/{name}, runsbty flash, applies the provisioning mode, andPOSTs/pxe/{mac}/doneto updatelast_flashed_at. Then it reboots automatically.The next reboot still chains the live env unless the operator flips the machine to
boot_policy=local. Per-job CI cadences that want every boot to reflash leave the policy onflash.If the assigned provisioning mode is
cijoe-online,bty-webtriggers the CIJOE workflow against the booted target and records the post-workflow state as the machine’s known-good baseline.
Both BIOS and UEFI clients are supported via iPXE.