Skip to content

Reserve a bootstrap data slot in the ISO: - #76

Merged
jacobweinstock merged 2 commits into
tinkerbell:mainfrom
jacobweinstock:bootstrap-slot
Oct 12, 2026
Merged

jacobweinstock merged 2 commits into
tinkerbell:mainfrom
jacobweinstock:bootstrap-slot

Conversation

@jacobweinstock

Copy link
Copy Markdown
Member

Description

Per-host data such as network configuration has to reach CaptainOS before its networking starts, and rebuilding an ISO per host or per change does not scale, nor fit the Tinkerbell model. Tinkerbell already personalizes the shared ISO while serving it, but only for kernel arguments, which are too small and awkward for structured or binary data.

As the slot's exact location for each released ISO can differ between releases, architectures and flavors, a *.iso.layout.json is produced per ISO per flavor. This decouples Tinkerbell and CaptainOS releases and changing slot locations.

Fixes: #

How Has This Been Tested?

How are existing users impacted? What migration steps/scripts do we need?

Checklist:

I have:

  • updated the documentation and/or roadmap (if required)
  • added unit or e2e tests
  • provided instructions on how to upgrade

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Cache and collection paths can pair an ISO with missing, stale, or truncated layout metadata.

2 open findings
What changed in this PR

Adds a fixed bootstrap-data slot to CaptainOS ISOs for per-host Tinkerbell customization.

Changes:

  • Adds and locates a 4 MiB CPIO bootstrap slot.
  • Generates matching ISO layout metadata.
  • Collects and publishes the ISO sidecar artifact.
File Description
captain/​iso.py Builds the slot and layout metadata.
captain/​flavor.py Registers the layout artifact.
captain/​cli/​stages.py Includes the layout in cache checks.
captain/​artifacts.py Collects the layout alongside the ISO.
.github/​workflows/​ci.yml Uploads the layout in CI.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread captain/artifacts.py Resolved
Comment thread captain/cli/stages.py Resolved
@jacobweinstock jacobweinstock removed the ready-to-merge Signal Mergify to merge the PR label Oct 12, 2026
Per-host data such as network configuration has to reach CaptainOS
before its networking starts, and rebuilding an ISO per host or per
change does not scale, nor fit the Tinkerbell model. Tinkerbell
already personalizes the shared ISO while serving it, but only for
kernel arguments, which are too small and awkward for structured or
binary data.

As the slot's exact location for each released ISO can differ between
releases, architectures and flavors, a *.iso.layout.json is produced
per ISO per flavor. This decouples Tinkerbell and CaptainOS releases
and changing slot locations.

Signed-off-by: Jacob Weinstock <jakobweinstock@gmail.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Low-level boot-image mutation and its external Tinkerbell contract require final human validation.

0 open findings

2 resolved since last review

🧠 Review effort: Balanced

@jacobweinstock jacobweinstock added the ready-to-merge Signal Mergify to merge the PR label Oct 12, 2026
@jacobweinstock

Copy link
Copy Markdown
Member Author

@Mergifyio queue

@mergify

mergify Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

🛑 Queue command has been cancelled

The GitHub Action names didnt match.
Also, dont run speculative checks because
this causes a draft PR to be created and
the full CI build to run.

Signed-off-by: Jacob Weinstock <jakobweinstock@gmail.com>
@mergify

mergify Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

queue

🛑 The queue request has been cancelled: new commits were pushed

Details

@jacobweinstock pushed to this pull request after queue was requested. Review the new commits and request it again.

@mergify

mergify Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Merge Protections

🟢 Merge protection satisfied — ready to merge.

Show 1 satisfied protection

🟢 📃 Configuration Change Requirements

Mergify configuration change

  • any of:
    • check-success = @mergify/Configuration changed
    • check-success = @mergify/Configuration has been deleted

@jacobweinstock

Copy link
Copy Markdown
Member Author

@Mergifyio queue

@mergify

mergify Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • 🟠 Waiting for queue conditions
  • ⏳ Enter queue
  • ⏳ Run checks
  • ⏳ Merge
Waiting for
  • -closed [📌 queue requirement]
