The Original Sin: A Rogue Updater and a Misunderstood Flag

Our tale began with a seemingly innocuous Jackett.service happily chugging along on a Debian LXC. Then, like a surprise boss fight in an RPG, a stealthy auto-update (v0.23.23 to v0.23.28) swooped in, completely disregarding my carefully set UI flag to “Disable auto update.” The logs, once a serene stream of Info messages, abruptly turned into a battlefield. The old process, still clinging to life during the update, got unceremoniously killed, status=11/SEGV, spewing signal=ABRT like a digital death rattle. systemd, bless its heart, tried its best, rescheduling restarts and counting to five before finally throwing in the towel, declaring jackett.service: Failed with result ‘signal’. It was clear: Jackett decided it knew better than me, and then immediately fell on its face. Classic.

The Exorcism: Wiping the Slate Clean

First things first, a broken installation is worse than no installation. The goal was a clean slate. After some frantic forum searches and Reddit dives (because, let’s be honest, where else do you find real-world Linux wisdom?), the consensus was to use Jackett’s own uninstaller script. Being root, sudo was a quaint notion from a bygone era, so it was a direct pipe to bash.

wget https://raw.githubusercontent.com/Jackett/Jackett/master/uninstall_service_systemd.sh --quiet -O -|bash

The script whirred to life, stopping the errant service, disabling it, removing symlinks, deleting the service file, and finally, declaring Jackett uninstallation finished. A quick systemctl status jackett confirmed Loaded: not-found, proving the service was banished. However, like a lingering ghost, a stray .config folder remained in /home/jackett. Clearly, even uninstallers have their limits. A swift

rm -rf /opt/Jackett

took care of that.

The Rebirth: A Fresh Start with Strict Rules

With the old mess swept away, it was time for a fresh installation. The README suggested /opt for binaries, and who am I to argue with documentation (especially after the last fiasco)?

cd /opt
f=Jackett.Binaries.LinuxAMDx64.tar.gz
wget -Nc https://github.com/Jackett/Jackett/releases/latest/download/"$f"
tar -xzf "$f"
rm -f "$f"
chown -R jackett:jackett /opt/Jackett*

Download, extract, delete the archive, set ownership. Standard stuff. A quick

/opt/Jackett/jackett --version

confirmed Jackett v0.23.38, proving the new binaries were in place and properly owned. Now, for the critical part: preventing future update rebellions. The README’s “Command line switches” section was my bible, revealing the glorious –NoUpdates flag. I crafted a new systemd service file (`/etc/systemd/system/jackett.service`) with this in mind.

[Unit]
Description=Jackett
After=network.target

[Service]
Type=simple
User=jackett
Group=jackett
ExecStart=/opt/Jackett/jackett --NoRestart --NoUpdates -p 9117 --ListenPublic
WorkingDirectory=/opt/Jackett
TimeoutStopSec=20
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

Notice –NoRestart and –NoUpdates? That’s the digital equivalent of putting a leash and muzzle on a misbehaving dog. And –ListenPublic for good measure, because this LXC (192.168.1.104) isn’t shy.

The Stubborn Ghost: User Permissions Strike Again

Excitedly, I reloaded systemd and tried to enable –now the service. Instant Active: failed (Result: signal) … code=killed, signal=ABRT. Déjà vu, but worse. It wasn’t an update, it was a fresh install failing. I quickly stopped the service to prevent a restart loop. My next move, as any good Linux detective would do (after a few more forum searches), was to manually run the executable as the service user.

su jackett

and it hung. Just sat there, mocking me. It was like waiting for dial-up, but the connection eventually materialized. I need to research this later…

Trying to run

/opt/Jackett/jackett

from the jackett shell yielded the smoking gun:

System.Exception: Could not create settings directory. Access to the path '/home/jackett' is denied.

The Final Fix: A Simple Permission Change

The error was so simple it was infuriating. The jackett user lacked write access to its own home directory… Clasic!! After exiting the jackett user’s shell and returning to root, issued

chown jackett:jackett /home/jackett

and we were good to go. Restarting the service this time was a success. The logs were clean, and the service was `active (running)`. The journey was over. My machine now has a Jackett instance that is stable, secure, and most importantly, knows its place.

And I know to make sure to check user home directories…

Leave a Reply

Your email address will not be published. Required fields are marked *

recaptcha placeholder image
 

This site uses Akismet to reduce spam. Learn how your comment data is processed.