Files
ulicraft-server-v1/plan/08-tooling.md
2026-05-24 04:03:42 +02:00

2.8 KiB

Tooling — config rendering, mod mirror, launcher fetch

Summary

Three scripts in ./tooling/ turn the two env vars + templates into a working, offline-capable stack. All are cautious: they halt on unset vars or missing inputs rather than emit half-broken output.

render-config.sh

Renders every *.tmpl into its real config by substituting BASE_DOMAIN / HOST_LAN_IP. Caddy is excluded (it reads {$BASE_DOMAIN} natively).

Targets:

  • drasl/config/config.toml.tmpldrasl/config/config.toml
  • dnsmasq/dnsmasq.conf.tmpldnsmasq/dnsmasq.conf
#!/usr/bin/env bash
set -euo pipefail
[ -f .env ] && set -a && . ./.env && set +a
: "${BASE_DOMAIN:?BASE_DOMAIN unset}"
: "${HOST_LAN_IP:?HOST_LAN_IP unset}"

render() {  # $1=tmpl  $2=out
  [ -f "$1" ] || { echo "missing template: $1"; exit 1; }
  envsubst '${BASE_DOMAIN} ${HOST_LAN_IP}' < "$1" > "$2"
  echo "rendered $2"
}

render drasl/config/config.toml.tmpl drasl/config/config.toml
render dnsmasq/dnsmasq.conf.tmpl      dnsmasq/dnsmasq.conf

Note: envsubst with an explicit var list avoids clobbering $-syntax that belongs to the target file (e.g. dnsmasq/caddy literals).

mirror-mods.sh

Vendors mod jars for offline install and rewrites packwiz URLs to the LAN host. See 04-packwiz.md. Outline:

  1. For each pack/mods/*.pw.toml, read [download] url + filename.
  2. Download jar → pack/mods-files/ (served by Caddy under packwiz subdomain).
  3. Rewrite url to http://packwiz.${BASE_DOMAIN}/mods-files/<filename>.
  4. packwiz refresh to recompute hashes + index.toml. Must halt if a download fails or a hash mismatches.

mirror-assets.sh

Mirrors Minecraft asset objects for offline clients (the ~400 MB+ chunk) and lays them out for Caddy + the Fjord "Assets Server" override. Full design in 10-assets-mirror.md. Verifies SHA1, idempotent, halts on mismatch.

fetch-launcher.sh

Downloads all FjordLauncherUnlocked release assets → mirror/launcher/<tag>/. Full script in 06-launcher.md.

Generated / gitignored

drasl/config/config.toml      # rendered
dnsmasq/dnsmasq.conf          # rendered
pack/mods-files/              # vendored jars
mirror/                       # launcher assets + mod mirror
.env                          # secrets + host-specific

Tasks

  • Write tooling/render-config.sh (above), chmod +x
  • Write tooling/mirror-mods.sh (toml parse + download + rewrite + refresh)
  • Write tooling/mirror-assets.sh (see 10)
  • Write tooling/fetch-launcher.sh (see 06)
  • Add gettext (envsubst) + jq to host prereqs doc
  • Update .gitignore for rendered configs + mirror/ + pack/mods-files/
  • build-stack.sh orchestrator (preflight + --prep online + --up offline) — DONE, sequences the sub-scripts; see plan/12