9.7 KiB
9.7 KiB
Changelog
0.0.11 - 2026-09-30
- The servers now log to their own journal (systemd log namespace
terraria), which members of theterrariagroup can read.attachandcmdtherefore show output toterrariagroup members withoutsudoor thesystemd-journalgroup, and without access to the rest of the system's logs. Read it directly withjournalctl --namespace=terraria -u terraria@<name>. - New
/etc/systemd/journald@terraria.conffor 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/journalitself) and gives theterrariagroup read access, repairing existing journal files too. - The note shown by
attachandcmdwhen output can't be read now distinguishes "not in theterrariagroup" 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 theterrariagroup cansystemctl start,stopandrestartterraria@<name>withoutsudo.enable,disableand all other units still need root. Needspolkitd0.106 or newer, now a recommended package; Ubuntu 22.04's polkit can't run the rule. - New
enableanddisablecommands:terractl enable <name> [--now]makes a server start at boot (--nowalso starts it),terractl disable <name> [--now]stops that (--nowalso stops it, saving the world). They need root, likesystemctl enable.enablerefuses names without an instance, so a typo can't create a new instance at boot.newandimportnow suggestterractl enable <name> --now. listhas a newBOOTcolumn showing whether each server starts at boot (enabled,disabled, or e.g.masked).- Manage other hosts, like LXD/Incus remotes:
sudo terractl daemon enablestartsterractld.service, a daemon other hosts connect to (HTTPS, TCP port 7776;TERRACTL_LISTENin/etc/default/terractlchanges it). It's off until enabled.daemon disableanddaemon statusturn it off and show its state.sudo terractl daemon trust add <name>creates a one-time token for a computer, valid for 24 hours;daemon trust listanddaemon trust remove <name>show and revoke access. On that computer,terractl remote add <remote> <token>adds the host;remote listandremote removemanage remotes, which are stored per user.terractl --host <remote> <command>runs any command on a remote, includingattach,watchandexport/import/mods addwith files from your computer. The daemon runs it as root there, with messages adjusted toterractl --host <remote> ....terractl copyandterractl movecopy, 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.movestops 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 onpython3andopenssl.
- New
start,stopandrestartcommands, the same assystemctl start|stop|restart terraria@<name>, for this host and for--host.startrefuses names that have no instance. The service's own stop step is nowterractl service-stop; units that still callterractl stop <name> <pid>keep working. - New
renamecommand:terractl rename <name> <new name>renames the folder, updatesserverconfig.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.movewithin one host uses it. - New
infocommand: this host's folders, zips and instances, or an instance's type, port, server zip and state, askey=valuelines. importreplaces aZIP=pin that's an absolute path not present on this host with the zip of the same name in this host'sdist/.- Messages that suggest a command now suggest
terractlcommands (terractl stop <name>rather thansystemctl stop terraria@<name>), withsudoonly when it's needed: not in a root shell, and not forterrariagroup members starting, stopping or restarting a server. - New
watchcommand:terractl watch <name> [-n <lines>] [-q]follows the server's output likeattach, but never sends input, so it's safe to leave open. Works for theterrariagroup withoutsudo, and while the server is stopped.-qleaves out the lines about what it's doing. - Bash completion for the new commands, remote names after
--host, and<remote>:<name>forcopyandmove. - Clearer messages when
runorprepareis typed withoutsudo(the old one, "must run as root or 'terraria'", read as if theterrariagroup were enough), and whenstopis typed by hand. - Upgrading: running servers keep logging to the system journal until restarted; the package lists the ones to restart.
0.0.10 - 2026-09-30
cmdnow prints the server's reply to the command, instead of only saying where to find it. It waits until the server has been quiet for a second, up to 5 seconds.attachandcmdnow explain when you can send commands but not see the server's output. That happens for members of theterrariagroup who aren't root or insystemd-journal. Previouslyattachshowed nothing, without saying why.- Replaced a
${var:+...}expansion with an explicitifinimport's summary message (ShellCheck SC2016). The output is unchanged.
0.0.9 - 2026-09-28
- New
exportcommand:terractl export <name> [file.tar.gz] [--with-server]archives an instance'sinstance.conf,serverconfig.txtanddata/(worlds, mods, mod configs). If the server is running under systemd, it is asked to save first. Archives are created readable only by their owner, sinceserverconfig.txtcan contain the server password.--with-serveralso includes the unpacked server software (and tModLoader's .NET), for hosts without internet access. - New
importcommand:terractl import <name> <file.tar.gz>creates an instance from an export, adeletebackup, or an archive of an old/opt/terrariainstance. Archives are checked before extracting (no paths outside the instance folder, no links or special files). Paths inserverconfig.txtare updated, a port already used by another instance is replaced with a free one, the server version the world was exported with is pinned, and ownership is set to theterrariauser. - One server per instance:
runholds a lock (<instance>/.lock) for the server's whole lifetime, released automatically when it exits or crashes. A secondrun, or starting the service while a copy started by hand is running, is refused. prepareandreinstall --cleanrefuse to run while the instance's server is running, soserver/and .NET are never replaced or deleted under it.deleterefuses to continue if the server is still running outside systemd.listshows servers started by hand asrunning (outside systemd).stoptyped by hand now explains to usesystemctl stopinstead of silently doing nothing.- Fixed relative paths given on the command line (e.g.
terractl mods <name> add tmod-export) being looked up from/instead of the current directory. - Bash completion for
exportandimport.
0.0.8 - 2026-09-28
- Bash completion for
terractl: commands, instance names,newtypes, console commands forcmd,reinstall/deleteoptions, andmodsactions and mod names. Installed toshare/bash-completion/completions/terractlby bothmake installand the package.
0.0.7 - 2026-09-28
- Fixed ShellCheck warnings that made
make check(and thereforemake deb) fail when ShellCheck is installed: simplified the development-copy check in--version(SC2140), and marked the intentional unquoted unit list inprerm(SC2086).
0.0.6 - 2026-09-28
- Renamed the command from
terraria-instancetoterractl, and the package fromterraria-instancetoterraria-server-manager. The new package replaces the old one automatically; see "Upgrading from the terraria-instance package" in the guide. - Settings file moved from
/etc/default/terraria-instanceto/etc/default/terractl. - New
terractl --version. - New Makefile:
make check,make deb,make install,make uninstall. - Restructured the source into a git repository layout.
0.0.5 - 2026-09-28
- Fixed
attach: detaching with Ctrl-D printed "jpid: unbound variable" and left ajournalctlprocess running.
0.0.4 - 2026-09-28
- The .NET runtime that tModLoader downloads on first start (and its logs) is now kept when an instance is upgraded or re-unpacked.
- New
reinstall --cleanto discard .NET as well and download it again.
0.0.3 - 2026-09-28
- New
modscommand:list,add,enable,disable,remove. Accepts the Windows export folder directly and sets file ownership. newandpreparenow createdata/Modsfor tModLoader instances.
0.0.2 - 2026-09-28
- Fixed
preparefailing for tModLoader zips when run as root from a directory theterrariauser can't enter (e.g./root).
0.0.1 - 2026-09-28
- First Debian package. Uses
/var/lib/terrariainstead of/opt/terrariaand/terraria, creates theterrariauser and directories with sysusers.d and tmpfiles.d, and stops instances cleanly when removed. prepareandrunswitch to theterrariauser when started as root, so no files end up owned by root.- New
deletecommand, with an automatic backup. listno longer aborts when an instance's config can't be read.