Desktop installer and temporary Linux installation service for the Sanytron Astrion HA100. This repository consumes pinned OS payloads built by Couch.
The source keeps the tools/installer/ layout so existing build recipes,
workspace lockfiles and source references remain usable after extraction.
VERSION under that directory is the installer version; it is independent of
the OS version selected by installer.json.
Use Python 3.12 or newer and Rust stable. Each Rust workspace retains its own lockfile. On Linux:
python3 -m unittest discover -s tools/installer -p 'test_*.py'
(cd tools/installer/host && cargo fmt --check && cargo test --locked)
(cd tools/installer/tui && cargo fmt --check && cargo test --locked)
(cd tools/installer/linux_stage/probe && cargo test --locked --features private-install)
(cd tools/installer/linux_stage/storage && cargo test --locked)macOS and Windows can build and test the desktop workspaces. RAM-service and
storage tests use Linux APIs. ARM service builds additionally need the
armv7-unknown-linux-musleabihf Rust target and an ARM musl C compiler for ring.
The native binary workflow builds Linux, Windows and universal macOS artifacts
and records compiler, source, version and binary hashes. It does not publish.
With Zig 0.15.2 installed, the included compiler wrapper supports ARM builds:
export ZIG=/path/to/zig
export CC_armv7_unknown_linux_musleabihf="$PWD/tools/installer/toolchain/arm-musl-cc.py"
(cd tools/installer/linux_stage/probe && cargo build --locked --release \
--target armv7-unknown-linux-musleabihf --features private-install)python3 tools/installer/bump_version.py v0.1.1
python3 tools/installer/release_descriptor.py \
--installer-repository Couch-OS/couch-installer \
--os-config /path/to/reviewed-os/installer.json \
--source-commit INSTALLER_SOURCE_COMMIT \
--output /path/to/new-assets/installer.json
python3 tools/installer/installer_launchers.py \
--assets /path/to/new-assets --output /path/to/new-launchers --version v0.1.1The asset directory must also hold the reviewed host/TUI binaries for Linux x64,
Windows x64 and universal macOS. Keep their build receipts, corresponding source
and notices. Schema 2 identifies installer and OS versions and source commits
separately and pins the exact OS archive. Existing schema-1 descriptors remain
supported. Installer release tags are installer-v…; OS payload tags remain
v… in the Couch repository. Metadata generation neither rebuilds nor publishes
the OS payload.
Couch is moving from dangerouslaser/couch to Couch-OS/couch. Published
descriptors keep the old name, and GitHub redirects it, so descriptor checks,
the native host and release discovery accept OS payloads and legacy installer
releases under exactly those two names. Installer releases may also come from
Couch-OS/couch-installer. Any other owner, repository or letter case is
refused. dangerouslaser/couch remains the default until the transfer.
The standalone source collector collects this exact Git commit and all four locked Cargo workspaces. It requires dependency notices and audited Rust standard-library sources; OS source remains separate.
The neutral RAM image builder belongs to the installer. Complete OS images, kernel integration and private full boot-image assembly belong to Couch. The existing public OS archive still bundles the RAM image; changing that archive's layout requires a separately versioned compatibility change.
Build a neutral RAM payload from reviewed binary and package inputs with
python3 tools/installer/image/neutral_ramdisk.py --help. It writes
installer.cpio.gz and a receipt without owner firmware or device access.
Keep owner firmware, enrollment records, credentials and backups outside Git.
Never write preloader_* or lk. Host tests and ARM builds do not establish
physical installation or recovery acceptance. Publishing and device validation
remain explicit release steps.