diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 8140f07..e37d80d 100755 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -18,7 +18,7 @@ jobs: fi echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER\". ****" echo "**** Retrieving external version ****" - EXT_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/v3.15/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \ + EXT_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \ && awk '/^P:'"transmission-daemon"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then echo "**** Can't retrieve external version, exiting ****" diff --git a/Dockerfile b/Dockerfile index f357c75..3fc7dcf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:3.15 +FROM ghcr.io/linuxserver/baseimage-alpine:3.16 ARG UNRAR_VERSION=6.1.7 ARG BUILD_DATE @@ -16,9 +16,7 @@ RUN \ echo "**** install packages ****" && \ apk add --no-cache \ ca-certificates \ - curl \ findutils \ - jq \ openssl \ p7zip \ python3 \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 9448d6a..8cfdc7b 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,4 +1,4 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.15 +FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.16 ARG UNRAR_VERSION=6.1.7 ARG BUILD_DATE @@ -16,9 +16,7 @@ RUN \ echo "**** install packages ****" && \ apk add --no-cache \ ca-certificates \ - curl \ findutils \ - jq \ openssl \ p7zip \ python3 \ diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 6e9a893..3045372 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -1,4 +1,4 @@ -FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-3.15 +FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-3.16 ARG UNRAR_VERSION=6.1.7 ARG BUILD_DATE @@ -16,9 +16,7 @@ RUN \ echo "**** install packages ****" && \ apk add --no-cache \ ca-certificates \ - curl \ findutils \ - jq \ openssl \ p7zip \ python3 \ diff --git a/Jenkinsfile b/Jenkinsfile index df4b03e..f78ff2b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -25,8 +25,8 @@ pipeline { DEV_DOCKERHUB_IMAGE = 'lsiodev/transmission' PR_DOCKERHUB_IMAGE = 'lspipepr/transmission' DIST_IMAGE = 'alpine' - DIST_TAG = '3.15' - DIST_REPO = 'http://dl-cdn.alpinelinux.org/alpine/v3.15/community/' + DIST_TAG = '3.16' + DIST_REPO = 'http://dl-cdn.alpinelinux.org/alpine/v3.16/community/' DIST_REPO_PACKAGES = 'transmission-daemon' MULTIARCH='true' CI='true' diff --git a/README.md b/README.md index a2ed4a8..6e69164 100644 --- a/README.md +++ b/README.md @@ -275,6 +275,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **02.11.22:** - Rebase to Alpine 3.16, migrate to s6v3. * **12.08.22:** - Bump unrar to 6.1.7. * **03.04.22:** - Add Transmissionic as a UI option. * **21.02.22:** - Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium diff --git a/jenkins-vars.yml b/jenkins-vars.yml index 1cd4daa..9c6d202 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -15,8 +15,8 @@ repo_vars: - DEV_DOCKERHUB_IMAGE = 'lsiodev/transmission' - PR_DOCKERHUB_IMAGE = 'lspipepr/transmission' - DIST_IMAGE = 'alpine' - - DIST_TAG = '3.15' - - DIST_REPO = 'http://dl-cdn.alpinelinux.org/alpine/v3.15/community/' + - DIST_TAG = '3.16' + - DIST_REPO = 'http://dl-cdn.alpinelinux.org/alpine/v3.16/community/' - DIST_REPO_PACKAGES = 'transmission-daemon' - MULTIARCH='true' - CI='true' diff --git a/readme-vars.yml b/readme-vars.yml index 7b20257..f8559af 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -83,6 +83,7 @@ app_setup_block: | # changelog changelogs: + - { date: "02.11.22:", desc: "Rebase to Alpine 3.16, migrate to s6v3." } - { date: "12.08.22:", desc: "Bump unrar to 6.1.7." } - { date: "03.04.22:", desc: "Add Transmissionic as a UI option." } - { date: "21.02.22:", desc: "Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium" } diff --git a/root/app/blocklist-update.sh b/root/app/blocklist-update.sh index 5c11dc4..5ebabcd 100755 --- a/root/app/blocklist-update.sh +++ b/root/app/blocklist-update.sh @@ -2,10 +2,10 @@ BLOCKLIST_ENABLED=$(jq -r '.["blocklist-enabled"]' /config/settings.json) -if [ "$BLOCKLIST_ENABLED" == true ]; then - if [ -n "$USER" ] && [ -n "$PASS" ]; then - /usr/bin/transmission-remote -n "$USER":"$PASS" --blocklist-update - else - /usr/bin/transmission-remote --blocklist-update - fi +if [[ "$BLOCKLIST_ENABLED" == true ]]; then + if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then + /usr/bin/transmission-remote -n "$USER":"$PASS" --blocklist-update + else + /usr/bin/transmission-remote --blocklist-update + fi fi diff --git a/root/etc/cont-init.d/20-config b/root/etc/cont-init.d/20-config deleted file mode 100644 index 3e908b6..0000000 --- a/root/etc/cont-init.d/20-config +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/with-contenv bash - -# make folders -mkdir -p \ - /downloads/{complete,incomplete} /watch - -# copy config -[[ ! -f /config/settings.json ]] && cp \ - /defaults/settings.json /config/settings.json - -if [ ! -z "$USER" ] && [ ! -z "$PASS" ]; then - sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": true,' /config/settings.json - sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json - sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json -else - sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": false,' /config/settings.json - sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json - sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json -fi - -if [ ! -z "$WHITELIST" ]; then - sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": true,' /config/settings.json - sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json -else - sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": false,' /config/settings.json - sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json -fi - -if [ ! -z "$HOST_WHITELIST" ]; then - sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": true,' /config/settings.json - sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json -else - sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": false,' /config/settings.json - sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json -fi - -if [ ! -z "${PEERPORT}" ]; then - sed -i "/\"peer-port\"/c\ \"peer-port\": ${PEERPORT}," /config/settings.json - sed -i '/peer-port-random-on-start/c\ "peer-port-random-on-start": false,' /config/settings.json -fi - - -# permissions -chown abc:abc \ - /config/settings.json \ - /downloads \ - /downloads/complete \ - /downloads/incomplete \ - /watch diff --git a/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-transmission-config b/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-transmission-config new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/init-transmission-config/dependencies.d/init-config b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/dependencies.d/init-config new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/init-transmission-config/run b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/run new file mode 100755 index 0000000..f6be0fb --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/run @@ -0,0 +1,49 @@ +#!/usr/bin/with-contenv bash + +# make folders +mkdir -p \ + /downloads/{complete,incomplete} /watch + +# copy config +if [[ ! -f /config/settings.json ]]; then + cp /defaults/settings.json /config/settings.json +fi + +if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then + sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": true,' /config/settings.json + sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json + sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json +else + sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": false,' /config/settings.json + sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json + sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json +fi + +if [[ -n "$WHITELIST" ]]; then + sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": true,' /config/settings.json + sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json +else + sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": false,' /config/settings.json + sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json +fi + +if [[ -n "$HOST_WHITELIST" ]]; then + sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": true,' /config/settings.json + sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json +else + sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": false,' /config/settings.json + sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json +fi + +if [[ -n "${PEERPORT}" ]]; then + sed -i "/\"peer-port\"/c\ \"peer-port\": ${PEERPORT}," /config/settings.json + sed -i '/peer-port-random-on-start/c\ "peer-port-random-on-start": false,' /config/settings.json +fi + +# permissions +chown abc:abc \ + /config/settings.json \ + /downloads \ + /downloads/complete \ + /downloads/incomplete \ + /watch diff --git a/root/etc/s6-overlay/s6-rc.d/init-transmission-config/type b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/type @@ -0,0 +1 @@ +oneshot diff --git a/root/etc/s6-overlay/s6-rc.d/init-transmission-config/up b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/up new file mode 100644 index 0000000..5b4dddc --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-transmission-config/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-transmission-config/run diff --git a/root/etc/s6-overlay/s6-rc.d/svc-cron/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-cron/dependencies.d/init-services new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-cron/run b/root/etc/s6-overlay/s6-rc.d/svc-cron/run new file mode 100644 index 0000000..2afc3b0 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-cron/run @@ -0,0 +1,4 @@ +#!/usr/bin/with-contenv bash + +exec \ + /usr/sbin/crond -f -S -l 0 -c /etc/crontabs diff --git a/root/etc/s6-overlay/s6-rc.d/svc-cron/type b/root/etc/s6-overlay/s6-rc.d/svc-cron/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-cron/type @@ -0,0 +1 @@ +longrun diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-transmission/dependencies.d/init-services new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/down b/root/etc/s6-overlay/s6-rc.d/svc-transmission/down new file mode 100644 index 0000000..fceb1f7 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-transmission/down @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/svc-transmission/finish \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/finish b/root/etc/s6-overlay/s6-rc.d/svc-transmission/finish new file mode 100755 index 0000000..304db89 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-transmission/finish @@ -0,0 +1,11 @@ +#!/usr/bin/with-contenv bash + +pid=$(pidof transmission-daemon) + +if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then + /usr/bin/transmission-remote -n "$USER":"$PASS" --exit +else + /usr/bin/transmission-remote --exit +fi + +tail --pid=${pid} -f /dev/null diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/notification-fd b/root/etc/s6-overlay/s6-rc.d/svc-transmission/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-transmission/notification-fd @@ -0,0 +1 @@ +3 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/run b/root/etc/s6-overlay/s6-rc.d/svc-transmission/run new file mode 100755 index 0000000..2be0fab --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-transmission/run @@ -0,0 +1,5 @@ +#!/usr/bin/with-contenv bash + +s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 9091" \ + s6-setuidgid abc /usr/bin/transmission-daemon \ + -g /config -c /watch -f diff --git a/root/etc/s6-overlay/s6-rc.d/svc-transmission/type b/root/etc/s6-overlay/s6-rc.d/svc-transmission/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-transmission/type @@ -0,0 +1 @@ +longrun diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-transmission-config b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-transmission-config new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-cron b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-cron new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-transmission b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-transmission new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/services.d/cron/run b/root/etc/services.d/cron/run deleted file mode 100755 index bf12678..0000000 --- a/root/etc/services.d/cron/run +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/with-contenv bash - -exec \ - /usr/sbin/crond -f -S -l 0 -c /etc/crontabs diff --git a/root/etc/services.d/transmission/run b/root/etc/services.d/transmission/run deleted file mode 100755 index b8c4934..0000000 --- a/root/etc/services.d/transmission/run +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/with-contenv bash - -_term() { - echo "Caught SIGTERM signal!" - echo "Tell the transmission session to shut down." - pid=$(pidof transmission-daemon) - if [ ! -z "$USER" ] && [ ! -z "$PASS" ]; then - /usr/bin/transmission-remote -n "$USER":"$PASS" --exit - else - /usr/bin/transmission-remote --exit - fi - # terminate when the transmission-daemon process dies - tail --pid=${pid} -f /dev/null -} - - trap _term SIGTERM - - s6-setuidgid abc /usr/bin/transmission-daemon \ - -g /config -c /watch -f & - - wait