feat: configure minecraft and zomboid
runner nix smoke / nix label and flake smoke (push) Failing after 1m13s
runner nix smoke / nix label and flake smoke (push) Failing after 1m13s
This commit is contained in:
Executable
+133
@@ -0,0 +1,133 @@
|
||||
# WorldOfSosal: Prism automatic updates
|
||||
|
||||
The published client entry point is:
|
||||
https://store.hectic-lab.com/minecraft/world-of-sosal/
|
||||
|
||||
Players import `WorldOfSosal-Prism.zip` into Prism once and approve its pre-launch
|
||||
command. Before each launch, packwiz-installer reconciles the client with the
|
||||
published pack: it adds, replaces, and removes managed files, checking hashes.
|
||||
`options.txt` is seeded once and preserved. Pack configuration files are managed
|
||||
and can be replaced. Upstream mods do not update independently of your release.
|
||||
Minecraft 1.21.1, NeoForge 21.1.250, Java 21; the instance reserves up to 8 GiB.
|
||||
|
||||
The original `.mrpack` alone does not provide this automatic update mechanism.
|
||||
Official workflow: https://packwiz.infra.link/tutorials/installing/packwiz-installer/
|
||||
|
||||
## Publishing a tested update
|
||||
|
||||
Keep the authoritative `.mrpack` in Storage Box at
|
||||
`minecraft/pack/WorldOfSosal.mrpack`. For a server update, replace that archive,
|
||||
set its new SHA-256 in `nixos/system/neuro/minecraft/world-of-sosal.nix`,
|
||||
and rebuild/switch neuro before publishing the corresponding client export. The server importer and the
|
||||
client export must consume the same archive; publishing only the client can make
|
||||
it incompatible with the running server.
|
||||
|
||||
```sh
|
||||
python3 script/build-prism-pack.py WorldOfSosal.mrpack /tmp/world-of-sosal-release \
|
||||
--server store.hectic-lab.com:25568
|
||||
# Test the client and deploy the matching server release first.
|
||||
python3 script/publish-prism-pack.py /tmp/world-of-sosal-release hectic-lab
|
||||
```
|
||||
|
||||
Use a new output directory for each build. Omit `--server` until the destination
|
||||
server is chosen. The builder downloads a SHA-256-pinned bootstrap from the
|
||||
packwiz project's release, or accepts it via `--bootstrap /path/to/file.jar`.
|
||||
External mods retain their original URLs and SHA-512 checksums. Embedded mods and
|
||||
configuration are hosted with the release. Both required and optional client mods
|
||||
are included, matching the current server importer's optional-mod behavior.
|
||||
|
||||
Publishing uploads an immutable directory, checks it if it already exists, and
|
||||
atomically switches `current`. Previous directories remain available for rollback.
|
||||
Do not remove a release while clients may still be reading it. Hash checks cause
|
||||
an overlapping update to fail safely rather than silently accept mixed contents;
|
||||
retry the launch if a publication overlapped a download.
|
||||
|
||||
The files live under `/var/www/store/minecraft/world-of-sosal` on `hectic-lab`,
|
||||
served by the existing `store.hectic-lab.com` nginx virtual host. No nginx reload
|
||||
is needed for pack updates. Keep `current/pack.toml` as the stable client URL.
|
||||
The index must be alongside pack.toml: putting a release prefix in `[index].file`
|
||||
also prefixes client installation paths with that directory in packwiz-installer.
|
||||
|
||||
If Minecraft/NeoForge versions change, update and test both the server pin and
|
||||
client pack. packwiz-installer 0.5.14 understands NeoForge components in Prism's
|
||||
`mmc-pack.json`; a launcher restart/relaunch may be necessary after changing them.
|
||||
|
||||
## Verification on 2026-09-18
|
||||
|
||||
- Source archive SHA-256:
|
||||
`f8c18acb9208e4592725632ae50dab4f9c308483b34fd43a6507c74fdbf8169f`.
|
||||
- Public HTTPS installation into a clean Prism-format instance passed: all 141
|
||||
client mods and all overrides match the original archive. A second launch
|
||||
performed no downloads and preserved personal options.
|
||||
- Direct probes of neuro public ports 25565, 25567, and 25568 timed out;
|
||||
the configured relay now provides the public entry point.
|
||||
- Live WoW server reached `Done` with all 135 server mod SHA-512 hashes
|
||||
matching the same archive used for the Prism client.
|
||||
- Public `store.hectic-lab.com:25568` status/ping succeeded (about 111 ms);
|
||||
a login handshake reached the online authentication encryption request.
|
||||
An authenticated in-game session has not been tested.
|
||||
- Server and tunnel are enabled at boot; relay and both NixOS configurations
|
||||
are deployed. No failed systemd units remain on neuro.
|
||||
- Loader package `neoforge-1.21.1-21.1.250` built successfully in Nix.
|
||||
- Automatic updater add/remove/config-update and options-preservation behavior
|
||||
tested with an actual packwiz-installer run against a controlled update fixture.
|
||||
|
||||
## WoW server and public entry point
|
||||
|
||||
The WoW map and WorldOfSosal mods share the `wowMineMap` server on neuro,
|
||||
listening on 25567. There is no separate WorldOfSosal world/server on 25568.
|
||||
The client pack and server both pin Minecraft 1.21.1 / NeoForge 21.1.250.
|
||||
Map import runs before mod import, and both finish before Minecraft starts.
|
||||
|
||||
The public entry point is `store.hectic-lab.com:25568`:
|
||||
|
||||
```
|
||||
Prism -> hectic-lab:25568 -> loopback:25577 -> SSH tunnel -> neuro:25567
|
||||
```
|
||||
|
||||
`minecraft-wow-proxy.socket` and its socket-proxyd service run on hectic-lab.
|
||||
`minecraft-wow-tunnel.service` on neuro establishes a reverse SSH forward and
|
||||
reconnects after failures. A dedicated SSH identity may listen only on
|
||||
127.0.0.1:25577 at the relay; it has no interactive shell or other forwarding.
|
||||
Both services and firewall rules are in Nix and start on boot. The SSH client
|
||||
uses an explicit AES-CTR / HMAC-SHA256-ETM / curve25519 transport profile with
|
||||
IPQoS=none, tested on the neuro-to-lab route. The default profile stalled after
|
||||
the handshake on this route. Both ends check peer liveness so stale listeners
|
||||
are eventually released. Minecraft retains
|
||||
`online-mode=true`, requiring normal authenticated Minecraft accounts.
|
||||
|
||||
For a temporary direct local tunnel, use:
|
||||
|
||||
```sh
|
||||
ssh -NTL 0.0.0.0:25568:127.0.0.1:25567 \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-o ServerAliveInterval=30 -o ServerAliveCountMax=3 neuro
|
||||
```
|
||||
|
||||
That command exposes the local 25568 listener on all interfaces, as requested.
|
||||
Use 127.0.0.1 instead of the first 0.0.0.0 if only this computer should use it.
|
||||
|
||||
Credentials are encrypted in `sus/neuro-minecraft.yaml` with the actual neuro
|
||||
host identity and owner keys. The existing `sus/neuro.yaml` is unchanged.
|
||||
The source WoW archive remains untouched in Storage Box. Import is idempotent:
|
||||
an existing world with level.dat is preserved. Never delete the world to update
|
||||
mods; publish/deploy a matching modpack release instead.
|
||||
|
||||
Useful checks:
|
||||
|
||||
```sh
|
||||
ssh neuro systemctl status minecraft-world-import-wowMineMap \
|
||||
minecraft-modpack-import-worldOfSosal minecraft-server-wowMineMap \
|
||||
minecraft-wow-tunnel --no-pager
|
||||
ssh hectic-lab systemctl status minecraft-wow-proxy.socket --no-pager
|
||||
ssh neuro journalctl -u minecraft-server-wowMineMap -n 80 --no-pager
|
||||
```
|
||||
|
||||
The initial isolated server compatibility test reached `Done` and answered the
|
||||
Minecraft status/ping protocol. Its logs also contain nonfatal recipe and class
|
||||
function errors from the supplied modpack; successful startup does not imply that
|
||||
every recipe or RPG class feature works correctly.
|
||||
|
||||
The imported map metadata is `wow mine`, DataVersion 3953 (Minecraft 1.21),
|
||||
spawn 0 / 68 / -32; extracted size is approximately 11.7 GiB. The archive
|
||||
SHA-256 was verified before extraction.
|
||||
Reference in New Issue
Block a user