From 8bd9f3fd09a898c59c4c27de927f585df3277a89 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Sat, 11 May 2024 22:07:11 -0500 Subject: [PATCH 1/2] Release 2.6 - **New** Settings can now be passed to the script via the STRIPTRACKS_ARGS environment variable - **New** Added check for invalid eventtypes - File ownership is only attempted when running as root --- .assets/striptracks-synology-2.png | Bin 0 -> 17180 bytes .assets/striptracks-synology.png | Bin 13260 -> 13343 bytes README.md | 33 ++++++++++++++---- SECURITY.md | 4 +-- root/usr/local/bin/striptracks.sh | 54 +++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 .assets/striptracks-synology-2.png diff --git a/.assets/striptracks-synology-2.png b/.assets/striptracks-synology-2.png new file mode 100644 index 0000000000000000000000000000000000000000..87ec76a22a37926fda2ed425c7e40460472d0018 GIT binary patch literal 17180 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 literal 0 HcmV?d00001 diff --git a/.assets/striptracks-synology.png b/.assets/striptracks-synology.png index 84c9af795eb6d559d62c3b8a04acec0b32c31f8b..e27314adc67ea354f316e55e33acb7e2b68cb6c2 100644 GIT binary patch literal 13343 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 Lj&g;fMd*J6j+EFu literal 13260 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 YC}GutPrchAE(fS8YCSJ~`YPyu0Y5#53IG5A diff --git a/README.md b/README.md index c238bb29..0adaf551 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,10 @@ Production Container info: ![Docker Image Size](https://img.shields.io/docker/im ![striptracks v3](.assets/striptracks-v3-custom-script.png "Radarr/Sonarr custom script settings") The script will detect the language(s) defined in Radarr/Sonarr for the movie or TV show and only keep the audio and subtitles selected. - Alternatively, a wrapper script may be used to more granularly define which tracks to keep. See [Wrapper Scripts](./README.md#wrapper-scripts) for more details. + Alternatively, a wrapper script or an environment variable may be used to more granularly define which tracks to keep. See [Wrapper Scripts](./README.md#wrapper-scripts) or [Environment Variable](./README.md#environment-variable) for more details. # Usage -The source video can be any mkvtoolnix supported video format. The output is an MKV file with the same name. +The source video can be any mkvtoolnix supported video format. The output is an MKV file with the same name and the same permissions. Owner is preserved if the script is executed as root. 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`). The language of the video file will be updated in the Radarr or Sonarr database to reflect the actual languages preserved in the remuxed video, and the video will be renamed according to the Radarr/Sonarr rules if needed (for example, if a removed track would trigger a name change.) @@ -135,7 +135,7 @@ graph LR ``` Descriptively, these steps are: -1. Command-line options override all automatic language selection. +1. Command-line options (or environment variable) override all automatic language selection. 2. If there are no command-line options, the video's *Quality Profile* is examined for a language configuration (only supported in Radarr). 3. If there is no *Quality Profile* language **or** it is set to 'Any', then examine the *Custom Formats* and scores associated with the quality profile. All language conditions with positive scores *and* negated conditions with negative score are selected. 4. If the *Custom Format* scores are zero (0) or there are none with configured language conditions, examine the *Language Profile* (only supported in Sonarr v3) @@ -173,7 +173,7 @@ For example: Multiple codes may be concatenated, such as `:eng:spa` for both English and Spanish. Order is unimportant. ->![warning] **NOTE:** If no subtitle language is detected in the profile or specified on the command-line, all subtitles are removed. +>![warning] **NOTE:** If no subtitle language is detected via Radarr/Sonarr configuration or specified on the command-line, all subtitles are removed. ### Any language code The `:any` language code is a special code. When used, the script will preserve all language tracks, regardless of how they are tagged in the source video. @@ -215,7 +215,7 @@ There is no way to force the script to remove audio tracks with these codes. ``` ## Wrapper Scripts -To supply arguments to the script, one of the included wrapper scripts may be used or a custom wrapper script must be created. +To supply arguments to the script, you must either use one of the included wrapper scripts, create a custom wrapper script, or set the `STRIPTRACKS_ARGS` [environment variable](./README.md#environment-variable). ### Included Wrapper Scripts For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. @@ -258,8 +258,29 @@ Then put `/config/striptracks-custom.sh` in the **Path** field in place of `/usr >**Note:** If you followed the Linuxserver.io recommendations when configuring your container, the `/config` directory will be mapped to an external storage location. It is therefore recommended to place custom scripts in the `/config` directory so they will survive container updates, but they may be placed anywhere that is accessible by Radarr or Sonarr. +## Environment Variable +The `striptracks.sh` script also allows the use of arguments provided by the `STRIPTRACKS_ARGS` environment variable. This allows advanced use cases without having to provide a custom script. + +For example, the following value in your `docker run` command would Keep English, Japanese, and Unknown audio and English subtitles: + +```shell +-e STRIPTRACKS_ARGS='--audio :eng:jpn:und --subs :eng' +``` + +In Docker Compose this will look like this: + +```yaml +environment: + - STRIPTRACKS_ARGS=--audio :eng:jpn:und --subs :eng +``` + +*Example Synology Configuration* +![striptracks](.assets/striptracks-synology-2.png "Synology container settings") + +>**NOTE:** The environment variable settings are *only* used when **no** command-line arguments are present. **Any** command-line argument will disable the use of the environment variable. + ## Triggers -The only events/notification triggers that have been tested are **On Import** and **On Upgrade** +The only events/notification triggers that are supported are **On Import** and **On Upgrade** ## Batch Mode Batch mode allows the script to be executed independently of Radarr or Sonarr. It converts the file specified on the command-line and ignores any environment variables that are normally expected to be set by the video management program. diff --git a/SECURITY.md b/SECURITY.md index 94d33bc8..46cfa041 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,8 +6,8 @@ Only the latest major and minor version are supported. | Version | Supported | | ------- | ------------------ | -| 2.5.x | :heavy_check_mark: | -| < 2.5 | :x: | +| 2.6.x | :heavy_check_mark: | +| < 2.6 | :x: | ## Reporting a Vulnerability diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh index 61e591d8..671b6999 100755 --- a/root/usr/local/bin/striptracks.sh +++ b/root/usr/local/bin/striptracks.sh @@ -41,6 +41,7 @@ # 11 - source video had no audio or subtitle tracks # 12 - log file is not writable # 13 - awk script exited abnormally +# 15 - could not set permissions and/or owner on new file # 16 - could not delete the original file # 17 - Radarr/Sonarr API error # 18 - Radarr/Sonarr job timeout @@ -71,6 +72,9 @@ Source: https://github.com/TheCaptain989/radarr-striptracks Usage: $0 [{-a|--audio} [{-s|--subs} ] [{-f|--file} ]] [{-l|--log} ] [{-d|--debug} []] + Options can also be set via the STRIPTRACKS_ARGS environment variable. + Command-line arguments override the environment variable. + Options and Arguments: -a, --audio Audio languages to keep ISO639-2 code(s) prefixed with a colon \`:\` @@ -125,6 +129,17 @@ Examples: echo "$usage" >&2 } +# Check for environment variable arguments +if [ -n "$STRIPTRACKS_ARGS" ]; then + if [ $# -ne 0 ]; then + striptracks_prelogmessage="Warning|STRIPTRACKS_ARGS environment variable set but will be ignored because command line arguments were also specified." + else + # Move the environment variable arguments to the command line for processing + striptracks_prelogmessage="Info|Using settings from environment variable." + eval set -- "$STRIPTRACKS_ARGS" + fi +fi + # Process arguments # Taken from Drew Strokes post 3/24/2015: # https://medium.com/@Drew_Stokes/bash-argument-parsing-54f3b81a6a8f @@ -845,9 +860,24 @@ if [ $striptracks_debug -ge 1 ]; then echo "$striptracks_message" >&2 fi +# Log STRIPTRACKS_ARGS usage +if [ -n "$striptracks_prelogmessage" ]; then + # striptracks_prelogmessage is set above, before argument processing + echo "$striptracks_prelogmessage" | log + [ $striptracks_debug -ge 1 ] && echo "Debug|STRIPTRACKS_ARGS: ${STRIPTRACKS_ARGS}" | log +fi + # Log environment [ $striptracks_debug -ge 2 ] && printenv | sort | sed 's/^/Debug|/' | log +# Check for invalid _eventtypes +if [[ "${!striptracks_eventtype}" =~ Grab|Rename|MovieAdded|MovieDelete|MovieFileDelete|SeriesAdd|SeriesDelete|EpisodeFileDelete|HealthIssue|ApplicationUpdate ]]; then + striptracks_message="Error|${striptracks_type^} event ${!striptracks_eventtype} is not supported. Exiting." + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + end_script 20 +fi + # Handle Test event if [[ "${!striptracks_eventtype}" = "Test" ]]; then echo "Info|${striptracks_type^} event: ${!striptracks_eventtype}" | log @@ -1352,6 +1382,30 @@ if [ ! -s "$striptracks_tempvideo" ]; then end_script 10 fi +# Checking that we're running as root +if [ "$(id -u)" -eq 0 ]; then + # Set owner + [ $striptracks_debug -ge 1 ] && echo "Debug|Changing owner of file \"$striptracks_tempvideo\"" | log + chown --reference="$striptracks_video" "$striptracks_tempvideo" >&2 + striptracks_return=$?; [ $striptracks_return -ne 0 ] && { + striptracks_message="Error|[$striptracks_return] Error when changing owner of file: \"$striptracks_tempvideo\"" + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + striptracks_exitstatus=15 + } +else + # Unable to change owner when not running as root + [ $striptracks_debug -ge 1 ] && echo "Debug|Unable to change owner of file when running as user '$(id -un)'" | log +fi +# Set permissions +chmod --reference="$striptracks_video" "$striptracks_tempvideo" >&2 +striptracks_return=$?; [ $striptracks_return -ne 0 ] && { + striptracks_message="Error|[$striptracks_return] Error when changing permissions of file: \"$striptracks_tempvideo\"" + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + striptracks_exitstatus=15 +} + # Just delete the original video if running in batch mode if [ "$striptracks_type" = "batch" ]; then [ $striptracks_debug -ge 1 ] && echo "Debug|Deleting: \"$striptracks_video\"" | log From 21f36785c1264a25d9369cbb1784bcc4829d555c Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Sat, 18 May 2024 20:37:16 -0500 Subject: [PATCH 2/2] Release 2.6.1 - Allow use of optional environmental variables for Radarr/Sonarr config - Updated Docker labels --- Dockerfile | 5 ++++- README.md | 4 ++-- root/usr/local/bin/striptracks.sh | 10 ++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 24304148..e1176038 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,10 @@ RUN \ ## Single layer deployed image ## FROM scratch -LABEL maintainer="TheCaptain989" +LABEL org.opencontainers.image.source=https://github.com/TheCaptain989/radarr-striptracks +LABEL org.opencontainers.image.description="A Docker Mod to Radarr/Sonarr to automatically strip out unwanted audio and subtitle streams" +LABEL org.opencontainers.image.licenses=GPL-3.0-only +LABEL org.opencontainers.image.authors="TheCaptain989" # Add files from buildstage COPY --from=buildstage /root-layer/ / diff --git a/README.md b/README.md index 0adaf551..922fdcc9 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,11 @@ A [Docker Mod](https://github.com/linuxserver/docker-mods) for the LinuxServer.i **This unified script works in both Radarr and Sonarr. Use this mod in either container!** >**NOTE:** This mod supports Linux OSes only. -Container info: +Production Container info: ![Docker Image Size](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks "Container Size") +Development Container info: ![Docker Image Size](https://img.shields.io/docker/image-size/thecaptain989/radarr-striptracks "Container Size") ![Docker Pulls](https://img.shields.io/docker/pulls/thecaptain989/radarr-striptracks "Container Pulls") [![GitHub Super-Linter](https://github.com/TheCaptain989/radarr-striptracks/actions/workflows/linter.yml/badge.svg)](https://github.com/TheCaptain989/radarr-striptracks/actions/workflows/linter.yml "Linter Job") -Production Container info: ![Docker Image Size](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks "Container Size") # Installation 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 GitHub Container Registry or Docker Hub: diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh index 671b6999..f257c129 100755 --- a/root/usr/local/bin/striptracks.sh +++ b/root/usr/local/bin/striptracks.sh @@ -911,6 +911,16 @@ elif [ -f "$striptracks_arr_config" ]; then [[ $striptracks_xml_entity = "ApiKey" ]] && striptracks_apikey=$striptracks_xml_content done < $striptracks_arr_config + # Allow use of environment variables from https://github.com/Sonarr/Sonarr/pull/6746 + striptracks_port_var="${striptracks_type^^}__SERVER__PORT" + [ -n "${!striptracks_port_var}" ] && striptracks_port="${!striptracks_port_var}" + striptracks_urlbase_var="${striptracks_type^^}__SERVER__URLBASE" + [ -n "${!striptracks_urlbase_var}" ] && striptracks_urlbase="${!striptracks_urlbase_var}" + striptracks_bindaddress_var="${striptracks_type^^}__SERVER__BINDADDRESS" + [ -n "${!striptracks_bindaddress_var}" ] && striptracks_bindaddress="${!striptracks_bindaddress_var}" + striptracks_apikey_var="${striptracks_type^^}__AUTH__APIKEY" + [ -n "${!striptracks_apikey_var}" ] && striptracks_apikey="${!striptracks_apikey_var}" + # Check for localhost [[ $striptracks_bindaddress = "*" ]] && striptracks_bindaddress=localhost