From d1d45538b3f0594ab754d23520369679e1fd6b5c Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Sun, 25 Jan 2026 20:51:05 -0800 Subject: [PATCH] Add transmission container, update deployments to use local image Simpler alternative to linuxserver image with same PUID/PGID support. --- argocd/manifests/kiwix/deployment.yaml | 2 +- argocd/manifests/torrent/deployment.yaml | 2 +- containers/transmission/Dockerfile | 28 +++++++++++++ containers/transmission/start.sh | 52 ++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 containers/transmission/Dockerfile create mode 100644 containers/transmission/start.sh diff --git a/argocd/manifests/kiwix/deployment.yaml b/argocd/manifests/kiwix/deployment.yaml index 7b1f802..cd450d9 100644 --- a/argocd/manifests/kiwix/deployment.yaml +++ b/argocd/manifests/kiwix/deployment.yaml @@ -53,7 +53,7 @@ spec: # Sidecar: Syncs declarative ZIM torrents to transmission - name: torrent-sync - image: lscr.io/linuxserver/transmission:4.0.6 # Has transmission-remote CLI + image: registry.ops.eblu.me/blumeops/transmission:v1.0.0 command: ["/bin/bash", "-c"] args: - | diff --git a/argocd/manifests/torrent/deployment.yaml b/argocd/manifests/torrent/deployment.yaml index 8f331bb..c0a8c2a 100644 --- a/argocd/manifests/torrent/deployment.yaml +++ b/argocd/manifests/torrent/deployment.yaml @@ -16,7 +16,7 @@ spec: spec: containers: - name: transmission - image: lscr.io/linuxserver/transmission:4.0.6 + image: registry.ops.eblu.me/blumeops/transmission:v1.0.0 env: - name: PUID value: "1000" diff --git a/containers/transmission/Dockerfile b/containers/transmission/Dockerfile new file mode 100644 index 0000000..943b0f7 --- /dev/null +++ b/containers/transmission/Dockerfile @@ -0,0 +1,28 @@ +# Transmission BitTorrent daemon +# Simpler alternative to linuxserver image + +FROM alpine:3.21 + +ARG TRANSMISSION_VERSION=4.0.6-r0 + +RUN apk add --no-cache \ + transmission-daemon=${TRANSMISSION_VERSION} \ + transmission-cli=${TRANSMISSION_VERSION} \ + transmission-remote=${TRANSMISSION_VERSION} \ + bash \ + tzdata \ + su-exec + +# Create transmission user +RUN addgroup -g 1000 transmission && \ + adduser -D -u 1000 -G transmission transmission && \ + mkdir -p /config /downloads/complete /downloads/incomplete && \ + chown -R transmission:transmission /config /downloads + +COPY --chmod=755 start.sh /start.sh + +EXPOSE 9091 51413/tcp 51413/udp + +VOLUME ["/config", "/downloads"] + +ENTRYPOINT ["/start.sh"] diff --git a/containers/transmission/start.sh b/containers/transmission/start.sh new file mode 100644 index 0000000..d49f1bb --- /dev/null +++ b/containers/transmission/start.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +# Handle PUID/PGID like linuxserver images +PUID=${PUID:-1000} +PGID=${PGID:-1000} + +# Update transmission user UID/GID if different from default +if [ "$PUID" != "1000" ] || [ "$PGID" != "1000" ]; then + echo "Updating transmission user to UID=$PUID GID=$PGID" + deluser transmission 2>/dev/null || true + delgroup transmission 2>/dev/null || true + addgroup -g "$PGID" transmission + adduser -D -u "$PUID" -G transmission transmission +fi + +# Ensure directories exist with correct ownership +mkdir -p /config /downloads/complete /downloads/incomplete +chown -R transmission:transmission /config /downloads + +# Create default config if it doesn't exist +CONFIG_FILE="/config/settings.json" +if [ ! -f "$CONFIG_FILE" ]; then + echo "Creating default configuration..." + cat > "$CONFIG_FILE" << 'EOF' +{ + "download-dir": "/downloads/complete", + "incomplete-dir": "/downloads/incomplete", + "incomplete-dir-enabled": true, + "rpc-enabled": true, + "rpc-bind-address": "0.0.0.0", + "rpc-port": 9091, + "rpc-whitelist-enabled": false, + "rpc-host-whitelist-enabled": false, + "peer-port": 51413, + "watch-dir-enabled": false, + "umask": 2 +} +EOF + chown transmission:transmission "$CONFIG_FILE" +fi + +# Set timezone +if [ -n "$TZ" ]; then + ln -sf "/usr/share/zoneinfo/$TZ" /etc/localtime +fi + +echo "Starting transmission-daemon..." +exec su-exec transmission transmission-daemon \ + --foreground \ + --config-dir /config \ + --log-level=info