• v0.0.11
    release / deb (push) Successful in 14s
    Stable

    adam released this 2026-09-30 22:23:38 +00:00 | 6 commits to master since this release

    • The servers now log to their own journal (systemd log namespace terraria), which members of the terraria group can read. attach and cmd therefore show output to terraria group members without sudo or the systemd-journal group, and without access to the rest of the system's logs. Read it directly with journalctl --namespace=terraria -u terraria@<name>.
    • New /etc/systemd/journald@terraria.conf for the servers' journal size and retention (default: up to 256 MB).
    • New internal terractl journal-access, run as root before each server start: creates the servers' journal folder (never /var/log/journal itself) and gives the terraria group read access, repairing existing journal files too.
    • The note shown by attach and cmd when output can't be read now distinguishes "not in the terraria group" from "in it, but the journal isn't set up yet".
    • New polkit rule (/usr/share/polkit-1/rules.d/50-terractl.rules): members of the terraria group can systemctl start, stop and restart terraria@<name> without sudo. enable, disable and all other units still need root. Needs polkitd 0.106 or newer, now a recommended package; Ubuntu 22.04's polkit can't run the rule.
    • New enable and disable commands: terractl enable <name> [--now] makes a server start at boot (--now also starts it), terractl disable <name> [--now] stops that (--now also stops it, saving the world). They need root, like systemctl enable. enable refuses names without an instance, so a typo can't create a new instance at boot. new and import now suggest terractl enable <name> --now.
    • list has a new BOOT column showing whether each server starts at boot (enabled, disabled, or e.g. masked).
    • Manage other hosts, like LXD/Incus remotes:
      • sudo terractl daemon enable starts terractld.service, a daemon other hosts connect to (HTTPS, TCP port 7776; TERRACTL_LISTEN in /etc/default/terractl changes it). It's off until enabled. daemon disable and daemon status turn it off and show its state.
      • daemon enable prints a command with a one-time token (valid for 24 hours); running it on another computer, terractl remote add <token>, adds the host as a remote named after its hostname (or remote add <name> <token>). sudo terractl daemon token makes tokens for more computers, daemon status lists the trusted ones, and daemon revoke <name> removes one. Adding a host again replaces the old remote, e.g. after a revoke. remote list and remote remove manage remotes, which are stored per user.
      • terractl --host <remote> <command> runs any command on a remote, including attach, watch and export/import/mods add with files from your computer. The daemon runs it as root there, with messages adjusted to terractl --host <remote> ....
      • terractl copy and terractl move copy, move or rename instances, on one host or between hosts ([<remote>:]<name>). Paths and ports follow the destination's settings, and a missing server zip is copied along. move stops the source first, starts it again if the transfer fails, and starts the moved instance where it was running before.
      • Security: the token carries the daemon's certificate fingerprint, which the client checks on every connection; each computer gets its own key, and the daemon stores only hashes. The daemon runs as root with systemd sandboxing.
      • Written in Python (standard library only), in /usr/lib/terraria-server-manager/terractl-remote. The package now depends on python3 and openssl.
    • New start, stop and restart commands, the same as systemctl start|stop|restart terraria@<name>, for this host and for --host. start refuses names that have no instance. The service's own stop step is now terractl service-stop; units that still call terractl stop <name> <pid> keep working.
    • New rename command: terractl rename <name> <new name> renames the folder, updates serverconfig.txt, and carries over the service (stopped and started again if it was running, and still starting at boot). The port and unpacked server are kept. move within one host uses it.
    • New info command: this host's folders, zips and instances, or an instance's type, port, server zip and state, as key=value lines.
    • import replaces a ZIP= pin that's an absolute path not present on this host with the zip of the same name in this host's dist/.
    • Messages that suggest a command now suggest terractl commands (terractl stop <name> rather than systemctl stop terraria@<name>), with sudo only when it's needed: not in a root shell, and not for terraria group members starting, stopping or restarting a server.
    • New watch command: terractl watch <name> [-n <lines>] [-q] follows the server's output like attach, but never sends input, so it's safe to leave open. Works for the terraria group without sudo, and while the server is stopped. -q leaves out the lines about what it's doing.
    • Bash completion for the new commands, remote names after --host, and <remote>:<name> for copy and move.
    • Clearer messages when run or prepare is typed without sudo (the old one, "must run as root or 'terraria'", read as if the terraria group were enough), and when stop is typed by hand.
    • Upgrading: running servers keep logging to the system journal until restarted; the package lists the ones to restart.
    Downloads