Repository navigation
doc: document native guest builds and their download cache - #463
Merged
Merged
Conversation
Explain build-guest --native in the build guide: which guests it supports, why it never builds the Ubuntu EROFS distro layer, and how it reuses pinned archives staged in the download cache. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot started reviewing on behalf of
Pedro Henrique Penna (ppenna)
October 10, 2026 03:06
View session
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The documentation accurately reflects the implemented native build and cache behavior.
0 open findings
What changed in this PR
Documents native Linux guest builds and offline cache reuse.
Changes:
- Explains supported native guest targets and Ubuntu EROFS handling.
- Documents verified archive caching and Alpine network requirements.
| File | Description |
|---|---|
doc/build.md |
Adds native build and download-cache guidance. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Pedro Henrique Penna (ppenna)
deleted the
doc-sync/native-guest-builds
branch
October 10, 2026 03:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The build guide never explained
build-guest --native. That workflow builds guest artifacts on Linux without Docker, and it is how agents and offline hosts rebuild guests from staged archives. This PR adds a short section todoc/build.mdthat covers which guests the native build supports, why it never produces the Ubuntu EROFS distro layer, and how it reuses pinned archives staged in the download cache.Changes
All changes are in
doc/build.md, right after the Docker--guest allexample:--nativebuilds the kernel and the selected Alpine or Ubuntu initramfs on Linux without Docker.build_guestinscripts/nvx_tools/build.py(native branch callsbuild_kernel/build_initramfs, both_require_linux);python scripts/nvx.py build-guest --help--guest azurelinuxand--guest all.native_build_supported=Falsefor Azure Linux inscripts/nvx_tools/guests.py;selected_guests()returns every guest forall;python scripts/nvx.py build-guest --native --guest alland--guest azurelinuxboth exit 1 witherror: Azure Linux initramfs builds require Docker--guest allbuilds the Ubuntu EROFS distro layer, so build it after a native build withbuild-distro-layer.guest == "all"; Docker single-guest targets inbuild_docker_artifactsexpect no EROFS outputdownloads/in.cache/or$NVX_CACHE_DIR. A file there that matches its pinned SHA-256 is reused; any other file is downloaded again.prepare_kernel_sourceinbuild.py,ubuntu.py(Ubuntu Base andubuntu-packages/),cache_rootanddownload_verifiedincommon.py,BuildConstants.CACHE_ENVIRONMENT_VARIABLE_prepare_alpine_rootdownloads the minirootfs into the build work directory, and_apk_addruns the minirootfs'sapk addThe design docs are unchanged, so no OpenVMM SHA applies. The pin is
e5bf79776bb32f8fa29a69e7b3c9bf668477a13a.Follow-ups (out of scope)
build_guestcallsbuild_distro_layerwhenguest == "all", but the Azure Linux check rejectsallbefore that line runs. Either the branch is unreachable, or a nativeallshould build the Alpine and Ubuntu artifacts plus the distro layer. Code was not changed.doc/project-structure.mdlabelsdoc/guests/"(Ubuntu)", but it also holdsazurelinux-guest.md.unittest_results.txtis a tracked test log from the initial commit and appears to be stray. Consider removing it.scripts/setup/README.mdis documentation outsidedoc/. Relocating it means editing links indoc/setup.mdanddoc/ci.md, which open PRs filesystem: map host paths from any volume, each with its own access #459, Adopt bind-once microVM image slots #406, and test-microvm: pause and resume a microVM through OpenVMM state control #405 touch, so it was deferred.doc/openvmm-upstream-roadmap.mdis a dated planning snapshot. Its fork tip2728f33eapredates many pin updates since 2026-10-02, and a refresh exceeds one run's budget.Files touched by open PRs (#459, #417, #406, #405) were left alone.
Validation
python -m unittest scripts.test_nvx_tools.CliTests scripts.test_performance.PerformanceTests: Ran 110 tests, OK (skipped=1)doc/build.mdand the 7 files that link to it resolves; the file has one H1 and balanced fences;doc/design.mdlinks every chapter indoc/design/. A negative probe with a bad anchor was caught.git diff --check: cleanpython scripts/nvx.py verify: source tree and submodule metadata are consistentorigin/devatdcde299f70ad237a8bc04df62afc88d2172c091a. The change is documentation-only (doc/build.md).