Commit Graph

3 Commits (24d890c9c90387c9ad10b2fb168cd96d2ee4f4e6)

Author SHA1 Message Date
Amir Alexander Abdelbaki 361d3ed82a Support client-only mods via a separate side=client directory
Rendering mods link against LWJGL, which a dedicated server does not have, so
Sodium in mods/ killed the server at boot with NoClassDefFoundError on
org/lwjgl/Version. The kit had nowhere else to put such a mod: it used the
server's own mods/ as the mirror, so reaching clients and not being loaded by
the server were mutually exclusive.

$SHARE/client-mods is now mirrored alongside mods/ and enters the pack with
side = "client", so packwiz-installer delivers it to players while the server
never loads it. packwiz url add always writes side = "both", so the field is
rewritten explicitly after each add — inserted when absent, replaced when
present, and re-asserted on unchanged mods in case it drifted.

Covers packwiz-setup.sh, mc-refresh-restart.sh (both directories synced through
one function), packwiz-http.py (allowlist) and mc-service-setup.sh (creates the
directory). Traversal out of client-mods/ is still refused.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 01:10:13 +02:00
Amir Alexander Abdelbaki c4074e8dbc Repair prior state on redeploy instead of tripping over it
A redeploy onto a host where earlier runs failed partway had no way to recover:
the obsolete minecraft.socket stayed, a hand-made `systemctl edit` drop-in kept
overriding ExecStart, units sat in a failed state, and a stale FIFO lingered.

mc-service-setup.sh now clears that up front: stops both services, removes the
socket unit, moves any minecraft.service.d / packwiz-http.service.d drop-in
aside with a timestamp (moved, not deleted, in case one was deliberate), removes
stale FIFOs at both the old and current paths, resets failed state and reloads.

It also gives the pack and the generated guides back to the admin user, undoing
the blanket chown an earlier version applied on every run.

START_SERVER now defaults to yes, so unpacking the zip and running install.sh
ends with a running server.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:42:42 +02:00
Amir Alexander Abdelbaki c36b54c7d3 Add install.sh, deploy.conf and ISO output
Deploying from removable media needed a single entry point that does not
require remembering a long flag line at a console.

install.sh reads deploy.conf, installs missing prerequisites with dnf, checks
that the share is actually mounted, optionally caps the ZFS ARC, runs the
deploy and can start the server. It copies itself off read-only media to the
home directory first, since the deploy needs somewhere writable. --check
validates the machine and changes nothing.

ACCEPT_EULA must be set to yes in the config; the installer will not infer it.

build.sh --iso produces a bootable-media image via xorrisofs/genisoimage/
mkisofs, carrying a ready-to-edit deploy.conf and a README.FIRST.txt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:39:38 +02:00