195 lines
7.0 KiB
Markdown
195 lines
7.0 KiB
Markdown
# M0 validation report
|
|
|
|
Development reference and historical context. For current operating instructions, use the [user manual](../README.md). Acceptance applies only to the source and artifacts identified in each record.
|
|
|
|
|
|
[Documentation index](README.md) · [First build](getting-started.md) · [Roadmap](roadmap.md)
|
|
|
|
This is the initial acceptance record, not a setup tutorial. Later documentation
|
|
improvements do not change the build results or skips recorded here. Linked logs
|
|
and artifacts are generated local files and are not included in a fresh checkout.
|
|
|
|
Validated on 2026-09-20 in `/home/felis/source/fds` on an x86_64 Arch Linux
|
|
Framework host, running Linux 7.2.6-arch2-1.
|
|
|
|
**M0 is complete:** the host bootstrapped an upstream Void build container,
|
|
cross-built an aarch64 glibc XBPS package, and built a static-musl AArch64 Rust
|
|
executable. M1 remains a proposal.
|
|
|
|
All project-owned documentation, source comments, diagnostics, and ongoing
|
|
development context use English. The complete master plan retains its 67
|
|
numbered sections. The pinned upstream submodule has no tracked modifications.
|
|
|
|
## Changes
|
|
|
|
- Added the repository skeleton, milestone instructions, master plan, architecture
|
|
contracts, and build documentation.
|
|
- Pinned `vendor/void-packages` to
|
|
`02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1` using a Git submodule and
|
|
`VOID_PACKAGES_COMMIT`.
|
|
- Added versioned, checksum-verified static XBPS host tools and a bubblewrap
|
|
bootstrap workflow for ordinary Arch users.
|
|
- Added FDS overlay preparation with upstream collision and stale-copy checks.
|
|
- Added the Rust workspace, Rust 1.98.0 pin, static musl linking configuration,
|
|
dependency-free `fds-smoketest`, and release settings from the plan.
|
|
- Added `make bootstrap`, `make smoke-test`, `make check`, package export,
|
|
ELF inspection, failure-path checks, and build input manifests.
|
|
- Reserved future component directories without implementing later milestones.
|
|
|
|
The initial M0 file inventory appears at the end of this report; guides added
|
|
after acceptance are not included in that historical inventory.
|
|
|
|
## Exact build commands
|
|
|
|
These public entry points all completed with exit status 0:
|
|
|
|
```sh
|
|
cd /home/felis/source/fds
|
|
make bootstrap
|
|
make smoke-test
|
|
make check
|
|
```
|
|
|
|
The underlying cross-build commands are:
|
|
|
|
```sh
|
|
cargo build --locked --offline --release \
|
|
--target aarch64-unknown-linux-musl -p fds-smoketest
|
|
|
|
export PATH="$PWD/.host/xbps/usr/bin:$PATH"
|
|
export XBPS_ARCH=x86_64
|
|
cd vendor/void-packages
|
|
./xbps-src -A x86_64 binary-bootstrap
|
|
./xbps-src -a aarch64 pkg hello
|
|
```
|
|
|
|
The first bootstrap created the build environment on this host. The final
|
|
public command runs reused verified downloads and that environment. Large
|
|
archives were prefetched from official servers with SHA-256 verification;
|
|
XBPS also verified package signatures. This was not a test of a pristine clone
|
|
on a second machine.
|
|
|
|
## Smoke-test output
|
|
|
|
Actual excerpts from `out/logs/smoke-test.log`:
|
|
|
|
```text
|
|
Void commit: 02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1
|
|
rustc 1.98.0 (88d9e12ae 2026-08-18)
|
|
cargo 1.98.0 (797e8a9bc 2026-08-05)
|
|
PASS: x86_64 static ELF
|
|
PASS: aarch64 static ELF
|
|
ldd (host diagnostic, exit 1): not a dynamic executable
|
|
PASS: aarch64 package exported to out/packages/
|
|
PASS: aarch64 glibc ELF
|
|
PASS: XBPS package hello-2.12.3_1 architecture=aarch64 (glibc)
|
|
SKIP: ARM execution (optional qemu-aarch64 not installed); ELF verification passed
|
|
PASS: M0 smoke test complete
|
|
```
|
|
|
|
Rust `file` output identifies an `ELF 64-bit LSB executable, ARM aarch64`,
|
|
`statically linked, stripped`. `readelf` confirms no interpreter, shared library
|
|
dependency, or glibc symbol version requirement. The extracted GNU hello ELF
|
|
uses `/lib/ld-linux-aarch64.so.1` and requires `libc.so.6`.
|
|
|
|
`make check` passed its ABI rejection, invalid-input, Void pin, dirty-upstream,
|
|
overlay collision, stale-overlay, configuration protection, and formatting
|
|
checks. An initial package-index architecture error was corrected by explicitly
|
|
setting `XBPS_ARCH=aarch64` when indexing the exported package; the full
|
|
smoke-test then passed.
|
|
|
|
Actual logs and inventories:
|
|
|
|
- [Bootstrap log](../../out/logs/bootstrap.log)
|
|
- [Smoke-test log](../../out/logs/smoke-test.log)
|
|
- [Package build log](../../out/logs/xbps-hello.log)
|
|
- [Guardrail and formatting checks](../../out/logs/check.log)
|
|
- [Build package inventory](../../out/manifests/void-build-packages.txt)
|
|
- [Cached package input digests](../../out/manifests/void-package-inputs.sha256)
|
|
- [Artifact digests](../../out/manifests/artifacts.sha256)
|
|
|
|
Generated output is ignored by Git. These links refer to this validated checkout;
|
|
rerun the commands to recreate the output in another checkout.
|
|
|
|
## Artifacts
|
|
|
|
| Artifact | Verified ABI | SHA-256 |
|
|
| --- | --- | --- |
|
|
| `out/fds-smoketest` | AArch64, static musl | `3c719a386cfef5b67f90488d9c67075c835c1a42d4db0efac0b475267dfc25ee` |
|
|
| `out/packages/hello-2.12.3_1.aarch64.xbps` | aarch64 package, glibc executable | `2703e81cff78d3d11b1a36f323c0af25691b258effcd60fe7f6d074ca8cdf1d8` |
|
|
|
|
## Known limitations
|
|
|
|
- QEMU execution was skipped because qemu-aarch64 is not installed. No ARM
|
|
hardware, Pi boot, bay topology, E-Ink, or boot/shutdown timing was tested.
|
|
- Void source, Rust, and host XBPS are pinned. Rolling binary dependencies are
|
|
audited through cached digests and version inventories, but a complete binary
|
|
repository snapshot and reproducible release are still future work.
|
|
- This is a cross-build foundation; there is no bootable FDS image yet.
|
|
- Initial upstream bubblewrap cleanup reported a busy `/tmp` mount point while
|
|
returning success. Subsequent container execution and cross-build checks
|
|
passed. See [the build guide](build-host.md#known-limitations).
|
|
|
|
## Next milestone proposal
|
|
|
|
M1 should implement `fds-base` and `fds-base-files`, assemble an aarch64 glibc
|
|
rootfs with GNU userspace and XBPS, and generate `out/rootfs-aarch64.tar`.
|
|
Acceptance should audit package contents, confirm glibc/coreutils/binutils,
|
|
require no musl runtime package, and exclude BusyBox, systemd, and runit.
|
|
Begin M1 only after an explicit request.
|
|
|
|
## Initial M0 changed-file inventory
|
|
|
|
```text
|
|
.cargo/config.toml
|
|
.gitignore
|
|
.gitmodules
|
|
AGENTS.md
|
|
Cargo.lock
|
|
Cargo.toml
|
|
Makefile
|
|
README.md
|
|
VOID_PACKAGES_COMMIT
|
|
config/host-tools.conf
|
|
config/xbps-src.conf
|
|
docs/architecture.md
|
|
docs/boot.md
|
|
docs/build-host.md
|
|
docs/cartridges.md
|
|
docs/m0-validation.md
|
|
docs/master-plan.md
|
|
docs/packages.md
|
|
docs/performance.md
|
|
docs/recovery.md
|
|
docs/services.md
|
|
image/.gitkeep
|
|
out/.gitkeep
|
|
packages/fds-base-files/.gitkeep
|
|
packages/fds-base/.gitkeep
|
|
packages/fds-cartridged/.gitkeep
|
|
packages/fds-cli/.gitkeep
|
|
packages/fds-eink/.gitkeep
|
|
packages/fds-kernel/.gitkeep
|
|
profiles/.gitkeep
|
|
rust-toolchain.toml
|
|
rust/fds-boottrace/.gitkeep
|
|
rust/fds-burn/.gitkeep
|
|
rust/fds-cartridged/.gitkeep
|
|
rust/fds-cli/.gitkeep
|
|
rust/fds-common/.gitkeep
|
|
rust/fds-smoketest/Cargo.toml
|
|
rust/fds-smoketest/src/main.rs
|
|
rust/fds-stage0/.gitkeep
|
|
s6/source/.gitkeep
|
|
tests/hardware/.gitkeep
|
|
tests/integration/m0-checks
|
|
tests/unit/.gitkeep
|
|
tools/bootstrap-host
|
|
tools/build-package
|
|
tools/lib.sh
|
|
tools/prepare-void
|
|
tools/smoke-test
|
|
tools/verify-elf
|
|
vendor/void-packages
|
|
```
|