From 04c5b79f84357ed649f81ab7d8a5814f27d71a14 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 13:13:10 +0100 Subject: [PATCH 01/12] Add a Dockerfile to build a Alpine based version --- Dockerfile.alpine | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Dockerfile.alpine diff --git a/Dockerfile.alpine b/Dockerfile.alpine new file mode 100644 index 000000000..4b49fa467 --- /dev/null +++ b/Dockerfile.alpine @@ -0,0 +1,107 @@ +FROM alpine:3.7 +# MAINTAINER Kristian Haugene + +VOLUME /data +VOLUME /config + +RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ + && cat /etc/apk/repositories \ + && apk --no-cache add dockerize@testing ufw@testing sudo iputils shadow wget git unzip transmission-cli transmission-daemon openvpn dumb-init \ + && mkdir -p /opt \ + && wget https://github.com/Secretmapper/combustion/archive/release.zip \ + && unzip release.zip -d /opt/transmission-ui/ \ + && rm release.zip \ + && git clone git://github.com/endor/kettu.git /opt/transmission-ui/kettu \ + && rm -rf /tmp/* /var/tmp/* \ + && groupmod -g 1000 users \ + && useradd -u 911 -U -d /config -s /bin/false abc \ + && usermod -G users abc \ + && echo done + +ADD openvpn/ /etc/openvpn/ +ADD transmission/ /etc/transmission/ + +ENV OPENVPN_USERNAME=**None** \ + OPENVPN_PASSWORD=**None** \ + OPENVPN_PROVIDER=**None** \ + TRANSMISSION_ALT_SPEED_DOWN=50 \ + TRANSMISSION_ALT_SPEED_ENABLED=false \ + TRANSMISSION_ALT_SPEED_TIME_BEGIN=540 \ + TRANSMISSION_ALT_SPEED_TIME_DAY=127 \ + TRANSMISSION_ALT_SPEED_TIME_ENABLED=false \ + TRANSMISSION_ALT_SPEED_TIME_END=1020 \ + TRANSMISSION_ALT_SPEED_UP=50 \ + TRANSMISSION_BIND_ADDRESS_IPV4=0.0.0.0 \ + TRANSMISSION_BIND_ADDRESS_IPV6=:: \ + TRANSMISSION_BLOCKLIST_ENABLED=false \ + TRANSMISSION_BLOCKLIST_URL=http://www.example.com/blocklist \ + TRANSMISSION_CACHE_SIZE_MB=4 \ + TRANSMISSION_DHT_ENABLED=true \ + TRANSMISSION_DOWNLOAD_DIR=/data/completed \ + TRANSMISSION_DOWNLOAD_LIMIT=100 \ + TRANSMISSION_DOWNLOAD_LIMIT_ENABLED=0 \ + TRANSMISSION_DOWNLOAD_QUEUE_ENABLED=true \ + TRANSMISSION_DOWNLOAD_QUEUE_SIZE=5 \ + TRANSMISSION_ENCRYPTION=1 \ + TRANSMISSION_IDLE_SEEDING_LIMIT=30 \ + TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED=false \ + TRANSMISSION_INCOMPLETE_DIR=/data/incomplete \ + TRANSMISSION_INCOMPLETE_DIR_ENABLED=true \ + TRANSMISSION_LPD_ENABLED=false \ + TRANSMISSION_MAX_PEERS_GLOBAL=200 \ + TRANSMISSION_MESSAGE_LEVEL=2 \ + TRANSMISSION_PEER_CONGESTION_ALGORITHM= \ + TRANSMISSION_PEER_ID_TTL_HOURS=6 \ + TRANSMISSION_PEER_LIMIT_GLOBAL=200 \ + TRANSMISSION_PEER_LIMIT_PER_TORRENT=50 \ + TRANSMISSION_PEER_PORT=51413 \ + TRANSMISSION_PEER_PORT_RANDOM_HIGH=65535 \ + TRANSMISSION_PEER_PORT_RANDOM_LOW=49152 \ + TRANSMISSION_PEER_PORT_RANDOM_ON_START=false \ + TRANSMISSION_PEER_SOCKET_TOS=default \ + TRANSMISSION_PEX_ENABLED=true \ + TRANSMISSION_PORT_FORWARDING_ENABLED=false \ + TRANSMISSION_PREALLOCATION=1 \ + TRANSMISSION_PREFETCH_ENABLED=1 \ + TRANSMISSION_QUEUE_STALLED_ENABLED=true \ + TRANSMISSION_QUEUE_STALLED_MINUTES=30 \ + TRANSMISSION_RATIO_LIMIT=2 \ + TRANSMISSION_RATIO_LIMIT_ENABLED=false \ + TRANSMISSION_RENAME_PARTIAL_FILES=true \ + TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false \ + TRANSMISSION_RPC_BIND_ADDRESS=0.0.0.0 \ + TRANSMISSION_RPC_ENABLED=true \ + TRANSMISSION_RPC_PASSWORD=password \ + TRANSMISSION_RPC_PORT=9091 \ + TRANSMISSION_RPC_URL=/transmission/ \ + TRANSMISSION_RPC_USERNAME=username \ + TRANSMISSION_RPC_WHITELIST=127.0.0.1 \ + TRANSMISSION_RPC_WHITELIST_ENABLED=false \ + TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED=true \ + TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED=false \ + TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME= \ + TRANSMISSION_SEED_QUEUE_ENABLED=false \ + TRANSMISSION_SEED_QUEUE_SIZE=10 \ + TRANSMISSION_SPEED_LIMIT_DOWN=100 \ + TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED=false \ + TRANSMISSION_SPEED_LIMIT_UP=100 \ + TRANSMISSION_SPEED_LIMIT_UP_ENABLED=false \ + TRANSMISSION_START_ADDED_TORRENTS=true \ + TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES=false \ + TRANSMISSION_UMASK=2 \ + TRANSMISSION_UPLOAD_LIMIT=100 \ + TRANSMISSION_UPLOAD_LIMIT_ENABLED=0 \ + TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT=14 \ + TRANSMISSION_UTP_ENABLED=true \ + TRANSMISSION_WATCH_DIR=/data/watch \ + TRANSMISSION_WATCH_DIR_ENABLED=true \ + TRANSMISSION_HOME=/data/transmission-home \ + ENABLE_UFW=false \ + TRANSMISSION_WEB_UI= \ + PUID= \ + PGID= \ + TRANSMISSION_WEB_HOME= + +# Expose port and run +EXPOSE 9091 +CMD ["dumb-init", "/etc/openvpn/start.sh"] From b894215d147821cb09122c452d0012d53b46e7c8 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:13:29 +0100 Subject: [PATCH 02/12] Remove sudo dependency --- transmission/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmission/start.sh b/transmission/start.sh index 456a43faf..de19c3fa3 100755 --- a/transmission/start.sh +++ b/transmission/start.sh @@ -39,7 +39,7 @@ fi . /etc/transmission/userSetup.sh echo "STARTING TRANSMISSION" -exec sudo -E -u ${RUN_AS} /usr/bin/transmission-daemon -g ${TRANSMISSION_HOME} --logfile ${TRANSMISSION_HOME}/transmission.log & +exec su --preserve-environment ${RUN_AS} -c "/usr/bin/transmission-daemon -g ${TRANSMISSION_HOME} --logfile ${TRANSMISSION_HOME}/transmission.log" & if [ "$OPENVPN_PROVIDER" = "PIA" ] then From 2dd1dbd141f337a01291968ebef8b8b2e216b868 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:14:02 +0100 Subject: [PATCH 03/12] Install UFW at runtime if needed only --- openvpn/start.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openvpn/start.sh b/openvpn/start.sh index ee6bde4f9..eacbf6d9b 100755 --- a/openvpn/start.sh +++ b/openvpn/start.sh @@ -50,6 +50,8 @@ dockerize -template /etc/transmission/environment-variables.tmpl:/etc/transmissi TRANSMISSION_CONTROL_OPTS="--script-security 2 --up-delay --up /etc/transmission/start.sh --down /etc/transmission/stop.sh" if [ "true" = "$ENABLE_UFW" ]; then + apk add --no-cache ufw@testing + # Enable firewall echo "enabling firewall" sed -i -e s/IPV6=yes/IPV6=no/ /etc/default/ufw From 39435df09dc6b910fbedada415888f4d591186ae Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:14:40 +0100 Subject: [PATCH 04/12] Remove useless final echo --- Dockerfile.alpine | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 4b49fa467..7bed48a6c 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -15,8 +15,7 @@ RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/ap && rm -rf /tmp/* /var/tmp/* \ && groupmod -g 1000 users \ && useradd -u 911 -U -d /config -s /bin/false abc \ - && usermod -G users abc \ - && echo done + && usermod -G users abc ADD openvpn/ /etc/openvpn/ ADD transmission/ /etc/transmission/ From a586ceacd610d7b730770666ce2c5dc01858de57 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:15:30 +0100 Subject: [PATCH 05/12] Reduce dependency chain --- Dockerfile.alpine | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 7bed48a6c..1494b9164 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -6,12 +6,11 @@ VOLUME /config RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ && cat /etc/apk/repositories \ - && apk --no-cache add dockerize@testing ufw@testing sudo iputils shadow wget git unzip transmission-cli transmission-daemon openvpn dumb-init \ - && mkdir -p /opt \ - && wget https://github.com/Secretmapper/combustion/archive/release.zip \ - && unzip release.zip -d /opt/transmission-ui/ \ - && rm release.zip \ - && git clone git://github.com/endor/kettu.git /opt/transmission-ui/kettu \ + && apk --no-cache add dockerize@testing dumb-init openvpn shadow transmission-daemon \ + && mkdir -p /opt/transmission-ui \ + && wget -qO- https://github.com/Secretmapper/combustion/archive/release.tar.gz | tar xz -C /opt/transmission-ui \ + && mkdir -p /opt/transmission-ui/kettu \ + && wget -qO- https://github.com/endor/kettu/archive/master.tar.gz | tar xz -C /opt/transmission-ui/kettu \ && rm -rf /tmp/* /var/tmp/* \ && groupmod -g 1000 users \ && useradd -u 911 -U -d /config -s /bin/false abc \ From 37994734a50c37f39c94d5ecebc60a7374719492 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:16:19 +0100 Subject: [PATCH 06/12] Remove unecessary file reading --- Dockerfile.alpine | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 1494b9164..ff5f51698 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -5,7 +5,6 @@ VOLUME /data VOLUME /config RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ - && cat /etc/apk/repositories \ && apk --no-cache add dockerize@testing dumb-init openvpn shadow transmission-daemon \ && mkdir -p /opt/transmission-ui \ && wget -qO- https://github.com/Secretmapper/combustion/archive/release.tar.gz | tar xz -C /opt/transmission-ui \ From f65408126d66bd2b93fe1daa58e2318e83a3f567 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:18:22 +0100 Subject: [PATCH 07/12] Regroup necessary directories creation --- Dockerfile.alpine | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index ff5f51698..79879814f 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -6,9 +6,8 @@ VOLUME /config RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ && apk --no-cache add dockerize@testing dumb-init openvpn shadow transmission-daemon \ - && mkdir -p /opt/transmission-ui \ + && mkdir -p /opt/transmission-ui/combustion-release /opt/transmission-ui/kettu \ && wget -qO- https://github.com/Secretmapper/combustion/archive/release.tar.gz | tar xz -C /opt/transmission-ui \ - && mkdir -p /opt/transmission-ui/kettu \ && wget -qO- https://github.com/endor/kettu/archive/master.tar.gz | tar xz -C /opt/transmission-ui/kettu \ && rm -rf /tmp/* /var/tmp/* \ && groupmod -g 1000 users \ From 74514019805465aadccd93e63011c799775985c0 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:52:47 +0100 Subject: [PATCH 08/12] Simplify transmission stop script --- transmission/stop.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmission/stop.sh b/transmission/stop.sh index 36f6f5104..216fe5e19 100755 --- a/transmission/stop.sh +++ b/transmission/stop.sh @@ -1,3 +1,3 @@ #! /bin/sh -kill $(ps aux | grep transmission-daemon | grep -v grep | awk '{print $2}') +kill $(pidof transmission-daemon) From d6cc30e9f57da66d8f69efbb2936931bd25c46ce Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:53:09 +0100 Subject: [PATCH 09/12] Install UFW only if needed --- openvpn/start.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openvpn/start.sh b/openvpn/start.sh index eacbf6d9b..3ff4860dd 100755 --- a/openvpn/start.sh +++ b/openvpn/start.sh @@ -50,7 +50,11 @@ dockerize -template /etc/transmission/environment-variables.tmpl:/etc/transmissi TRANSMISSION_CONTROL_OPTS="--script-security 2 --up-delay --up /etc/transmission/start.sh --down /etc/transmission/stop.sh" if [ "true" = "$ENABLE_UFW" ]; then - apk add --no-cache ufw@testing + if [ ! -e ufw ]; then + echo "UFW not found, installing" + echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories + apk add --no-cache ip6tables ufw@testing + fi # Enable firewall echo "enabling firewall" From 91c450ba62cb1070ffd623c4e6b14835b4ab923b Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 15:53:32 +0100 Subject: [PATCH 10/12] Get dockerize from Git instead of Alpine repository --- Dockerfile.alpine | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 79879814f..dee6557d0 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -4,10 +4,14 @@ FROM alpine:3.7 VOLUME /data VOLUME /config -RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ - && apk --no-cache add dockerize@testing dumb-init openvpn shadow transmission-daemon \ +ENV DOCKERIZE_VERSION=v0.6.0 +RUN apk --no-cache add dumb-init openvpn shadow transmission-daemon \ + && echo "Install dockerize $DOCKERIZE_VERSION" \ + && wget -qO- https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz | tar xz -C /usr/bin \ && mkdir -p /opt/transmission-ui/combustion-release /opt/transmission-ui/kettu \ + && echo "Install Combustion" \ && wget -qO- https://github.com/Secretmapper/combustion/archive/release.tar.gz | tar xz -C /opt/transmission-ui \ + && echo "Install kettu" \ && wget -qO- https://github.com/endor/kettu/archive/master.tar.gz | tar xz -C /opt/transmission-ui/kettu \ && rm -rf /tmp/* /var/tmp/* \ && groupmod -g 1000 users \ From e68e8c36601f863914a6c80e97a2ee58e4a0b826 Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 18:11:37 +0100 Subject: [PATCH 11/12] Remove UFW installation at runtime --- openvpn/start.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/openvpn/start.sh b/openvpn/start.sh index 3ff4860dd..ee6bde4f9 100755 --- a/openvpn/start.sh +++ b/openvpn/start.sh @@ -50,12 +50,6 @@ dockerize -template /etc/transmission/environment-variables.tmpl:/etc/transmissi TRANSMISSION_CONTROL_OPTS="--script-security 2 --up-delay --up /etc/transmission/start.sh --down /etc/transmission/stop.sh" if [ "true" = "$ENABLE_UFW" ]; then - if [ ! -e ufw ]; then - echo "UFW not found, installing" - echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories - apk add --no-cache ip6tables ufw@testing - fi - # Enable firewall echo "enabling firewall" sed -i -e s/IPV6=yes/IPV6=no/ /etc/default/ufw From 6e0c44e68294e6a2f6b6b08e88fd586239e8194a Mon Sep 17 00:00:00 2001 From: e7d Date: Fri, 19 Jan 2018 18:11:56 +0100 Subject: [PATCH 12/12] Install UFW with dockerfile --- Dockerfile.alpine | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index dee6557d0..ff43ab7f2 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -5,7 +5,8 @@ VOLUME /data VOLUME /config ENV DOCKERIZE_VERSION=v0.6.0 -RUN apk --no-cache add dumb-init openvpn shadow transmission-daemon \ +RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ + && apk --no-cache add dumb-init ip6tables ufw@testing openvpn shadow transmission-daemon \ && echo "Install dockerize $DOCKERIZE_VERSION" \ && wget -qO- https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz | tar xz -C /usr/bin \ && mkdir -p /opt/transmission-ui/combustion-release /opt/transmission-ui/kettu \