Skip to main content

Flash images onto target disks, locally or over PXE

Project description

bty mascot - a blue bat holding a PXE handshake card and a disk labelled .qcow2 / .img / .raw

bty - flash images onto target disks, locally or over PXE

CI Docs Documentation PyPI Python License: GPL v3

Bare-metal provisioning toolkit. Flashes pre-built ("cooked") system images onto target disks (locally from a USB stick or remotely over PXE) and configures them via cloud-init or CIJOE workflows. Designed for both ad-hoc one-off provisioning and DevOps fleet operation.

bty is one Python package: the bty module, distributed on PyPI as bty-lab, with four console-script entry points:

  • bty: main CLI (image inspection, target discovery, flashing, provisioning).
  • bty-tui: terminal UI (requires the tui extra).
  • bty-web: HTTP server with browser UI (requires the web extra).
  • bty-ctl: command-line client for a remote bty-web server (bty-ctl login, bty-ctl logout, future fleet ops).

Plus a sibling appliance-image builder under bty-media/ that produces the bootable USB live image and the server appliance image.

Install

pipx install bty-lab            # CLI + bty-ctl, 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 and appliance images publish to PyPI + GitHub Releases 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

  • PLAN.md: roadmap and design intent.
  • docs/: full documentation (Sphinx + MyST).

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

GPL-3.0-only.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bty_lab-0.2.10.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bty_lab-0.2.10-py3-none-any.whl (633.6 kB view details)

Uploaded Python 3

File details

Details for the file bty_lab-0.2.10.tar.gz.

File metadata

  • Download URL: bty_lab-0.2.10.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bty_lab-0.2.10.tar.gz
Algorithm Hash digest
SHA256 8e1a317b9576756fed0f5645c67f2dc273a16fd5b655ff6815791f20a186bd15
MD5 289538ee4ce88b7faa476a32303831ce
BLAKE2b-256 5c55487fccf99b175e16a5c65980c2254f6c3f5f49735c251cb237c636701bf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for bty_lab-0.2.10.tar.gz:

Publisher: release.yml on safl/bty

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bty_lab-0.2.10-py3-none-any.whl.

File metadata

  • Download URL: bty_lab-0.2.10-py3-none-any.whl
  • Upload date:
  • Size: 633.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bty_lab-0.2.10-py3-none-any.whl
Algorithm Hash digest
SHA256 42c5c58bb176fad35d001c1db16afb524776348b7edb4a1f74ee7c980f0c723b
MD5 6391f338f48cb1812e0c561a3b4a6fc3
BLAKE2b-256 4e5eb4190e438661fd7a5f1699055a6c03eb3d59db80ba742e0a4a9425828759

See more details on using hashes here.

Provenance

The following attestation bundles were made for bty_lab-0.2.10-py3-none-any.whl:

Publisher: release.yml on safl/bty

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page