All conditions
  • -closed [📌 queue requirement]
  • -conflict [📌 queue requirement]
  • -draft [📌 queue requirement]
  • any of [📌 queue -> configuration change requirements]:
    • -mergify-configuration-changed
    • check-success = @mergify/Configuration changed
    • check-success = @mergify/Configuration has been deleted
  • any of [📌 queue requirement]:
    • check-success = @mergify/Mergify Merge Protections
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
  • any of [🔀 queue conditions]:
    • all of [📌 queue conditions of queue rule default]:
      • #changes-requested-reviews-by=0
      • base=main
      • check-success=DCO
      • check-success=build-captainos (with kernel) trixie-slim (amd64)
      • check-success=build-captainos (with kernel) trixie-slim (arm64)
      • check-success=build-captainos trixie-armbian-rpi (arm64)
      • check-success=build-captainos trixie-full (amd64)
      • check-success=build-captainos trixie-full (arm64)
      • check-success=build-captainos trixie-genio (arm64)
      • check-success=build-captainos trixie-meson64 (arm64)
      • check-success=build-captainos trixie-rockchip64 (arm64)
      • check-success=build-captainos trixie-rockchip64-vendor (arm64)
      • check-success=build-captainos-kernel (amd64)
      • check-success=build-captainos-kernel (arm64)
      • check-success=build-dockerfile (amd64)
      • check-success=build-dockerfile (arm64)
      • check-success=download-tools (amd64)
      • check-success=download-tools (arm64)
      • check-success=prepare
      • github-review-approved [🛡 GitHub repository ruleset rule main]
      • label!=do-not-merge
      • label=ready-to-merge
      • any of:
        • author=jacobweinstock
        • #approved-reviews-by>=1
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/download-tools (amd64)
        • check-neutral = @github-actions/download-tools (amd64)
        • check-skipped = @github-actions/download-tools (amd64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/download-tools (arm64)
        • check-neutral = @github-actions/download-tools (arm64)
        • check-skipped = @github-actions/download-tools (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos (with kernel) trixie-slim (amd64)
        • check-neutral = @github-actions/build-captainos (with kernel) trixie-slim (amd64)
        • check-skipped = @github-actions/build-captainos (with kernel) trixie-slim (amd64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos (with kernel) trixie-slim (arm64)
        • check-neutral = @github-actions/build-captainos (with kernel) trixie-slim (arm64)
        • check-skipped = @github-actions/build-captainos (with kernel) trixie-slim (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-armbian-rpi (arm64)
        • check-neutral = @github-actions/build-captainos trixie-armbian-rpi (arm64)
        • check-skipped = @github-actions/build-captainos trixie-armbian-rpi (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-full (amd64)
        • check-neutral = @github-actions/build-captainos trixie-full (amd64)
        • check-skipped = @github-actions/build-captainos trixie-full (amd64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-full (arm64)
        • check-neutral = @github-actions/build-captainos trixie-full (arm64)
        • check-skipped = @github-actions/build-captainos trixie-full (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-genio (arm64)
        • check-neutral = @github-actions/build-captainos trixie-genio (arm64)
        • check-skipped = @github-actions/build-captainos trixie-genio (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-meson64 (arm64)
        • check-neutral = @github-actions/build-captainos trixie-meson64 (arm64)
        • check-skipped = @github-actions/build-captainos trixie-meson64 (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-rockchip64 (arm64)
        • check-neutral = @github-actions/build-captainos trixie-rockchip64 (arm64)
        • check-skipped = @github-actions/build-captainos trixie-rockchip64 (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos trixie-rockchip64-vendor (arm64)
        • check-neutral = @github-actions/build-captainos trixie-rockchip64-vendor (arm64)
        • check-skipped = @github-actions/build-captainos trixie-rockchip64-vendor (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos-kernel (amd64)
        • check-neutral = @github-actions/build-captainos-kernel (amd64)
        • check-skipped = @github-actions/build-captainos-kernel (amd64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/prepare
        • check-neutral = @github-actions/prepare
        • check-skipped = @github-actions/prepare
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-dockerfile (amd64)
        • check-neutral = @github-actions/build-dockerfile (amd64)
        • check-skipped = @github-actions/build-dockerfile (amd64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-dockerfile (arm64)
        • check-neutral = @github-actions/build-dockerfile (arm64)
        • check-skipped = @github-actions/build-dockerfile (arm64)
      • any of [🛡 GitHub repository ruleset rule main]:
        • check-success = @github-actions/build-captainos-kernel (arm64)
        • check-neutral = @github-actions/build-captainos-kernel (arm64)
        • check-skipped = @github-actions/build-captainos-kernel (arm64)

@jacobweinstock
jacobweinstock merged commit 9ccacb2 into tinkerbell:main Oct 12, 2026
22 checks passed
@jacobweinstock
jacobweinstock deleted the bootstrap-slot branch October 12, 2026 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Signal Mergify to merge the PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants