• v0.0.12
    release / deb (push) Successful in 17s
    Stable

    adam released this 2026-10-02 22:26:56 +00:00 | 1 commits to master since this release

    • New fetch command to download server zips into dist/, named with their version:
      • terractl fetch tmodloader [<version>] downloads from tModLoader's GitHub releases (default: the latest stable) and checks it against the SHA-256 checksum GitHub publishes. terractl fetch vanilla [<version>] downloads from terraria.org (default: its newest; older versions by number, 1449 or 1.4.4.9).
      • --list shows the versions available (tModLoader: stable and preview), and which are already downloaded. --upgrade <name> switches an instance to the zip with upgrade right after.
      • Every zip is checked (complete, and the right kind) before it's put in dist/; zips already there aren't downloaded again. If a site doesn't have the version or can't be reached, it says so and where to download it by hand.
      • Members of the terraria group can use it without sudo (except --upgrade). Needs curl.
    • Scheduled backups, with a systemd timer per instance (terraria-backup@<name>.timer):
      • sudo terractl backup enable <name> [--every <when>] [--keep <number>] (default: daily, keeping the newest 14). --every takes hourly, daily, weekly, a time such as 04:30, or any systemd calendar expression. Missed backups are made after the machine starts again.
      • backup now <name> makes one immediately, backup disable <name> stops the schedule (existing backups are kept), and backup list [<name>] shows schedules, the last and next run, and the backups.
      • Each backup saves the world first if the server is running (as export does) and goes in /var/lib/terraria/backups/<name>/ (TERRARIA_BACKUPS in /etc/default/terractl), readable by the terraria group. Only scheduled backups are pruned.
      • rename takes the schedule along, delete turns it off, and purging the package removes the schedules (not the backups).
    • New doctor command: terractl doctor [<name>] [--fix] checks the system (user, programs including ICU and curl, folders, zips, the systemd units and old copies in /etc that replace them, sandbox access to moved folders, journal access, polkit, the daemon, leftovers of deleted instances) and each instance (file ownership and modes, its server zip, paths in serverconfig.txt, missing mods, shared ports, failed starts and backups). Each problem comes with the command that fixes it. --fix applies the safe fixes: fix-perms, folder and zip permissions, journal access, the ReadWritePaths= drop-in for moved folders, and boot links or backup schedules of instances that are gone. It exits with status 1 if a problem remains.
    • The daemon (terractld.service) may now write to /etc/systemd/system, so backup enable and doctor --fix also work through --host.
    • Warnings about moved folders now also suggest terractl doctor --fix.
    • New upgrade command to change an instance's server version, up or down:
      • terractl upgrade <name> lists the zips in dist/ for its type, marking the installed, pinned and newest ones. The terraria group can use it without sudo.
      • sudo terractl upgrade <name> <zip>|latest checks the zip first (right type, readable by terraria, contains the server, passes unzip -t), stops the server (saving the world), backs up its worlds and configs to /var/lib/terraria/backups/<name>/, pins ZIP=, unpacks the zip right away and starts the server again if it was running. If unpacking fails, the instance is left as it was. --no-backup skips the backup.
      • Going to an older version needs --downgrade, because worlds saved by a newer version can't be opened by an older one.
      • Bash completion offers the instance's zips. Works with --host.
    • reinstall now always unpacks the same version again. Before, an instance with a blank ZIP= picked the newest zip in dist/, so reinstall could silently upgrade it. It now pins the zip the instance runs first, and refuses if that zip is gone from dist/. It also keeps the record of the installed version (server/.installed) until the new unpack is done.
    • list, new, import and enable warn when TERRARIA_BASE or TERRARIA_DIST is somewhere the services' sandbox doesn't allow (the instances folder not in ReadWritePaths=, or either folder under /home), and print the exact drop-in to add. The daemon (terractld.service) is checked too when it's on. A server that can't create its folder now says why in its log, instead of only "Read-only file system".
    • The guide's "Changing locations" now covers bind mounts (the simplest way to use another disk) as well as drop-ins, and a new section explains keeping instances or zips under /home.
    • journal-access is offered by tab completion and listed in the guide's command reference.
    • upgrade, and prepare/run started as root, check first that the terraria user can run the terractl being used. A copy under /root is refused with an explanation, before upgrade stops the server, instead of failing with env: Permission denied.
    • terractl run by a relative path (e.g. sudo ./bin/terractl prepare <name> from a source tree) no longer fails to switch to the terraria user.
    • New fix-perms command: sudo terractl fix-perms <name> gives every file of an instance back to the terraria user and reapplies the usual modes (group can read, others nothing; server binaries executable), e.g. after copying worlds in as root. Symlinks are not followed. Works with --host too.
    • list warns about zips in dist/ that the terraria user can't read (e.g. copied in with scp -p from a private file), and info lists them as unreadable_zip=. A server that fails to install because of one now says how to fix it (sudo chmod 644 <zip>) instead of just "cannot read", and a missing zip is reported as not found.
    Downloads