{"id":47789847,"url":"https://github.com/techofourown/sw-ourbox-installer","last_synced_at":"2026-04-03T15:27:22.285Z","repository":{"id":343995513,"uuid":"1179788857","full_name":"techofourown/sw-ourbox-installer","owner":"techofourown","description":"Host-side mission media composer for OurBox installers","archived":false,"fork":false,"pushed_at":"2026-03-20T09:35:07.000Z","size":284,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-21T01:16:21.611Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/techofourown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T11:35:20.000Z","updated_at":"2026-03-20T09:35:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/techofourown/sw-ourbox-installer","commit_stats":null,"previous_names":["techofourown/sw-ourbox-installer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/techofourown/sw-ourbox-installer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techofourown%2Fsw-ourbox-installer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techofourown%2Fsw-ourbox-installer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techofourown%2Fsw-ourbox-installer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techofourown%2Fsw-ourbox-installer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/techofourown","download_url":"https://codeload.github.com/techofourown/sw-ourbox-installer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techofourown%2Fsw-ourbox-installer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31360527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-03T15:27:21.492Z","updated_at":"2026-04-03T15:27:22.275Z","avatar_url":"https://github.com/techofourown.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OurBox Installer\n\n`sw-ourbox-installer` is the host-side front door for composing OurBox mission\nmedia.\n\nCurrent scope:\n\n- target support: `woodbox` and `matchbox`\n- host-side selection: choose an exact target OS artifact on the host\n- host-side application selection:\n  - Woodbox: choose one or more application catalogs, merge them into one\n    effective catalog, and select the desired app set\n  - Matchbox: choose one published arm64 application bundle for the selected\n    target architecture\n- mission output: write a `mission-manifest.json` plus staged OS bytes,\n  staged application bytes, and selected metadata\n- media compose: delegate to a vendored target adapter snapshot while pulling\n  the published target installer substrate artifact automatically\n\nWhat this repo still does not do yet:\n\n- Tinderbox support\n- target-independent substrate composition\n\nThe immediate win is no longer Woodbox-only. The host now resolves the selected\ntarget OS artifact, the selected application input for that target, and the\npublished target installer substrate up front, stages the mission directory,\nand invokes a vendored target adapter to compose installer media that installs\nfrom local mission bytes.\n\nFor both Woodbox and Matchbox, the supported install path now purges\ntarget-side artifact browsing and pulling. The target installer consumes only\nthe embedded local mission bytes.\n\n## Usage\n\nFrom a normal checkout of `sw-ourbox-installer`:\n\n```bash\ngit clone --recurse-submodules https://github.com/techofourown/sw-ourbox-installer.git\ncd sw-ourbox-installer\n./tools/prepare-installer-media.sh\n# move the installer media to the target machine, boot it, follow the prompts,\n# let it power off, remove the installer media, then boot the installed system disk\n```\n\nWhen run from a terminal, the host composer now mirrors the old installer UX:\n\n- it prompts for the target type first\n- it prompts for the OS artifact first\n- the default OS path must resolve through the upstream OS catalog; if that\n  catalog is unavailable or malformed, the run fails fast\n- `ENTER` accepts the default lane choice\n- `c` chooses a different lane\n- `l` lists catalog rows newest-first with `n`/`p` page navigation\n- `r` enters a custom OCI ref\n- `o` overrides the upstream repo/catalog\n- after OS selection, it prompts for one or more application catalogs\n- for official Woodbox catalogs, the default catalog ids must come from\n  upstream `sw-ourbox-os` install-defaults data\n- if that upstream defaults artifact is missing or malformed, the installer\n  fails fast instead of falling back to adapter-local default policy\n- official Woodbox catalog ids resolve through each catalog repo's published\n  `catalog.tsv`, so the installer picks a pinned bundle for the requested\n  channel and target architecture instead of trusting floating bundle tags\n- if an upstream catalog cannot be fetched or does not expose a compatible\n  row for the requested channel and architecture, the official default path\n  fails fast instead of degrading to mutable non-catalog tags\n- if the selected catalogs provide the same app uid from multiple catalogs, it\n  only stops when the duplicated app definitions differ; identical duplicates\n  are deduped automatically\n- after duplicate app sources are resolved, it merges the catalogs into one\n  effective catalog and prompts for the applications:\n  - `ENTER` uses the merged default app set\n  - `a` installs all apps from the merged catalog\n  - `c` chooses a custom app set by number\n- after application selection, it asks whether you want to stage installed-target\n  SSH access at all:\n  - `ENTER` or `n` continues without any installed-target SSH key\n  - `y` opens the named-key chooser\n  - in the named-key chooser, pick an existing named key to reuse it across\n    installs and target families\n  - `n` creates a new named key\n  - `d` deletes one named key\n  - `x` deletes all named keys\n- then it lists removable USB target media, makes you choose by number, and\n  requires `SELECT` before the compose/flash step continues\n- the normal no-flag path flashes removable media; it does not keep extra build\n  artifacts by default\n\nPassing `--target`, `--os-channel`, or `--substrate-channel` changes the default\nchoice shown in those prompts. Passing `--os-ref` or `--substrate-ref` skips the\ncorresponding prompt and uses the exact ref non-interactively. Passing\n`--all-apps` or `--app-ids` skips the interactive application chooser.\n\nUseful flags:\n\n- `--target TARGET` to preselect the target type instead of using the interactive target picker\n- `--os-channel CHANNEL` to change the default OS lane offered in the host-side prompt\n- `--os-ref REF` to choose an explicit OS artifact ref instead of the interactive picker\n- `--substrate-channel CHANNEL[,CHANNEL...]` to preselect one or more application catalog ids in the prompt flow\n- `--substrate-ref REF[,REF...]` to choose one or more explicit application catalog refs instead of the interactive picker; a ref may point at an exact bundle or at a catalog index such as `ghcr.io/example/catalog:catalog-amd64`, which will be resolved to the newest pinned bundle for the requested channel and architecture\n- `--all-apps` to install every app published by the merged catalog set\n- `--app-ids ID[,ID...]` to install an explicit subset of apps from the merged catalog set\n- `--app-source-resolutions APP_UID=CATALOG_ID[,APP_UID=CATALOG_ID...]` to resolve duplicate app sources non-interactively\n- `--installed-target-ssh-key-name NAME` to reuse or create a named host-side SSH key and stage its public key for the installed target\n- `--mission-only` to stage only the mission directory under `./out/\u003ctarget\u003e` (or `--output-dir`)\n- `--compose-only` to compose installer media to disk under `./out/\u003ctarget\u003e` (or `--output-dir`) without flashing\n- `--output-dir DIR` to keep staged mission or composed media in a specific directory for those explicit non-default modes\n- `--flash-device /dev/...` to bypass the interactive USB picker and flash that exact device\n- `--help` to print the optional CI/dev flags without changing the normal no-flag operator flow\n\nCache behavior:\n\n- the tool keeps a host-side cache of pulled artifacts\n- when matching cached assets are available, it asks whether to reuse them\n- at the end of compose, it offers to clear cached assets to reclaim disk space\n\nInstalled-target SSH behavior:\n\n- host-side installed-target SSH staging is optional\n- if you skip it, compose still continues and the mission carries no staged\n  installed-target SSH key\n- named host-side SSH keys are stored in `${XDG_STATE_HOME:-$HOME/.local/state}/ourbox/installed-target-ssh-keys` by default\n- the staged mission carries only the selected public key, never the private key\n- the installed target can use that staged host key for key-based SSH\n- password-based installed-target SSH remains a separate target-side prompt during installation\n\n## Repository contract\n\n- `schemas/mission-manifest.schema.json`\n  - JSON Schema for the staged mission-manifest contract\n- `tools/cache.sh`\n  - host-side OCI cache plumbing\n- `tools/vendor-adapter.sh`\n  - copies target adapter surfaces into `vendor/`\n- `vendor/matchbox/`\n  - pinned snapshot of the Matchbox adapter surface used for phase-one execution\n- `vendor/woodbox/`\n  - pinned snapshot of the Woodbox adapter surface used for phase-one execution\n\nPhase one uses the vendored adapter scripts as the execution surface and points\nthem at the published installer substrate artifact for the selected target\nduring target-specific media composition.\n\nTerminology note:\n\n- the transport artifact is named `ourbox-substrate`\n- the user-facing concept is now one or more application catalogs plus a\n  selected app set from the merged effective catalog\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechofourown%2Fsw-ourbox-installer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechofourown%2Fsw-ourbox-installer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechofourown%2Fsw-ourbox-installer/lists"}