# Binary releases (seeder + booter) Host distribution is **Bare standalone binaries**, not `pear run` (removed in Pear v3). ## Artifacts Gitea **`rolling`** release (every push to `main`, via `.gitea/workflows/release-rolling.yml`): | Asset | Contents | |-------|----------| | `bare-os-seeder--.tar.gz` | `bare-os-seeder[.exe]` + `kernel/` | | `bare-os-booter--.tar.gz` | `bare-os-booter[.exe]` | | `by-arch-seeder.tar.gz` / `by-arch-booter.tar.gz` | Holepunch `by-arch/` trees for `pear install` / OTA | | `*.sha256` | Checksums | Hosts (64-bit only): `linux-x64`, `linux-arm64`, `darwin-x64`, `darwin-arm64`, `win32-x64`, `win32-arm64`. ## Local build ```bash npm ci npm run maintainer:kernel-image # seeder needs current kernel/ npm run make:seeder:linux-x64 # or: npm run make DRY_RUN=1 SKIP_PEAR_STAGE=1 bash scripts/gitea-rolling-release.sh ``` `make.cjs` ends with `scripts/verify-standalone-build.cjs`: size ceilings, pear-runtime stub check, and a native-host booter smoke (`--datadir`, no CodeRange OOM). Outputs under `out/bare-os--/`. ## Web installer ```bash curl -fsSL https://install.bare-os.live | bash # or from Gitea raw: # curl -fsSL https://git.ssh.surf/snxraven/bare-operating-system/raw/branch/main/scripts/install.sh | bash ``` | Flag | Effect | |------|--------| | `--seeder` / `--booter` / `--both` | What to install | | `--yes` | Non-interactive | | `--system` | Linux: `/opt/bare-os` + systemd (`deploy/bare-os-*.service`) | | `--no-updates` | Disable pear-runtime OTA | Default user install: `~/.local/share/bare-os/{seeder,booter}/` with shims in `~/.local/bin`. ## Run ```bash # From a release tarball tar -xzf bare-os-seeder-0.1.0-linux-x64.tar.gz ./bare-os-seeder --no-updates # disable OTA for this run tar -xzf bare-os-booter-0.1.0-linux-x64.tar.gz # Keep qvac-backends/ next to bare-os-booter (ggml CPU/Vulkan .so for `agent`) ./bare-os-booter --no-updates ``` Dev from a git checkout (no packing): ```bash npm run os:seeder # bare packages/bare-os-seeder/index.js npm run os:booter # or bin entries with OTA wrapper: npm run os:seeder:bin npm run os:booter:bin ``` ## Pear install + OTA Upgrade links (also `upgrade` in each package.json): - Seeder: `pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy` - Booter: `pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao` ```bash pear install pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy pear install pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao ``` Packaged binaries embed **`pear-runtime`**. Disable with `--no-updates` or `BARE_OS_OTA_DISABLE=1`. CI publishes **`by-arch-*.tar.gz`** on the rolling release but does **not** pear-ci stage. Stage offline: ```bash # after npm run make (or unpack by-arch trees from rolling) PEAR_PRIMARY_KEY=<64-hex> bash scripts/pear-stage-by-arch.sh ``` Snapshots (when staging): `ci/snapshot-seeder.json`, `ci/snapshot-booter.json`. ## Secrets | Secret | Role | |--------|------| | `RELEASE_TOKEN` | Gitea release write for tag `rolling` | | `GITEA_URL` | Optional forge base URL | `PEAR_PRIMARY_KEY` is only for **offline** `scripts/pear-stage-by-arch.sh`, not CI. ## Related - Installer: [`scripts/install.sh`](../scripts/install.sh) ยท systemd: [`deploy/`](../deploy/) - Legacy channel notes: [PEAR-RUN.md](PEAR-RUN.md) - Guest Hyperdrive OTA / updater bridges: [deployment/OTA_AND_BUNDLES.md](deployment/OTA_AND_BUNDLES.md)