Skip to content

build: add an ARMv7 Omarchy-A desktop and root - #29

Merged
henrikklee merged 14 commits into
OrchardLinux:mainfrom
shaynelegault:p105/11-armv7-desktop
Nov 7, 2026
Merged

henrikklee merged 14 commits into
OrchardLinux:mainfrom
shaynelegault:p105/11-armv7-desktop

Conversation

@shaynelegault

@shaynelegault shaynelegault commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Selecting Orchard's apple-armv7 platform selects an Arch Linux ARM armv7h root and matching desktop components. ARM64 retains the current platform-index and block-image pipeline. ARMv7 uses the selected board's native layer and Cascadia recovery producers, with the static LwVM mapper and matching SSH helpers forwarded into both initrds.

Native producer options are checked before cold-cache input resolution. Component keys include the selected build environment and wrapper. The release receipt measures source snapshots, component manifests and consumed files before assembly, checks them again afterward, and records the final root hash. Base and final release stamps remain distinct. Public layer tables contain only schema fields.

The generic installer and publisher retain their ARM64/Pongo policy. ARMv7 produces local archive, layer and recovery assets while public P105 installation remains gated. Source archives retain an exact producer-tree identity; Orchard's existing public install-manifest schema still requires a real Git commit and boolean modified. The qualified build path uses a clean Git snapshot.

Payload staging sets shared directories to mode 0755 and the tablet home subtree to 0700, preserving file modes and symlinks. This prevents a restrictive build umask from making the installed desktop inaccessible. Root export consumes tar's padding through EOF to prevent a host extractor from closing the container's output pipe early. Test fixtures resolve the Cascadia codec from the selected producer snapshot.

Validation at d81ee788:

  • The complete host suite ran 189 cases and passed with 22 skips for unavailable host tools. The mode regression stages the payload under umask 077 and checks directory permissions, symlink targets and file modes. Export fixtures reproduce the early-close failure, verify full stream consumption, and reject corruption or truncation. Codec fixtures passed with current and older companion producers; Orchard main explicitly skips those cases while it lacks Cascadia support.
  • The focused contract checks validate both manifest shapes, native helper forwarding and ISA guards, early CLI refusal, source/cache provenance and mutation detection. An independent bounded review passed 27 checks and cleared the source blockers.
  • A fresh ARMv7 base and complete release assembled at d81ee788 with Orchard producer 1d807dc3. The release audit passed across 135,006 archive members, including 709 desktop files, 19 privileged entries and 1,570 recovery runtime members. A separate mode audit checked 710 staged files, 168 directories and 37 symlinks. Root SHA-256: 02c84b8875d0b8a41f01ab1500accb19ba80d14880fac43d2b78a38074dfc6e1. Compiled desktop components retain their original 4a5c35c4 source receipts; current payload staging and base assembly are recorded separately. The task VM stopped after the checks.

Merge Orchard ARMv7 producers #82 first. The full native path also needs A5 startup #84, installed-root mapping #92 and recovery/installation support #94. Minimal Linux #6 accompanies the shared producer contract.

The exact-head GitHub run 42335093512 ended action_required. A maintainer must approve the fork workflow because this account has read-only repository access. Exact-build P105 qualification remains pending. P105 is the owner's test board; Henrik or other owners cover other devices. Earlier unplugged desktop evidence belongs to the preserved development build. Proposed changelog text awaits owner approval.

Select an armv7h userspace for Orchard arm platforms and carry the target through desktop components, root assembly and release auditing. Check package metadata and native ELF headers before packaging, and isolate component caches by architecture and compiler identity.

Build ARMv7 Omacalc from its pinned upstream source and use the selected Cascadia board profile for recovery assembly. The ARMv7 producer contract is supplied by the companion Orchard change.

Assisted-by: LLM
Verify the official bootstrap archive against its pinned hash and published signing key before importing it into the selected Podman connection. Prepare the native compiler and Qt build dependencies, then record the compiler image ID and package versions.

