Flash images onto target disks, locally or over PXE
Project description
bty - flash images onto target disks, from local or network sources
Image-flash provisioning toolkit for bare-metal and virtual targets. Writes pre-built ("cooked") system images onto target disks. Three delivery shapes from the same runtime: a self-contained USB live stick, a USB stick pulling from a network-shared image catalog, or a PXE-boot server that flashes targets unattended. Configures the deployed system on first boot via cloud-init or CIJOE workflows.
bty is one Python package: the bty module, distributed on PyPI as
bty-lab, with three
console-script entry points:
bty: main CLI (image inspection, target discovery, flashing, provisioning).bty-tui: terminal UI (requires thetuiextra). With--server URLit doubles as a remote-flash client against a runningbty-web.bty-web: HTTP server with browser UI (requires thewebextra).
Plus a sibling appliance-image builder under bty-media/ that
produces four variants from a shared rootfs overlay: the bootable
USB live image (usb-x86), the x86 server appliance (server-x86),
the Raspberry Pi 4 / 5 server appliance (server-rpi), and the
PXE-chain network-flash live env (netboot-x86).
For a low-friction trial of the bty-web UI without flashing
anything, a multi-arch container is published to
ghcr.io/safl/bty-web
on every release:
docker run -d --name bty-web -p 8080:8080 -v bty-data:/var/lib/bty \
ghcr.io/safl/bty-web:latest
# -> http://localhost:8080/ui (login: bty / bty)
Image catalog only - no DHCP / TFTP / PXE proxy in the container
(those need bare-metal LAN access; use the appliance for that).
See docs/src/walkthrough-server-docker.md
for bind-mount permissions, env vars, and password rotation.
Install
pipx install bty-lab # CLI, zero third-party Python deps
pipx install "bty-lab[tui]" # adds the bty-tui terminal UI
pipx install "bty-lab[web]" # adds the bty-web HTTP server
pipx install "bty-lab[all]" # everything
The CLI flow (bty list disks, bty inspect image, bty flash --dry-run)
needs only Python 3.11+ and stdlib; full flashing (bty flash --yes)
relies on system binaries (dd, qemu-img, zstd, lsblk, etc.) the
operator's distribution is expected to provide.
Status
Pre-1.0 but actively shipping. Wheels (PyPI), appliance images
(GitHub Releases), and
the bty-web container (ghcr.io/safl/bty-web)
all publish on every tag, and the server + client + PXE-chain
end-to-end flow runs in CI on every push. The CLI surface (bty list, bty inspect, bty flash) and the bty-web HTTP/iPXE/PAM-
auth surfaces are stable enough to use in homelab / CI fleets.
Wire formats and CLI flags may still shift between minor versions
until 1.0; the schema_version field on --json output and the
Machine wire type are the things to watch. See PLAN.md
for the milestone-by-milestone roadmap.
Planning and design
Development
uv is the project's dependency manager. Install it via pipx if you
don't already have it:
pipx install uv
Then sync the dev environment:
uv sync --all-extras --group dev
Run the test suite, linter, and type-checker:
uv run pytest
uv run ruff check
uv run mypy src
Documentation
The docs tooling installs as a separate pipx app:
pipx install ./docs/tooling
Then, from inside docs/:
bty-docs-serve # live-rebuild dev server on :8000
bty-docs-build-html # one-shot HTML build
bty-docs-build-pdf # one-shot PDF build (requires LaTeX)
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bty_lab-0.7.9.tar.gz.
File metadata
- Download URL: bty_lab-0.7.9.tar.gz
- Upload date:
- Size: 3.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f961adc281f0f01da8a3991fc29fa92d145019e833565a07b9b02b650d2cbdcd
|
|
| MD5 |
cfdd80dfa80bfabd06bc0982939f2ab1
|
|
| BLAKE2b-256 |
fec71df698a093846fcea1d6d3159f765e8d3cd7549545227fbe529f8eedbc5c
|
Provenance
The following attestation bundles were made for bty_lab-0.7.9.tar.gz:
Publisher:
release.yml on safl/bty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bty_lab-0.7.9.tar.gz -
Subject digest:
f961adc281f0f01da8a3991fc29fa92d145019e833565a07b9b02b650d2cbdcd - Sigstore transparency entry: 1485539167
- Sigstore integration time:
-
Permalink:
safl/bty@4981ce8be84dae110812393ca9bca6b56a66cf29 -
Branch / Tag:
refs/tags/v0.7.9 - Owner: https://github.com/safl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4981ce8be84dae110812393ca9bca6b56a66cf29 -
Trigger Event:
push
-
Statement type:
File details
Details for the file bty_lab-0.7.9-py3-none-any.whl.
File metadata
- Download URL: bty_lab-0.7.9-py3-none-any.whl
- Upload date:
- Size: 686.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73e7665e19c7ef49b5503a5efc837170498f6f7540b87feb4d4bc81c1aaf2dc3
|
|
| MD5 |
6fb25e9e8085335cec949332f1aa253e
|
|
| BLAKE2b-256 |
fa8ed8c20f87cd454405891f87d77edc00c00250d4e96d978b6b50b9403cd68a
|
Provenance
The following attestation bundles were made for bty_lab-0.7.9-py3-none-any.whl:
Publisher:
release.yml on safl/bty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bty_lab-0.7.9-py3-none-any.whl -
Subject digest:
73e7665e19c7ef49b5503a5efc837170498f6f7540b87feb4d4bc81c1aaf2dc3 - Sigstore transparency entry: 1485539174
- Sigstore integration time:
-
Permalink:
safl/bty@4981ce8be84dae110812393ca9bca6b56a66cf29 -
Branch / Tag:
refs/tags/v0.7.9 - Owner: https://github.com/safl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4981ce8be84dae110812393ca9bca6b56a66cf29 -
Trigger Event:
push
-
Statement type: