The installer repo was created empty. Seed it with the same governance set
every other Runic Gateway repo carries, so it starts on the same footing
before any Rust code lands (see docs/installer/PLAN.md for the design of
record — this repo is still in the planning phase).
Copied verbatim, byte-identical to the other repos:
LICENSE.md (GPL-3.0-or-later), CODE_OF_CONDUCT.md, CONTRIBUTORS.md,
.gitea/PULL_REQUEST_TEMPLATE.md, .gitea/ISSUE_TEMPLATE/{bug_report,
feature_request}.md
Repo-specific:
README.md what the installer is, what it deliberately is not
(no curl|bash, never writes a ServUO launcher), the
planned commands, and the constraints a reader needs
up front: unsigned releases, bundle-manifest
composition, opt-in patch tier, and the fact that a
successful copy is not a working bridge.
CONTRIBUTING.md adapted from link/ (same Rust toolchain and checks),
plus a planning-status note pointing changes of scope
at the plan in docs/, and the two shard-testing traps.
SECURITY.md adds the installer to the component scope table and a
short subsection on its distinct trust model: unsigned
releases anchored on SHA256SUMS, mandatory
verification of downloaded artifacts, and the
never-contacts-the-website token handoff. This is the
only file that now differs from the other repos' copies.
.gitignore Rust build output plus local deployment state
(install.json, sidecar.toml, *.db) that must never be
committed from a test run.
.gitea/ISSUE_TEMPLATE/config.yaml same as elsewhere, repo-local URL.
No CI workflows yet — there is no crate for pr-checks to build, and the
release/bundle workflows are Phase 0 work that depends on servuo-plugins
gaining a release workflow first.
Co-Authored-By: Claude <noreply@anthropic.com>
108 lines
5.7 KiB
Markdown
108 lines
5.7 KiB
Markdown
# Runic Gateway installer
|
|
|
|
A single-binary deployment tool that takes a **stock ServUO installation** and
|
|
configures it for Runic Gateway: deploys the shard plugin overlay, optionally
|
|
applies the stock-file patch tier, installs the uo-link sidecar and registers it
|
|
as a service, records what it deployed, and hands the operator the four values
|
|
that connect the website to the shard.
|
|
|
|
```
|
|
┌──────────────────────────────────────────┐
|
|
│ Runic Gateway installer (>>> HERE <<<)│
|
|
└───────────────┬──────────────────────────┘
|
|
│ deploys
|
|
┌───────────────┴────────────────┐
|
|
▼ ▼
|
|
ServUO integration uo-link sidecar
|
|
overlay sync + opt-in patch tier binary + config + service
|
|
(RunicGateway/servuo-plugins) (RunicGateway/link)
|
|
```
|
|
|
|
It is a **deployment tool, not a hosted bootstrapper** — no `curl | bash`, no
|
|
installer service. Artifacts are downloaded from a Gitea release page and run.
|
|
|
|
It also **does not replace ServUO startup behavior.** ServUO keeps running through
|
|
its existing release/start scripts; the installer never writes a launcher and
|
|
never restarts the shard.
|
|
|
|
## Status
|
|
|
|
**Planning — no installer code exists yet.**
|
|
|
|
The design of record is
|
|
[`installer/PLAN.md`](https://gitea.whitlocktech.com/RunicGateway/docs/src/branch/main/installer/PLAN.md)
|
|
in the docs repo: phases, locked decisions, and the Phase 0 prerequisites in other
|
|
repos (a `servuo-plugins` release workflow, a non-interactive config read-back in
|
|
`link`, and the bundle-manifest CI here) that must land before Phase 1 is useful.
|
|
|
|
This repo currently holds its governance documents and issue/PR templates.
|
|
|
|
## Related repos
|
|
|
|
| Repo | What |
|
|
|------|------|
|
|
| **this** — `RunicGateway/installer` | The installer (Rust, one binary per OS). |
|
|
| [RunicGateway/link](https://gitea.whitlocktech.com/RunicGateway/link) | The **uo-link sidecar** — the network-facing half of the game bridge. Installed and service-registered by this tool. |
|
|
| [RunicGateway/servuo-plugins](https://gitea.whitlocktech.com/RunicGateway/servuo-plugins) | The **C# ServUO plugin** — deployed as source (`overlay/`) and compiled by ServUO at boot. Synced into the server tree by this tool. |
|
|
| [RunicGateway/website](https://gitea.whitlocktech.com/RunicGateway/website) | The public site and admin panel. The installer never contacts it — it prints values for Admin → Shard. |
|
|
| [RunicGateway/docs](https://gitea.whitlocktech.com/RunicGateway/docs) | All project documentation, including the installer plan. |
|
|
|
|
## Planned commands
|
|
|
|
| Command | What it does |
|
|
|---|---|
|
|
| `install` | Detect and validate the ServUO root, sync the overlay, optionally apply patches, install uo-link + service, write `install.json`, print the token handoff. |
|
|
| `doctor` | Diagnose an installed deployment end to end — through to *"has a shard actually dialed in?"*, the only check that distinguishes a working bridge from copied files. |
|
|
| `update` | Resolve the current bundle manifest, then update the sidecar (replace + restart) and the overlay (re-sync + tell the operator to restart ServUO). |
|
|
| `uninstall` | Remove only what the installer exclusively owns. It **never edits the ServUO tree** — it prints the overlay files to delete and the patch hunks to revert, and leaves that call to the operator. |
|
|
|
|
## Design constraints worth knowing up front
|
|
|
|
- **Releases are unsigned.** `SHA256SUMS` is the trust anchor; SmartScreen and
|
|
Gatekeeper warnings are expected and documented. The installer nonetheless
|
|
verifies the SHA256 of everything *it* downloads and refuses on mismatch.
|
|
- **Composition comes from a published bundle manifest**, not from "latest of
|
|
each". CI names an exact, protocol-checked combination of sidecar and overlay
|
|
versions; `--bundle <tag>` pins one for a reproducible install. A new component
|
|
release regenerates JSON, not this binary.
|
|
- **The base install must complete without the patch tier.** The patch tier edits
|
|
stock ServUO files, most real shards are hand-modified, and unverified ServUO
|
|
versions skip it with a warning rather than being patched blind.
|
|
- **A successful copy is not a working bridge.** ServUO ignores the script build's
|
|
exit code and silently reloads the previous `Scripts.dll`, so diagnostics verify
|
|
post-boot state rather than trusting a clean boot.
|
|
- **The audience is public** — any ServUO operator, not only shards we run.
|
|
|
|
## Build & run
|
|
|
|
Once the crate exists it will be a standard cargo project:
|
|
|
|
```bash
|
|
cargo build --release
|
|
cargo run -- --help
|
|
```
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for the development setup, the local
|
|
checks CI will run, and the branch/PR workflow.
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
Runic Gateway is free software, licensed under the **GNU General Public License
|
|
v3.0 or later** — see [LICENSE.md](LICENSE.md).
|
|
|
|
Copyright (C) 2026 Runic Gateway
|
|
|
|
This program is free software: you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation, either version 3 of the License, or (at your option) any later
|
|
version. It is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
Contributions are welcome — please read [CONTRIBUTING.md](CONTRIBUTING.md) (note
|
|
the **AI-usage disclosure** requirement) and our
|
|
[Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities privately per
|
|
[SECURITY.md](SECURITY.md).
|