From 1b35543bc85e34fceeca8568d9751675199ee3a4 Mon Sep 17 00:00:00 2001 From: mikenye Date: Sat, 27 Apr 2019 19:24:48 +0800 Subject: [PATCH] modified: Dockerfile new file: build_and_push.sh modified: init Script build & tag process. Make youtube-dl run as regular user. --- docker/Dockerfile | 7 ++++--- docker/build_and_push.sh | 42 ++++++++++++++++++++++++++++++++++++++++ docker/init | 25 ++++++++++++------------ 3 files changed, 59 insertions(+), 15 deletions(-) create mode 100755 docker/build_and_push.sh mode change 100644 => 100755 docker/init diff --git a/docker/Dockerfile b/docker/Dockerfile index 57af02d3c..635d30474 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -35,16 +35,17 @@ FROM alpine:3.9 as final # Copy youtube-dl binary and manpage into container from builder container COPY --from=builder_ytdl /usr/local/bin/youtube-dl /usr/local/bin/youtube-dl COPY --from=builder_ytdl /usr/local/man/man1/youtube-dl.1 /usr/local/man/man1/youtube-dl.1 -# Install & configure prerequisites for youtube-dl +# Install & configure s6 overlay, then prerequisites for youtube-dl RUN apk update && \ apk add ffmpeg \ rtmpdump \ mplayer \ mpv \ - python3 && \ + python3 \ + bash && \ ln -s /usr/bin/python3 /usr/bin/python && \ youtube-dl --version && \ - rm -rf /var/cache/apk/* + rm -rf /var/cache/apk/* /tmp/* # Copy init script, set workdir & entrypoint COPY init /init WORKDIR /workdir diff --git a/docker/build_and_push.sh b/docker/build_and_push.sh new file mode 100755 index 000000000..96fe93265 --- /dev/null +++ b/docker/build_and_push.sh @@ -0,0 +1,42 @@ +#!/bin/bash -x + +# Build "latest" +docker build . -t ytdl-org/youtube-dl:latest +build_exit=$? + + +# Get version of latest container +# Repeat as running straight after the build can give a 'bad interpreter: Text file busy' error +n=0 +until [ $n -ge 5 ] +do + build_version=$(docker run --rm -ti ytdl-org/youtube-dl --version) + if [ $? -eq 0 ]; then + build_version=$(echo $build_version | sed 's/\r$//') + break + fi + n=$[$n+1] + sleep 15 +done +if [ $n -ge 5 ]; then + echo "Failed when trying to get youtube-dl version in latest container :(" + exit 1 +fi + +# If the build was successful, then we can tag with current version +if [ $build_exit -eq 0 ]; then + docker tag ytdl-org/youtube-dl:latest ytdl-org/youtube-dl:$build_version + tag_exit=$? +fi + +if [ $build_exit -eq 0 ]; then + if [ $tag_exit -eq 0 ]; then + # If building and tagging was successful, then push + docker push ytdl-org/youtube-dl:latest + docker push ytdl-org/youtube-dl:$build_version + exit 0 + fi +fi + +echo "Something went wrong..." +exit 1 diff --git a/docker/init b/docker/init old mode 100644 new mode 100755 index eed39ad65..2fe9012bd --- a/docker/init +++ b/docker/init @@ -1,16 +1,17 @@ -#!/bin/sh +#!/bin/bash + +export YOUTUBEDLARGS=$@ + +YOUTUBEDLPGID=${PGID:-1000} +YOUTUBEDLPUID=${PUID:-1000} # Create dockeruser user/group -addgroup -g $PGID dockeruser -adduser -D -u $PUID -G dockeruser -h /home/dockeruser dockeruser -chown $PUID:$PGID /home/dockeruser - -# Change ownership of youtube-dl and set sticky bit so youtube-dl runs as dockeruser (rootless operation) -chown $PUID:$PGID `which youtube-dl` -chmod u+s,g+s `which youtube-dl` - -# Ensure .netrc has correct permissions (if present) -chown root:root /root/.netrc +addgroup -g $YOUTUBEDLPGID dockeruser +adduser -D -u $YOUTUBEDLPUID -G dockeruser -h /home/dockeruser dockeruser +chown $YOUTUBEDLPUID:$YOUTUBEDLPGID /home/dockeruser +export HOME=/home/dockeruser # Run youtube-dl with remainder of command line arguments -youtube-dl $@ +su -m dockeruser <<'EOF' +youtube-dl $YOUTUBEDLARGS +EOF