Files
bare-operating-system/docs/BINARY-RELEASE.md
T
Raven Scott 33c8a9f197
Release rolling / release (push) Successful in 8m34s
further updates
2026-07-31 19:00:14 -04:00

106 lines
3.4 KiB
Markdown

# 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-<ver>-<host>.tar.gz` | `bare-os-seeder[.exe]` + `kernel/` |
| `bare-os-booter-<ver>-<host>.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-<product>-<host>/`.
## 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)