
bootstrap-qcow2-build-plan-iteration
Iterate bootstrap-qcow2 sysroot/rootfs build plans inside the container using sysroot-runner overrid
作者 embedconsult|オープンソース
Iterate the sysroot/rootfs build plan (in-container)
Treat the build plan JSON as immutable during iteration. Use the overrides file for “what should be back-annotated later”, and use the state file for “where am I in this run”.
Canonical paths (inside the rootfs)
- Plan (immutable):
/var/lib/sysroot-build-plan.json - Overrides (mutable, back-annotate later):
/var/lib/sysroot-build-overrides.json - State/bookmark (mutable, auto-updated):
/var/lib/sysroot-build-state.json - Failure reports (append-only):
/var/lib/sysroot-build-reports/*.json
Source trees:
- Live repo (mutable, preferred for iteration):
/work/bootstrap-qcow2 - Staged snapshot (static, produced by sysroot-builder):
/workspace/bootstrap-qcow2-master
Minimal iteration loop
- Confirm you are inside the expected rootfs:
test -f /var/lib/sysroot-build-state.json && cat /var/lib/sysroot-build-state.jsontest -f /var/lib/sysroot-build-plan.jsontest -d /workspace && ls /workspace | head
- If you are iterating on the tooling itself, build it from the live repo:
cd /work/bootstrap-qcow2- If Crystal cache permissions fail:
CRYSTAL_CACHE_DIR=/tmp/crystal_cache shards build - Refresh entrypoints:
./bin/bq2 --install
- Run the plan:
./bin/bq2 sysroot-runner- The runner auto-resumes by skipping steps listed as completed in
/var/lib/sysroot-build-state.jsonand invalidates that state automatically when the overrides file changes.
- On failure:
- Read the newest report in
/var/lib/sysroot-build-reports/. - Encode the next hypothesis in
/var/lib/sysroot-build-overrides.json. - Re-run
./bin/bq2 sysroot-runner(avoid changing the plan JSON). - For CMake/bootstrap reuse issues, you can set per-step
build_dirandclean_buildoverrides to force out-of-tree builds and amake clean.
- Read the newest report in
Codex session continuity
When launching Codex via bq2 codex-namespace, the wrapper stores the most recent Codex session id in /work/.codex-session-id and will auto-resume it on the next bq2 codex-namespace run.
Back-annotate after a successful round
When a full phase (or full end-to-end run) succeeds with the overrides in place:
- Translate the effective overrides into
src/sysroot_builder.cr(usuallyphase_specs, per-package flags, patches, env, destdir/prefix defaults). - Add/adjust specs to lock in the new behavior.
- Delete
/var/lib/sysroot-build-overrides.jsonand/var/lib/sysroot-build-state.json. - Re-run from scratch (rebuild the rootfs workspace if needed) to validate the plan is now reproducible without overrides.
Use CLI flags only for narrow debugging
sysroot-runner supports flags like --phase and --package, but prefer the continuous loop above: run the default plan, let state handle resume, and keep your mutable intent in the overrides file.