The recipe uses an existing ARM32 execution environment and leaves emulator registration and the host default connection to the host owner.

Assisted-by: LLM
Retain Arch hardening defaults while omitting RELR packing, which the ARM32 linker rejects. Compile and execute a check with the resulting makepkg flags when preparing the image.

Assisted-by: LLM
Require the selected platform input to supply a native static mapper for an LwVM root before compiling the desktop. Pass that helper and the selected rescue tools to installed initrd and RAM recovery assembly.

Assisted-by: LLM
Keep explicit device selection consistent with the selected input boards before choosing their loader and storage tools.

Assisted-by: LLM
Check the known keymap data directory for framed ELF64 BPF relocatable objects before enforcing the native root ABI. Preserve rejection of foreign native objects and malformed or misplaced bytecode during assembly and audit.

Assisted-by: LLM
Keep the ARM64 platform index and block-root producer while sending ARMv7 through its board-selected layer and recovery producers. Check the native CLI contract before resolving expensive inputs, and forward the static mapper and rescue tools.

Bind source snapshots and component keys to the build receipt. Measure consumed files before assembly and verify them afterward, preserve archive-tree provenance, and keep base and final release stamps distinct.

Filter published layer fields through the schema contract. Keep generic installer packaging scoped to its supported ARM64 path while native asset qualification remains pending.

Assisted-by: LLM
Keep the temporary Orchard checkout confined to the early-contract test so later publication cases resolve their real source snapshot. The complete host suite passes 186 cases with 22 artifact skips.

Assisted-by: LLM
A private build umask made newly staged system and home parents root-only. The base overlay preserved those modes over the installed packages, which blocked the tablet session. Set public directories to 0755 and the tablet home subtree to 0700 before packaging. Preserve file modes and leave symlink targets unchanged.

Assisted-by: LLM
Choose the shared codec from the current Orchard snapshot and keep coverage for its earlier module location. Explicitly skip the companion framing cases when the selected main snapshot has no Cascadia producer command. Codec import and execution errors still propagate.

Assisted-by: LLM
A host tar consumer can exit at the archive end marker while the container
still writes legal zero padding. With pipefail enabled, the producer's
SIGPIPE then aborts an export whose files were already extracted.

Use the portable --ignore-zeros option so extraction consumes the complete
stream. Exercise the producer through a padded export and retain failure
coverage for corrupted and truncated archives.

Assisted-by: LLM
@shaynelegault
shaynelegault marked this pull request as ready for review November 7, 2026 05:08
Arch Linux ARM publishes only a "latest" bootstrap, which it replaces, so a
hash pin of it breaks at the next refresh. The pin names the 2026-08-05
build (still upstream's latest today), fetched from a copy in this
repository's releases first, then from upstream while upstream still serves
that build. Hash and signature checks are unchanged.
… index

The 32-bit release now has the arm64 release's shape: the root as a block
image (orchard.image.root_image), its logo, and the platform layers, loaders
and install tools orchard's 32-bit index lists. Orchard is the device
layer, so the distro builds no recovery, selects no board and carries no
LwVM inputs or per-board platform layer.

Dropped: the Cascadia recovery and its audit, selects-device and --device,
the LwVM inputs, the native platform-layer producer, the recovery branch of
the manifest, the assembly provenance checks (they refused modified orchard
checkouts) and the per-file ELF/BPF checks of the root. Kept: the
architecture choice, the ARMv7 builder (default builder image for armv7h),
desktop/target.py, system/armv7, Omacalc, and the architecture checks of the
desktop components, base and static tools.
A 32-bit release names each board's Cascadia loader ([cascadia.BOARD], from
the index's loaders.cascadia), boots with recovery-autogo and has no Pongo,
m1n1 or logo (orchard docs/distribution-contract.md, "32-bit roots"). From
a published orchard build it takes platforms-armv7.toml with
--architecture arm.
@henrikklee
henrikklee merged commit 8bf5b76 into OrchardLinux:main Nov 7, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants