fix transmission-daemon
authorIan Kelling <ian@iankelling.org>
Fri, 28 Nov 2025 10:03:22 +0000 (05:03 -0500)
committerIan Kelling <ian@iankelling.org>
Fri, 28 Nov 2025 10:03:22 +0000 (05:03 -0500)
distro-end
filesystem/etc/systemd/system/transmission-daemon-nn.service
filesystem/usr/local/bin/joins-namespace-of-check

index c0dbfdd6b2ba2356ff4dbf71a6775d640f8f8d2f..38d74ad85a4d6703a9240af2abc01299d8f09f81 100755 (executable)
@@ -1430,18 +1430,46 @@ ser stop transmission-daemon
 # not worth separating out.
 # between comps, the uid can change
 
-f=$tdir/transmission-daemon
-for d in $tdir/partial-torrents $tdir/torrents $f; do
+tconf_dir=$tdir/.config/transmission-daemon
+
+case $HOSTNAME in
+  $d_host)
+    # to persist upload/dl metadata. initially, moved all the stuff
+    # in /var/lib/transmission-daemon to /d/tor
+
+    transmission_home=$(eval echo ~debian-transmission)
+    if [[ $transmission_home != /d/tor ]]; then
+      if ser is-active transmission-daemon-nn &>/dev/null; then
+        ser stop transmission-daemon-nn
+      fi
+      s usermod --home /d/tor debian-transmission
+    fi
+    ;;
+  *)
+    # set to the default
+    s usermod --home /var/lib/transmission-daemon debian-transmission
+    s lnf -T $tconf_dir /var/lib/transmission-daemon/.config/transmission-daemon
+    sudo chown -R debian-transmission:debian-transmission /var/lib/transmission-daemon
+    ;;
+esac
+
+for d in $tdir/partial-torrents $tdir/torrents $tconf_dir; do
   if [[ ! -d $d ]]; then
     sudo mkdir -p $d
   fi
   sudo chown -R debian-transmission:user2 $d
 done
-s lnf -T $f /var/lib/transmission-daemon/.config/transmission-daemon
-s lnf -T /etc/transmission-daemon/settings.json $f/settings.json
-sudo chown -R debian-transmission:debian-transmission $f
-sudo chown -R debian-transmission:debian-transmission /var/lib/transmission-daemon
-#
+
+# /etc/transmission-daemon/README.json:
+#Currently transmission overwrites the settings.json configuration file
+# on exit. The daemon can be instructed to reload the config with a SIGHUP,
+# or
+#  # invoke-rc.d transmission-daemon reload
+
+# Otherwise changes made manually to the file while the daemon is running
+# will be silently overwritten on exit.
+### end
+
 # config file documented here, and it\'s the same config
 # for daemon vs non-daemon, so it\'s documented in the gui.
 # https://trac.transmissionbt.com/wiki/EditConfigFiles#Options
@@ -1454,11 +1482,14 @@ sudo chown -R debian-transmission:debian-transmission /var/lib/transmission-daem
 # It is a read & write cache.
 #
 # just fyi: default rpc port is 9091
-d_host_suffix=$(awk '$2 == "'$d_host'" {print $1}' /p/c/host-info)
-u ~/.config/transmission-daemon-iank.rb <<EOF
+
+tr-config-daemon() {
+  d_host_suffix=$(awk '$2 == "'$d_host'" {print $1}' /p/c/host-info)
+  u ~/.config/transmission-daemon-iank.rb <<EOF
 require 'json'
-p = '/etc/transmission-daemon/settings.json'
+p = '$tconf_dir/settings.json'
 s = {
+  'rpc-whitelist' => '',
   'rpc-whitelist-enabled' => false,
   'rpc-host-whitelist-enabled' => false,
   'rpc-authentication-required' => true,
@@ -1472,54 +1503,44 @@ s = {
   "cache-size-mb" => 256,
   "ratio-limit" => 5.0,
   "ratio-limit-enabled" => false,
+  "rpc-username" => "transmission",
+  "rpc-url" => "/transmission/",
   "umask" => "002",
 $(if [[ -e /p/transmission-rpc-pass ]]; then echo '"rpc-password" => File.read("/p/transmission-rpc-pass").chomp,'; fi)
 }
 puts(JSON.pretty_generate(JSON.parse(File.read(p)).merge(s)))
 EOF
-# shellcheck disable=SC2154 # false positive
-if $ur || ! sudo test -s /etc/transmission-daemon/settings.json; then
-  restart_ser=false
-  ser=transmission-daemon-nn
-  if ser is-active $ser &>/dev/null; then
-    m ser stop $ser
-    restart_ser=true
-  fi
+
   tmpf=$(mktemp)
   # shellcheck disable=SC2024 # false positive
-  if sudo ruby <~/.config/transmission-daemon-iank.rb >$tmpf; then
-    sudo dd of=/etc/transmission-daemon/settings.json <$tmpf
-  else
+  if ! sudo ruby <~/.config/transmission-daemon-iank.rb >$tmpf; then
     echo "iank ruby transmission error" >&2
-    exit 1
+    return 1
   fi
-  if $restart_ser; then
-    m ser start $ser
-  fi
-fi
 
-####### end transmission
+  # shellcheck disable=SC2154 # false positive
+  if ! sudo diff -q $tmpf $tconf_dir/settings.json &>/dev/null; then
+    restart_ser=false
+    ser=transmission-daemon-nn
+    if ser is-active $ser &>/dev/null; then
+      m ser stop $ser
+      restart_ser=true
+    fi
+    sudo dd of=$tconf_dir/settings.json <$tmpf 2>/dev/null
+    if $restart_ser; then
+      m ser start $ser
+    fi
+  fi
+}
+tr-config-daemon
 
 case $HOSTNAME in
   $d_host)
-    # to persist upload/dl metadata. initially, moved all the stuff
-    # in /var/lib/transmission-daemon to /d/tor
-
-    transmission_home=$(eval echo ~debian-transmission)
-    if [[ $transmission_home != /d/tor ]]; then
-      if ser is-active transmission-daemon-nn &>/dev/null; then
-        ser stop transmission-daemon-nn
-      fi
-      s usermod --home /d/tor debian-transmission
-    fi
     sgo transmission-daemon-nn
-    ;;
-  *)
-    # set to the default
-    s usermod --home /var/lib/transmission-daemon debian-transmission
-    ;;
-esac
+;;
+  esac
 
+####### end transmission
 
 ######### begin transmission client setup ######
 
index 1215470901d3418e0c8c0c82b6be74fa6ad6d628..11f649b853e708f940c368f5c2a500cb0db529c0 100644 (file)
@@ -13,6 +13,8 @@ User=debian-transmission
 Type=simple
 ExecStartPre=+/usr/local/bin/joins-namespace-of-check -p system-openvpn\\x2dclient\\x2dtr.slice openvpn-client-tr@client
 ExecStart=/usr/bin/transmission-daemon -f --log-level=error
+# for debugging.
+#ExecStart=/usr/bin/transmission-daemon -f --log-level=debug
 ExecReload=/bin/kill -s HUP $MAINPID
 PrivateNetwork=true
 Nice=19
index 69490044ab8f468cc72bb953cd1f971230bd39c7..a105423ec69adc60c98352ad5df2308835a025c7 100755 (executable)
@@ -53,10 +53,8 @@ fi
 sleep 1
 
 unit="$1"
-procsf="$slice_dir"/$unit.service/cgroup.procs
-if [[ -s $procsf ]]; then
-  pid=$(head -n1 $procsf)
-else
+procsf="$slice_dir/$unit.service/cgroup.procs"
+if ! pid=$(head -n1 $procsf); then
   echo "error: no pid in $procsf. is the service running?"
   exit 1
 fi