From b5b10c7af901cd5f18c1153244563786f92dc229 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 12:32:33 -0500 Subject: [PATCH 1/7] Delete Dockerfile.complex --- Dockerfile.complex | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 Dockerfile.complex diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index 4463d83..0000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,21 +0,0 @@ -## Buildstage ## -FROM lsiobase/alpine:3.9 as buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb" - -# copy local files -COPY root/ /root-layer/ - -## Single layer deployed image ## -FROM scratch - -# Add files from buildstage -COPY --from=buildstage /root-layer/ / From f7e198b59e70f81e9258ed10b1fc642135712973 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 12:56:08 -0500 Subject: [PATCH 2/7] Update Dockerfile --- Dockerfile | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4ece5e8..58f4720 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,44 @@ +## Buildstage ## +FROM lsiobase/ubuntu:xenial as buildstage + +# Build arguments +ARG BUILD_DATE +ARG VCS_REF +ARG VERSION +ARG DOCKERHUB + +# Build-time metadata as defined at http://label-schema.org +LABEL org.label-schema.name="${DOCKERHUB}:latest" \ + org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ + org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ + org.label-schema.version=$VERSION \ + org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.vendor="TheCaptain989" \ + org.label-schema.schema-version="1.0" \ + org.label-schema.vcs-url="https://github.com/TheCaptain989/radarr-striptracks" \ + org.label-schema.vcs-ref=$VCS_REF + +# Build-time metadata as defined at https://github.com/opencontainers/image-spec +LABEL org.opencontainers.image.title="${DOCKERHUB}:latest" \ + org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ + org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ + org.opencontainers.image.version=$VERSION \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.vendor="TheCaptain989" \ + org.opencontainers.image.source="https://github.com/TheCaptain989/radarr-striptracks" \ + org.opencontainers.image.revision=$VCS_REF + +# Add version number for use in container init script +RUN mkdir -p /root-layer/etc && \ + echo "$VERSION" > /root-layer/etc/version.tc989 + +# Stage local files +COPY root/ /root-layer/ + +## Single layer deployed image ## FROM scratch -LABEL maintainer="username" +LABEL maintainer="TheCaptain989" -# copy local files -COPY root/ / +# Copy files from buildstage +COPY --from=buildstage /root-layer/ / From 5d0d4045d02635cecaa6c289ab83154363a7e07d Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 12:56:57 -0500 Subject: [PATCH 3/7] Delete run --- root/etc/services.d/sshvpn/run | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 root/etc/services.d/sshvpn/run diff --git a/root/etc/services.d/sshvpn/run b/root/etc/services.d/sshvpn/run deleted file mode 100644 index 7d49e79..0000000 --- a/root/etc/services.d/sshvpn/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/with-contenv bash - -sshuttle --dns --remote root@${HOST}:${PORT} 0/0 -x 172.17.0.0/16 From 85ef895b43fa6720a1315d3d585c339ba388e6ae Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 20:02:49 -0500 Subject: [PATCH 4/7] radarr: striptracks initial release mkvtoolnix --- .travis.yml | 32 +- Dockerfile | 10 +- README.md | 184 +++++++- root/etc/cont-init.d/60-striptracks-init | 47 ++ root/etc/cont-init.d/98-vpn-config | 27 -- root/usr/local/bin/striptracks-dut.sh | 3 + root/usr/local/bin/striptracks-eng-debug.sh | 3 + root/usr/local/bin/striptracks-eng-jpn.sh | 3 + root/usr/local/bin/striptracks-eng.sh | 3 + root/usr/local/bin/striptracks-fre-debug.sh | 3 + root/usr/local/bin/striptracks-fre.sh | 3 + root/usr/local/bin/striptracks-ger.sh | 3 + root/usr/local/bin/striptracks-spa.sh | 3 + root/usr/local/bin/striptracks.sh | 489 ++++++++++++++++++++ 14 files changed, 765 insertions(+), 48 deletions(-) create mode 100644 root/etc/cont-init.d/60-striptracks-init delete mode 100644 root/etc/cont-init.d/98-vpn-config create mode 100644 root/usr/local/bin/striptracks-dut.sh create mode 100644 root/usr/local/bin/striptracks-eng-debug.sh create mode 100644 root/usr/local/bin/striptracks-eng-jpn.sh create mode 100644 root/usr/local/bin/striptracks-eng.sh create mode 100644 root/usr/local/bin/striptracks-fre-debug.sh create mode 100644 root/usr/local/bin/striptracks-fre.sh create mode 100644 root/usr/local/bin/striptracks-ger.sh create mode 100644 root/usr/local/bin/striptracks-spa.sh create mode 100644 root/usr/local/bin/striptracks.sh diff --git a/.travis.yml b/.travis.yml index e6e5b1f..c041d33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ language: shell branches: only: - - - #replace variables, omit brackets + - radarr-striptracks #replace variables, omit brackets services: - docker @@ -12,21 +12,43 @@ services: env: global: - DOCKERHUB="linuxserver/mods" #don't modify - - BASEIMAGE="baseimagename" #replace - - MODNAME="modname" #replace + - BASEIMAGE="radarr" #replace + - MODNAME="striptracks" #replace jobs: include: - stage: PR-BuildImage if: (type IN (pull_request)) script: + # Build variables + - VERSION=$(git describe --tags --always) + - VCS_REF=$(git rev-parse --short HEAD) + - BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Build image - - docker build --no-cache -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . + - docker build --no-cache + --build-arg VERSION=${VERSION} + --build-arg VCS_REF=${VCS_REF} + --build-arg BUILD_DATE=${BUILD_DATE} + --build-arg DOCKERHUB=${DOCKERHUB} + --build-arg BASEIMAGE=${BASEIMAGE} + --build-arg MODNAME=${MODNAME} + -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . - stage: BuildImage if: (NOT (type IN (pull_request))) script: + # Build variables + - VERSION=$(git describe --tags --always) + - VCS_REF=$(git rev-parse --short HEAD) + - BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Build image - - docker build --no-cache -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . + - docker build --no-cache + --build-arg VERSION=${VERSION} + --build-arg VCS_REF=${VCS_REF} + --build-arg BUILD_DATE=${BUILD_DATE} + --build-arg DOCKERHUB=${DOCKERHUB} + --build-arg BASEIMAGE=${BASEIMAGE} + --build-arg MODNAME=${MODNAME} + -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . - docker tag ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} ${DOCKERHUB}:${BASEIMAGE}-${MODNAME} # Login to DockerHub - echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin diff --git a/Dockerfile b/Dockerfile index 58f4720..bdb716f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,26 +6,28 @@ ARG BUILD_DATE ARG VCS_REF ARG VERSION ARG DOCKERHUB +ARG BASEIMAGE +ARG MODNAME # Build-time metadata as defined at http://label-schema.org -LABEL org.label-schema.name="${DOCKERHUB}:latest" \ +LABEL org.label-schema.name="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ org.label-schema.version=$VERSION \ org.label-schema.build-date=$BUILD_DATE \ org.label-schema.vendor="TheCaptain989" \ org.label-schema.schema-version="1.0" \ - org.label-schema.vcs-url="https://github.com/TheCaptain989/radarr-striptracks" \ + org.label-schema.vcs-url="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ org.label-schema.vcs-ref=$VCS_REF # Build-time metadata as defined at https://github.com/opencontainers/image-spec -LABEL org.opencontainers.image.title="${DOCKERHUB}:latest" \ +LABEL org.opencontainers.image.title="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.vendor="TheCaptain989" \ - org.opencontainers.image.source="https://github.com/TheCaptain989/radarr-striptracks" \ + org.opencontainers.image.source="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ org.opencontainers.image.revision=$VCS_REF # Add version number for use in container init script diff --git a/README.md b/README.md index 62f203f..6bf7440 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,177 @@ -# Rsync - Docker mod for openssh-server +A [Docker Mod](https://github.com/linuxserver/docker-mods) for the LinuxServer.io Radarr/Sonarr Docker container that adds a script to automatically strip out unwanted audio and subtitle streams, keeping only the desired languages. +Chapters, if they exist, are preserved. The Title attribute in the MKV is set to the movie title plus year (ex: `The Sting (1973)`) or the series title plus episode information (ex: `Happy! 01x01 - What Smiles Are For`). -This mod adds rsync to openssh-server, to be installed/updated during container start. +**One unified script works in both Radarr and Sonarr. Use this mod in either container!** +>**NOTE:** This mod support Linux OSes only. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +Container info: +![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks) +![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/mods/radarr-striptracks "Container Pulls") -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +# Installation +>**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. -# Mod creation instructions +1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: + `docker pull linuxserver/radarr:latest` OR + `docker pull linuxserver/sonarr:latest` -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `travis.yml`. Customize the build branch, and the vars for `BASEIMAGE` and `MODNAME`. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. +2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: + **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** + **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** + 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: + `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` + + *Example Synology Configuration* + ![striptracks](https://user-images.githubusercontent.com/11523885/95027314-1e006680-065d-11eb-9ff9-cc51648d57bd.png "Synology container settings") + + 2. Start the container. + +3. After all of the above configuration is complete, to use mkvmerge: + 1. Configure a custom script from the Radarr/Sonnar Settings->Connect screen and type the following in the **Path** field: + `/usr/local/bin/striptracks.sh` + + 2. Add the codes for the audio and subtitle languages you want to keep as **Arguments** (details in the [Syntax](./README.md#syntax) section below): + Suggested Example + **`:eng:und :eng`** + +## Usage +>**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. + +The source video can be any mkvtoolnix supported video format. The output is an MKV file with the same name. + +If you've configured the Radarr/Sonarr Recycle Bin path correctly, the original video will be moved there. +![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original video file will be deleted/overwritten and permanently lost. + +### Syntax +The script accepts two arguments and one option in the **Arguments** field: + +`[-d] ` + +The arguments are language codes in [ISO639-2](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes "List of ISO 639-2 codes") format. +These are three letter abbreviations prefixed with a colon ':', such as: + +* :eng +* :fre +* :spa + +...etc. + +Multiple codes may be concatenated, such as `:eng:spa` for both English and Spanish. + +It is suggested to use `:eng:und :eng` if you are unsure of what to choose. This will keep English and Undetermined audio and English subtitles, if they exist. +>**NOTE:** The script is smart enough to not remove the last audio track. This way you don't have to specify every possible language if you are importing a +foreign film, for example. + +The `-d` option enables debug logging. + +### Examples +``` +:eng:und :eng # keep English and Undetermined audio and English subtitles +-d :eng "" # Enable debugging, keeping English audio and no subtitles +:eng:kor:jpn :eng:spa # Keep English, Korean, and Japanese audio, and English and + Spanish subtitles +``` + +## Triggers +The only events/notification triggers that have been tested are **On Download** and **On Upgrade** + +![striptracks](https://user-images.githubusercontent.com/11523885/95027402-d0d0c480-065d-11eb-97a8-b02a011572ab.png "Radarr/Sonarr custom script settings") + +## Logs +A log file is created for the script activity called: + +`/config/logs/striptracks.txt` + +This log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Logs->Files + +Script errors will show up in both the script log and the native Radarr/Sonarr log. + +Log rotation is performed with 5 log files of 512KB each being kept. +>![warning24] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* + +___ + +## Sonarr/Radarr v3 Builds +>![warning] **Warning: Unstable Releases** ![warning] +>The Sonarr/Radarr v3 Builds are the unstable releases (Aphrodite and Phantom) of Radarr and Sonarr. Though the mod works with all versions of the container, I cannot guarantee these releases are stable. + +Important differences for Sonarr/Radarr v3 Builds +### Mod installation +Substitute the following steps for those noted in the [Installation](./README.md#installation) section above. +1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: + `docker pull linuxserver/radarr:preview` OR + `docker pull linuxserver/sonarr:preview` + +2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: + **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** + **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** + 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: + `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` + + *Example Synology Configuration* + ![striptracks](https://user-images.githubusercontent.com/11523885/95027314-1e006680-065d-11eb-9ff9-cc51648d57bd.png "Synology container settings") + + 2. Start the container. + +3. After the above configuration is complete, to use mkvmerge, configure a custom script from the Settings->Connect screen and type the following in the **Path** field: + + `/usr/local/bin/striptracks-eng.sh` + + This is a wrapper script that calls striptracks.sh with the following arguments, which keep English audio and subtitles only! + `:eng:und :eng` + + *For any other combinations of audio and subtitles you **must** either use one of the [included wrapper scripts](./README.md#included-wrapper-scripts) or + create a custom script with the codes for the languages you want to keep. See the [Syntax](./README.md#syntax) section above. + Do not put `striptracks.sh` in the **Path** field!* + +### Included Wrapper Scripts +>**NOTE:** The **Arguments** field for Custom Scripts was removed in Radarr and Sonarr v3 due to security concerns. To support options with this version and later, +a wrapper script can be manually created that will call *striptracks.sh* with the required arguments. + +For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. +You may use any of these scripts in place of the `striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. + +``` +striptracks-dut.sh # Keep Dutch audio and subtitles +striptracks-eng.sh # Keep English and Undetermined audio and English subtitles +striptracks-eng-debug.sh # Keep English and Undetermined audio and English subtitles, and enable debug logging +striptracks-eng-jpn.sh # Keep English, Japanese, and Undetermined audio and English subtitles +striptracks-fre.sh # Keep French audio and subtitles +striptracks-fre-debug.sh # Keep French audio and subtitles, and enable debug logging +striptracks-ger.sh # Keep German audio and subtitles +striptracks-spa.sh # Keep Spanish audio and subtitles +``` + +### Example Wrapper Script +To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `wrapper.sh` to `/usr/local/bin` containing the following text: +``` +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:kor:jpn :eng:spa +``` +Then put `/usr/local/bin/wrapper.sh` in the **Path** field in place of `/usr/local/bin/striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. + +### Preview Triggers +The only events/notification triggers that have been tested are **On Import** and **On Upgrade** + +![striptracks](https://user-images.githubusercontent.com/11523885/95027374-9830eb00-065d-11eb-8ef7-8d69c9795cbe.png "Radarr/Sonarr custom script settings") + +### Preview Logs +The log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Log Files + +___ + +# Credits + +This would not be possible without the following: + +[Radarr](http://radarr.video/ "Radarr homepage") +[Sonarr](http://sonarr.tv/ "Sonarr homepage") +[LinuxServer.io Radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container") container +[LinuxServer.io Sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container") container +[LinuxServer.io Docker Mods](https://hub.docker.com/r/linuxserver/mods "Docker Mods containers") project +[MKVToolNix](https://mkvtoolnix.download/ "MKVToolNix homepage") by Moritz Bunkus +The AWK script parsing mkvmerge output is adapted from Endoro's post on [VideoHelp](https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889). + +[warning]: http://files.softicons.com/download/application-icons/32x32-free-design-icons-by-aha-soft/png/32/Warning.png "Warning" +[warning24]: http://files.softicons.com/download/toolbar-icons/24x24-free-pixel-icons-by-aha-soft/png/24x24/Warning.png "Warning" diff --git a/root/etc/cont-init.d/60-striptracks-init b/root/etc/cont-init.d/60-striptracks-init new file mode 100644 index 0000000..f363fcb --- /dev/null +++ b/root/etc/cont-init.d/60-striptracks-init @@ -0,0 +1,47 @@ +#!/usr/bin/with-contenv bash + +cat <>> Striptracks Mod by TheCaptain989 <<< +Repo: https://github.com/linuxserver/docker-mods/tree/radarr-striptracks + +Version: $(cat /etc/version.tc989) +---------------- +EOF + +# Determine if setup is needed +if [ ! -f /usr/bin/mkvmerge ]; then + echo "Running first time setup." + + if [ -f /usr/bin/apt ]; then + # Ubuntu + echo "Installing MKVToolNix using apt-get" + apt-get update && \ + apt-get -y install mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + elif [ -f /sbin/apk ]; then + # Alpine + echo "Installing MKVToolNix using apk" + apk add mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + else + # Unknown + echo "Unknown package manager. Attempting to install MKVToolNix using apt-get" + apt-get update && \ + apt-get -y install mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + fi +fi + +# Change ownership +if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then + echo "Changing ownership on scripts." + chown root:users /usr/local/bin/striptracks*.sh +fi + +# Make executable +if [ ! -x /usr/local/bin/striptracks.sh ]; then + echo "Making scripts executable." + chmod +x /usr/local/bin/striptracks*.sh +fi + diff --git a/root/etc/cont-init.d/98-vpn-config b/root/etc/cont-init.d/98-vpn-config deleted file mode 100644 index a5f9127..0000000 --- a/root/etc/cont-init.d/98-vpn-config +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/with-contenv bash - -# Determine if setup is needed -if [ ! -f /usr/local/lib/python***/dist-packages/sshuttle ] && \ -[ -f /usr/bin/apt ]; then - ## Ubuntu - apt-get update - apt-get install --no-install-recommends -y \ - iptables \ - openssh-client \ - python3 \ - python3-pip - pip3 install sshuttle -fi -if [ ! -f /usr/lib/python***/site-packages/sshuttle ] && \ -[ -f /sbin/apk ]; then - # Alpine - apk add --no-cache \ - iptables \ - openssh \ - py3-pip \ - python3 - pip3 install sshuttle -fi - -chown -R root:root /root -chmod -R 600 /root/.ssh diff --git a/root/usr/local/bin/striptracks-dut.sh b/root/usr/local/bin/striptracks-dut.sh new file mode 100644 index 0000000..e2c19af --- /dev/null +++ b/root/usr/local/bin/striptracks-dut.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :dut :dut diff --git a/root/usr/local/bin/striptracks-eng-debug.sh b/root/usr/local/bin/striptracks-eng-debug.sh new file mode 100644 index 0000000..87ed2bb --- /dev/null +++ b/root/usr/local/bin/striptracks-eng-debug.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh -d :eng:und :eng diff --git a/root/usr/local/bin/striptracks-eng-jpn.sh b/root/usr/local/bin/striptracks-eng-jpn.sh new file mode 100644 index 0000000..ea37f5d --- /dev/null +++ b/root/usr/local/bin/striptracks-eng-jpn.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:jpn:und :eng diff --git a/root/usr/local/bin/striptracks-eng.sh b/root/usr/local/bin/striptracks-eng.sh new file mode 100644 index 0000000..a0eb344 --- /dev/null +++ b/root/usr/local/bin/striptracks-eng.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:und :eng diff --git a/root/usr/local/bin/striptracks-fre-debug.sh b/root/usr/local/bin/striptracks-fre-debug.sh new file mode 100644 index 0000000..918a198 --- /dev/null +++ b/root/usr/local/bin/striptracks-fre-debug.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh -d :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-fre.sh b/root/usr/local/bin/striptracks-fre.sh new file mode 100644 index 0000000..998ce43 --- /dev/null +++ b/root/usr/local/bin/striptracks-fre.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-ger.sh b/root/usr/local/bin/striptracks-ger.sh new file mode 100644 index 0000000..62047ab --- /dev/null +++ b/root/usr/local/bin/striptracks-ger.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :ger:deu :ger:deu diff --git a/root/usr/local/bin/striptracks-spa.sh b/root/usr/local/bin/striptracks-spa.sh new file mode 100644 index 0000000..92f6c4e --- /dev/null +++ b/root/usr/local/bin/striptracks-spa.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :spa :spa diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh new file mode 100644 index 0000000..9d9034b --- /dev/null +++ b/root/usr/local/bin/striptracks.sh @@ -0,0 +1,489 @@ +#!/bin/bash + +# Video remuxing script designed for use with Radarr and Sonarr +# Automatically strips out unwanted audio and subtitle streams, keeping only the desired languages. +# https://github.com/linuxserver/docker-mods/tree/radarr-striptracks + +# Adapted and corrected from Endoro's post 1/5/2014: +# https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889 +# +# Put a colon `:` in front of every language code. Expects ISO639-2 codes + +# Dependencies: +# mkvmerge +# awk +# curl +# jq +# numfmt +# stat +# nice + +# Exit codes: +# 0 - success; or test +# 1 - no video file specified on command line +# 2 - no audio language specified on command line +# 3 - no subtitle language specified on command line +# 4 - mkvmerge not found +# 5 - specified video file not found +# 6 - unable to rename video to temp video +# 10 - remuxing completed, but no output file found +# 20 - general error + +### Variables +export striptracks_script=$(basename "$0") +export striptracks_pid=$$ +export striptracks_arr_config=/config/config.xml +export striptracks_log=/config/logs/striptracks.txt +export striptracks_maxlogsize=512000 +export striptracks_maxlog=4 +export striptracks_debug=0 +export striptracks_type=$(printenv | sed -n 's/_eventtype *=.*$//p') +if [[ "${striptracks_type,,}" = "radarr" ]]; then + export striptracks_video="$radarr_moviefile_path" + export striptracks_api_endpoint="movie" + export striptracks_json_quality_root=".movieFile" + export striptracks_video_type="movie" + export striptracks_title="$radarr_movie_title ($radarr_movie_year)" +else + if [[ "${striptracks_type,,}" = "sonarr" ]]; then + export striptracks_video="$sonarr_episodefile_path" + export striptracks_api_endpoint="episodefile" + export striptracks_json_quality_root="" + export striptracks_video_type="series" + export striptracks_title="$sonarr_series_title $(numfmt --format "%02f" $sonarr_episodefile_seasonnumber)x$(numfmt --format "%02f" $sonarr_episodefile_episodenumbers) - $sonarr_episodefile_episodetitles" + fi +fi +export striptracks_api="Rescan${striptracks_video_type^}" +export striptracks_json_key="${striptracks_video_type}Id" +export striptracks_api_endpoint_idname="${striptracks_type,,}_${striptracks_api_endpoint}_id" +export striptracks_api_endpoint_id="${!striptracks_api_endpoint_idname}" +export striptracks_video_idname="${striptracks_type,,}_${striptracks_video_type}_id" +export striptracks_video_id="${!striptracks_video_idname}" +export striptracks_eventtype="${striptracks_type,,}_eventtype" +export striptracks_tempvideo="${striptracks_video}.tmp" +export striptracks_newvideo="${striptracks_video%.*}.mkv" +export striptracks_db="/config/${striptracks_type,,}.db" +if [ ! -f "$striptracks_db" ]; then + striptracks_db=/config/nzbdrone.db +fi +export striptracks_recyclebin=$(sqlite3 $striptracks_db 'SELECT Value FROM Config WHERE Key="recyclebin"') +RET=$?; [ "$RET" != 0 ] && >&2 echo "WARNING[$RET]: Unable to read recyclebin information from database \"$striptracks_db\"" + +### Functions +function usage { + usage=" +$striptracks_script +Video remuxing script designed for use with Radarr and Sonarr + +Source: https://github.com/TheCaptain989/radarr-striptracks + +Usage: + $0 [-d] + +Arguments: + audio_languages # ISO639-2 code(s) prefixed with a colon \`:\` + Multiple codes may be concatenated. + subtitle_languages # ISO639-2 code(s) prefixed with a colon \`:\` + Multiple codes may be concatenated. + +Options: + -d # enable debug logging + +Examples: + $striptracks_script :eng:und :eng # keep English and Undetermined audio and + English subtitles + $striptracks_script :eng \"\" # keep English audio and no subtitles + $striptracks_script -d :eng:kor:jpn :eng:spa # Enable debugging, keeping English, Korean, + and Japanese audio, and English and + Spanish subtitles +" + >&2 echo "$usage" +} +# Can still go over striptracks_maxlog if read line is too long +# Must include whole function in subshell for read to work! +function log {( + while read + do + echo $(date +"%Y-%-m-%-d %H:%M:%S.%1N")\|"[$striptracks_pid]$REPLY" >>"$striptracks_log" + local FILESIZE=$(stat -c %s "$striptracks_log") + if [ $FILESIZE -gt $striptracks_maxlogsize ] + then + for i in $(seq $((striptracks_maxlog-1)) -1 0); do + [ -f "${striptracks_log::-4}.$i.txt" ] && mv "${striptracks_log::-4}."{$i,$((i+1))}".txt" + done + [ -f "${striptracks_log::-4}.txt" ] && mv "${striptracks_log::-4}.txt" "${striptracks_log::-4}.0.txt" + touch "$striptracks_log" + fi + done +)} +# Inspired by https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash +function read_xml { + local IFS=\> + read -d \< ENTITY CONTENT +} +# Get video information +function get_video_info { + [ $striptracks_debug -eq 1 ] && echo "Debug|Getting video information for $striptracks_api_endpoint '$striptracks_api_endpoint_id'. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=(removed)'" | log + RESULT=$(curl -s -H "Content-Type: application/json" \ + -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM .path)" != "null" ]; then + local RET=0 + else + local RET=1 + fi + return $RET +} +# Initiate API Rescan request +function rescan { + MSG="Info|Calling ${striptracks_type^} API to rescan ${striptracks_video_type}, try #$i" + echo "$MSG" | log + [ $striptracks_debug -eq 1 ] && echo "Debug|Forcing rescan of $striptracks_json_key '$striptracks_video_id', try #$i. Calling ${striptracks_type^} API '$striptracks_api' using POST and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=(removed)'" | log + RESULT=$(curl -s -d "{name: '$striptracks_api', $striptracks_json_key: $striptracks_video_id}" -H "Content-Type: application/json" \ + -X POST http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + JOBID="$(echo $RESULT | jq -crM .id)" + if [ "$JOBID" != "null" ]; then + local RET=0 + else + local RET=1 + fi + return $RET +} +# Check result of rescan job +function check_rescan { + local i=0 + for ((i=1; i <= 15; i++)); do + [ $striptracks_debug -eq 1 ] && echo "Debug|Checking job $JOBID completion, try #$i. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=(removed)'" | log + RESULT=$(curl -s -H "Content-Type: application/json" \ + -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM .status)" = "completed" ]; then + local RET=0 + break + else + if [ "$(echo $RESULT | jq -crM .status)" = "failed" ]; then + local RET=2 + break + else + local RET=1 + sleep 1 + fi + fi + done + return $RET +} + +# Process options +while getopts ":d" opt; do + case ${opt} in + d ) # For debug purposes only + MSG="Debug|Enabling debug logging." + echo "$MSG" | log + >&2 echo "$MSG" + striptracks_debug=1 + printenv | sort | sed 's/^/Debug|/' | log + ;; + esac +done +shift $((OPTIND -1)) + +if [ -z "$1" ]; then + MSG="Error|No audio languages specified!" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 2 +fi + +if [ -z "$2" ]; then + MSG="Error|No subtitles languages specified!" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 3 +fi + +if [ ! -f "/usr/bin/mkvmerge" ]; then + MSG="Error|/usr/bin/mkvmerge is required by this script" + echo "$MSG" | log + >&2 echo "$MSG" + exit 4 +fi + +if [[ "${!striptracks_eventtype}" = "Test" ]]; then + echo "Info|${striptracks_type^} event: ${!striptracks_eventtype}" | log + echo "Info|Script was test executed successfully." | log + exit 0 +fi + +if [ -z "$striptracks_video" ]; then + MSG="Error|No video file specified! Not called from Radarr/Sonarr?" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 1 +fi + +if [ ! -f "$striptracks_video" ]; then + MSG="Error|Input file not found: \"$striptracks_video\"" + echo "$MSG" | log + >&2 echo "$MSG" + exit 5 +fi + +#### BEGIN MAIN +FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_video")) +MSG="Info|${striptracks_type^} event: ${!striptracks_eventtype}, Video: $striptracks_video, Size: $FILESIZE, AudioKeep: $1, SubsKeep: $2" +echo "$MSG" | log + +# Rename the original video file to a temporary name +[ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_video\" to \"$striptracks_tempvideo\"" | log +mv -f "$striptracks_video" "$striptracks_tempvideo" | log +RET=$?; [ "$RET" != 0 ] && { + MSG="ERROR[$RET]: Unable to rename video: \"$striptracks_video\" to temp video: \"$striptracks_tempvideo\". Halting." + echo "$MSG" | log + >&2 echo "$MSG" + exit 6 +} + +# Read in the output of mkvmerge info extraction +[ $striptracks_debug -eq 1 ] && echo "Debug|Executing: /usr/bin/mkvmerge -J \"$striptracks_tempvideo\"" | log +JSON=$(/usr/bin/mkvmerge -J "$striptracks_tempvideo") +RET=$?; [ "$RET" != 0 ] && { + MSG="ERROR[$RET]: Error executing mkvmerge." + echo "$MSG" | log + >&2 echo "$MSG" +} + +# This and the modified AWK script are a hack, and I know it. JQ is crazy hard to learn, BTW. +# Mimic the mkvmerge --identify-verbose option that has been deprecated +JSON_PROCESSED=$(echo $JSON | jq -jcrM ' +( if (.chapters | .[] | .num_entries) then + "Chapters: \(.chapters | .[] | .num_entries) entries\n" + else + "" + end +), +( .tracks | + .[] | + ( "Track ID \(.id): \(.type) (\(.codec)) [", + ( [.properties | to_entries |.[] | "\(.key):\(.value | tostring | gsub(" "; "\\s"))"] | join(" ")), + "]\n" ) +) +') +[ $striptracks_debug -eq 1 ] && echo "$JSON_PROCESSED" | awk '{print "Debug|"$0}' | log + +echo "$JSON_PROCESSED" | awk -v Debug=$striptracks_debug \ +-v OrgVideo="$striptracks_video" \ +-v TempVideo="$striptracks_tempvideo" \ +-v MKVVideo="$striptracks_newvideo" \ +-v Title="$striptracks_title" \ +-v AudioKeep="$1" \ +-v SubsKeep="$2" ' +BEGIN { + MKVMerge="/usr/bin/mkvmerge" + FS="[\t\n: ]" + IGNORECASE=1 +} +/^Track ID/ { + FieldCount=split($0, Fields) + if (Fields[1]=="Track") { + NoTr++ + Track[NoTr, "id"]=Fields[3] + Track[NoTr, "typ"]=Fields[5] + if (Fields[6]~/^\(/) { + Track[NoTr, "code"]=substr(Line,1,match(Line,/\)/)) + sub(/^[^\(]+/,"",Track[NoTr, "code"]) + } + if (Track[NoTr, "typ"]=="video") VidCnt++ + if (Track[NoTr, "typ"]=="audio") AudCnt++ + if (Track[NoTr, "typ"]=="subtitles") SubsCnt++ + for (i=6; i<=FieldCount; i++) { + if (Fields[i]=="language") Track[NoTr, "lang"]=Fields[++i] + } + } +} +/^Chapters/ { + Chapters=$3 +} +END { + if (!NoTr) { print "Error|No tracks found in \""TempVideo"\"" > "/dev/stderr"; exit } + if (!AudCnt) AudCnt=0; if (!SubsCnt) SubsCnt=0 + print "Info|Original tracks: "NoTr" (audio: "AudCnt", subtitles: "SubsCnt")" + if (Chapters) print "Info|Chapters: "Chapters + for (i=1; i<=NoTr; i++) { + if (Debug) print "Debug|i:"i,"Track ID:"Track[i,"id"],"Type:"Track[i,"typ"],"Lang:"Track[i, "lang"],"Code:"Track[i, "code"] + if (Track[i, "typ"]=="audio") { + if (AudioKeep~Track[i, "lang"]) { + AudKpCnt++ + print "Info|Keeping audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + if (AudioCommand=="") { + AudioCommand=Track[i, "id"] + } else { + AudioCommand=AudioCommand","Track[i, "id"] + } + # Special case if there is only one audio track, even if it was not specified + } else if (AudCnt==1) { + AudKpCnt++ + print "Info|Keeping only audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + AudioCommand=Track[i, "id"] + # Special case if there were multiple tracks, none were selected, and this is the last one. + } else if (AudioCommand=="" && Track[i, "id"]==AudCnt) { + AudKpCnt++ + print "Info|Keeping last audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + AudioCommand=Track[i, "id"] + } else { + if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] + } + } else { + if (Track[i, "typ"]=="subtitles") { + if (SubsKeep~Track[i, "lang"]) { + SubsKpCnt++ + print "Info|Keeping subtitle track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + if (SubsCommand=="") { + SubsCommand=Track[i, "id"] + } else { + SubsCommand=SubsCommand","Track[i, "id"] + } + } else { + if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] + } + } + } + } + if (!AudKpCnt) AudKpCnt=0; if (!SubsKpCnt) SubsKpCnt=0 + print "Info|Kept tracks: "AudKpCnt+SubsKpCnt+VidCnt" (audio: "AudKpCnt", subtitles: "SubsKpCnt")" + if (AudioCommand=="") { + # This should never happen, but belt and suspenders + CommandLine="-A" + } else { + CommandLine="-a "AudioCommand + } + if (SubsCommand=="") { + CommandLine=CommandLine" -S" + } else { + CommandLine=CommandLine" -s "SubsCommand + } + if (Debug) print "Debug|Executing: nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"" + Result=system("nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"") + if (Result>1) print "Error|"Result" remuxing \""TempVideo"\"" > "/dev/stderr" +}' | log + +#### END MAIN + +# Check for script completion and non-empty file +if [ -s "$striptracks_newvideo" ]; then + # Use Recycle Bin if configured + if [ "$striptracks_recyclebin" ]; then + [ $striptracks_debug -eq 1 ] && echo "Debug|Moving: \"$striptracks_tempvideo\" to \"${striptracks_recyclebin%/}/$(basename "$striptracks_video")"\" | log + mv "$striptracks_tempvideo" "${striptracks_recyclebin%/}/$(basename "$striptracks_video")" | log + else + [ $striptracks_debug -eq 1 ] && echo "Debug|Deleting: \"$striptracks_tempvideo\"" | log + rm "$striptracks_tempvideo" | log + fi +else + MSG="Error|Unable to locate or invalid remuxed file: \"$striptracks_newvideo\". Undoing rename." + echo "$MSG" | log + >&2 echo "$MSG" + [ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_tempvideo\" to \"$striptracks_video\"" | log + mv -f "$striptracks_tempvideo" "$striptracks_video" | log + exit 10 +fi + +FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_newvideo")) +MSG="Info|New size: $FILESIZE" +echo "$MSG" | log + +# Call *arr API to RescanMovie/RescanSeries +if [ -f "$striptracks_arr_config" ]; then + # Read *arr config.xml + while read_xml; do + [[ $ENTITY = "Port" ]] && striptracks_port=$CONTENT + [[ $ENTITY = "UrlBase" ]] && striptracks_urlbase=$CONTENT + [[ $ENTITY = "BindAddress" ]] && striptracks_bindaddress=$CONTENT + [[ $ENTITY = "ApiKey" ]] && striptracks_apikey=$CONTENT + done < $striptracks_arr_config + + [[ $striptracks_bindaddress = "*" ]] && striptracks_bindaddress=localhost + + # Check for video ID + if [ "$striptracks_video_id" ]; then + # Call API + if [ "${striptracks_type,,}" = "radarr" ] && get_video_info; then + # Save original quality + ORGQUALITY=$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality) + fi + # Loop a maximum of twice + for ((i=1; $i <= 2; i++)); do + # Scan the disk for the new movie file + if rescan; then + # Check that the Rescan completed + if check_rescan; then + # This whole section doesn't work under Sonarr because the episodefile_id changes after the RescanSeries if the filename changes + # Should look into just using a PUT to change everything at once instead of a Rescan. + if [ "${striptracks_type,,}" = "radarr" ]; then + if get_video_info; then + # Check that the file didn't get lost in the Rescan. + # Radarr sometimes needs to Rescan twice when the file extension changes + # (.avi -> .mkv for example) + if [ "$(echo $RESULT | jq -crM .hasFile)" = "true" ]; then + # If we lost the quality information, put it back + # NOTE: This "works" with Radarr in that the change shows up in the GUI, but only until the page changes. + # It doesn't seem to write the info permanently. Maybe an API bug? + if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then + [ $striptracks_debug -eq 1 ] && echo "Debug|Updating quality to '$(echo $ORGQUALITY | jq -crM .quality.name)'. Calling ${striptracks_type^} API using PUT and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=(removed)'" | log + RESULT=$(curl -s -d "$(echo $RESULT | jq -crM "${striptracks_json_quality_root}.quality=$ORGQUALITY")" -H "Content-Type: application/json" \ + -X PUT http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then + MSG="Warn|Unable to update ${striptracks_type^} $striptracks_api_endpoint '$striptracks_title' to quality '$(echo $ORGQUALITY | jq -crM .quality.name)'" + echo "$MSG" | log + >&2 echo "$MSG" + fi + fi + # The video record is [now] good + break + else + # Loop again because there was no file + continue + fi + else + # No 'path' in returned JSON. + MSG="Warn|The '$striptracks_api' API with $striptracks_api_endpoint $striptracks_api_endpoint_id returned no path." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + # Didn't do anything because we're in Sonarr + break + fi + else + # Timeout or failure + MSG="Warn|${striptracks_type^} job ID $JOBID timed out or failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + # Error from API + MSG="Error|The '$striptracks_api' API with $striptracks_json_key $striptracks_video_id failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + done + else + # No video ID means we can't call the API + MSG="Warn|Missing environment variable: $striptracks_video_idname" + echo "$MSG" | log + >&2 echo "$MSG" + fi +else + # No config file means we can't call the API + MSG="Warn|Unable to locate ${striptracks_type^} config file: '$striptracks_arr_config'" + echo "$MSG" | log + >&2 echo "$MSG" +fi + +# Cool bash feature +MSG="Info|Completed in $(($SECONDS/60))m $(($SECONDS%60))s" +echo "$MSG" | log From 52ce0f24f730f7f82934b681102c0eef469f3c8f Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Wed, 7 Oct 2020 20:13:39 -0500 Subject: [PATCH 5/7] Updates per aptalca --- .travis.yml | 14 ---------- Dockerfile | 26 ------------------- README.md | 1 - .../{60-striptracks-init => 98-striptracks} | 4 +-- 4 files changed, 2 insertions(+), 43 deletions(-) rename root/etc/cont-init.d/{60-striptracks-init => 98-striptracks} (92%) diff --git a/.travis.yml b/.travis.yml index c041d33..7c89849 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,32 +22,18 @@ jobs: script: # Build variables - VERSION=$(git describe --tags --always) - - VCS_REF=$(git rev-parse --short HEAD) - - BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Build image - docker build --no-cache --build-arg VERSION=${VERSION} - --build-arg VCS_REF=${VCS_REF} - --build-arg BUILD_DATE=${BUILD_DATE} - --build-arg DOCKERHUB=${DOCKERHUB} - --build-arg BASEIMAGE=${BASEIMAGE} - --build-arg MODNAME=${MODNAME} -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . - stage: BuildImage if: (NOT (type IN (pull_request))) script: # Build variables - VERSION=$(git describe --tags --always) - - VCS_REF=$(git rev-parse --short HEAD) - - BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Build image - docker build --no-cache --build-arg VERSION=${VERSION} - --build-arg VCS_REF=${VCS_REF} - --build-arg BUILD_DATE=${BUILD_DATE} - --build-arg DOCKERHUB=${DOCKERHUB} - --build-arg BASEIMAGE=${BASEIMAGE} - --build-arg MODNAME=${MODNAME} -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} . - docker tag ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT} ${DOCKERHUB}:${BASEIMAGE}-${MODNAME} # Login to DockerHub diff --git a/Dockerfile b/Dockerfile index bdb716f..45aa101 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,33 +2,7 @@ FROM lsiobase/ubuntu:xenial as buildstage # Build arguments -ARG BUILD_DATE -ARG VCS_REF ARG VERSION -ARG DOCKERHUB -ARG BASEIMAGE -ARG MODNAME - -# Build-time metadata as defined at http://label-schema.org -LABEL org.label-schema.name="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ - org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ - org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ - org.label-schema.version=$VERSION \ - org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.vendor="TheCaptain989" \ - org.label-schema.schema-version="1.0" \ - org.label-schema.vcs-url="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ - org.label-schema.vcs-ref=$VCS_REF - -# Build-time metadata as defined at https://github.com/opencontainers/image-spec -LABEL org.opencontainers.image.title="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ - org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ - org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ - org.opencontainers.image.version=$VERSION \ - org.opencontainers.image.created=$BUILD_DATE \ - org.opencontainers.image.vendor="TheCaptain989" \ - org.opencontainers.image.source="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ - org.opencontainers.image.revision=$VCS_REF # Add version number for use in container init script RUN mkdir -p /root-layer/etc && \ diff --git a/README.md b/README.md index 6bf7440..206f3d6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Chapters, if they exist, are preserved. The Title attribute in the MKV is set to Container info: ![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks) -![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/mods/radarr-striptracks "Container Pulls") # Installation >**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. diff --git a/root/etc/cont-init.d/60-striptracks-init b/root/etc/cont-init.d/98-striptracks similarity index 92% rename from root/etc/cont-init.d/60-striptracks-init rename to root/etc/cont-init.d/98-striptracks index f363fcb..e072fa7 100644 --- a/root/etc/cont-init.d/60-striptracks-init +++ b/root/etc/cont-init.d/98-striptracks @@ -22,7 +22,7 @@ if [ ! -f /usr/bin/mkvmerge ]; then elif [ -f /sbin/apk ]; then # Alpine echo "Installing MKVToolNix using apk" - apk add mkvtoolnix && \ + apk add --no-cache mkvtoolnix && \ rm -rf /var/lib/apt/lists/* else # Unknown @@ -36,7 +36,7 @@ fi # Change ownership if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then echo "Changing ownership on scripts." - chown root:users /usr/local/bin/striptracks*.sh + chown abc:abc /usr/local/bin/striptracks*.sh fi # Make executable From 8c6a8eb62d5bab549a14a93d55a635b6861e8ab4 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Wed, 7 Oct 2020 20:17:49 -0500 Subject: [PATCH 6/7] Update 98-striptracks Fixed the inconsistent stat command after a change to chown --- root/etc/cont-init.d/98-striptracks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/root/etc/cont-init.d/98-striptracks b/root/etc/cont-init.d/98-striptracks index e072fa7..8aa9ba1 100644 --- a/root/etc/cont-init.d/98-striptracks +++ b/root/etc/cont-init.d/98-striptracks @@ -34,7 +34,7 @@ if [ ! -f /usr/bin/mkvmerge ]; then fi # Change ownership -if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then +if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "abc" ]; then echo "Changing ownership on scripts." chown abc:abc /usr/local/bin/striptracks*.sh fi From 9380c5f9f6bd7c6dcfbb27a600418809cf78a623 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 13 Oct 2020 18:26:20 -0500 Subject: [PATCH 7/7] Updated image links - Added .assets folder for images - Corrected Synology picture --- .assets/striptracks-synology.png | Bin 0 -> 13260 bytes .assets/striptracks-v2-custom-script.png | Bin 0 -> 26204 bytes .assets/striptracks-v3-custom-script.png | Bin 0 -> 64455 bytes README.md | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 .assets/striptracks-synology.png create mode 100644 .assets/striptracks-v2-custom-script.png create mode 100644 .assets/striptracks-v3-custom-script.png diff --git a/.assets/striptracks-synology.png b/.assets/striptracks-synology.png new file mode 100644 index 0000000000000000000000000000000000000000..84c9af795eb6d559d62c3b8a04acec0b32c31f8b GIT binary patch literal 13260 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 YC}GutPrchAE(fS8YCSJ~`YPyu0Y5#53IG5A literal 0 HcmV?d00001 diff --git a/.assets/striptracks-v2-custom-script.png b/.assets/striptracks-v2-custom-script.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2b2fe249dbf900c5f634e862781c8c9e3743c0 GIT binary patch literal 26204 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 literal 0 HcmV?d00001 diff --git a/.assets/striptracks-v3-custom-script.png b/.assets/striptracks-v3-custom-script.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e856427753cec506e1825b8166ace6ae138c6e GIT binary patch literal 64455 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�S?`pI^x3FN*5)NFfl6-oFQzzd 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

&RaYSICo74yETWTc2S5L} zb_F2PKur5}?;Q6mrmjpNwf4O$W=c35gfgQpe0BIS97=FWvZMRDLr|8%0Dp$F8ql6P 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 G`QHFLog Files