diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 165b51b..6cd9cc6 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -8,9 +8,9 @@ on:
- '.vscode/**'
- 'chrome-extension/**'
- 'releases/**'
+ - '**/**.md'
- '**.crx'
- '**.pem'
- - '**.md'
- '.dockerignore'
- '.gitignore'
diff --git a/Dockerfile b/Dockerfile
index 6fb263b..73112d4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,13 +1,12 @@
FROM ubuntu:22.04 AS ffmpeg
-ENV UID=1000 \
- GID=1000 \
- USER=youtube \
- DEBIAN_FRONTEND=noninteractive
+ENV DEBIAN_FRONTEND=noninteractive
COPY docker-build.sh .
RUN sh ./docker-build.sh
+#--------------# Stage 2
+
FROM ubuntu:22.04 as frontend
ENV DEBIAN_FRONTEND=noninteractive
@@ -20,9 +19,6 @@ RUN apt-get update && apt-get -y install \
# spares us this spaghetti approach: https://stackoverflow.com/a/60547197
npm && \
apt-get install -f && \
- apt-get autoremove --purge && \
- apt-get autoremove && \
- apt-get clean && \
npm config set strict-ssl false && \
npm install -g @angular/cli
@@ -34,7 +30,7 @@ COPY [ "angular.json", "tsconfig.json", "/build/" ]
COPY [ "src/", "/build/src/" ]
RUN npm run build
-#--------------#
+#--------------# Final Stage
FROM ubuntu:22.04
@@ -51,6 +47,7 @@ RUN apt-get update && apt-get -y install \
npm \
python2 \
python3 \
+ gosu \
atomicparsley && \
apt-get install -f && \
apt-get autoremove --purge && \
@@ -59,8 +56,8 @@ RUN apt-get update && apt-get -y install \
rm -rf /var/lib/apt
WORKDIR /app
-COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
-COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/ffprobe
+COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffmpeg", "/usr/local/bin/ffmpeg" ]
+COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffprobe", "/usr/local/bin/ffprobe" ]
COPY --chown=$UID:$GID [ "backend/package.json", "backend/package-lock.json", "/app/" ]
ENV PM2_HOME=/app/pm2
RUN npm config set strict-ssl false && \
@@ -71,5 +68,5 @@ COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/
COPY --chown=$UID:$GID [ "/backend/", "/app/" ]
EXPOSE 17442
-# ENTRYPOINT [ "/app/entrypoint.sh" ]
+ENTRYPOINT [ "/app/entrypoint.sh" ]
CMD [ "pm2-runtime", "pm2.config.js" ]
diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh
index 5074353..59ffdb6 100755
--- a/backend/entrypoint.sh
+++ b/backend/entrypoint.sh
@@ -11,7 +11,7 @@ fi
# chown current working directory to current user
if [ "$*" = "$CMD" ] && [ "$(id -u)" = "0" ]; then
find . \! -user "$UID" -exec chown "$UID:$GID" -R '{}' + || echo "WARNING! Could not change directory ownership. If you manage permissions externally this is fine, otherwise you may experience issues when downloading or deleting videos."
- exec su-exec "$UID:$GID" "$0" "$@"
+ exec gosu "$UID:$GID" "$0" "$@"
fi
exec "$@"
diff --git a/backend/fix-scripts/001-fix_download_permissions.sh b/backend/fix-scripts/001-fix_download_permissions.sh
new file mode 100644
index 0000000..cd6cc42
--- /dev/null
+++ b/backend/fix-scripts/001-fix_download_permissions.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# INTERACTIVE PERMISSIONS FIX SCRIPT FOR YTDL-M
+# Date: 2022-05-03
+
+# If you want to run this script on a bare-metal installation instead of within Docker
+# make sure that the paths configured below match your paths! (it's wise to use the full paths)
+# USAGE: within your container's bash shell:
+# chmod -R +x ./fix-scripts/
+# ./fix-scripts/001-fix_download_permissions.sh
+
+# User defines / Docker env defaults
+PATH_SUBS=/app/subscriptions
+PATH_AUDIO=/app/audio
+PATH_VIDS=/app/video
+
+clear -x
+echo "\n"
+printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - # horizontal line
+echo "Welcome to the INTERACTIVE PERMISSIONS FIX SCRIPT FOR YTDL-M."
+echo "This script will set YTDL-M's download paths' owner to ${USER} (${UID}:${GID})"
+echo "and permissions to the default of 644."
+printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - # horizontal line
+echo "\n"
+
+# check whether dirs exist
+i=0
+[ -d $PATH_SUBS ] && i=$((i+1)) && echo "✔ (${i}/3) Found Subscriptions directory at ${PATH_SUBS}"
+[ -d $PATH_AUDIO ] && i=$((i+1)) && echo "✔ (${i}/3) Found Audio directory at ${PATH_AUDIO}"
+[ -d $PATH_VIDS ] && i=$((i+1)) && echo "✔ (${i}/3) Found Video directory at ${PATH_VIDS}"
+
+# Ask to proceed or cancel, exit on missing paths
+case $i in
+ 0)
+ echo "\nCouldn't find any download path to fix permissions for! \nPlease edit this script to configure!"
+ exit 2;;
+ 3)
+ echo "\nFound all download paths to fix permissions for. \nProceed? (Y/N)";;
+ *)
+ echo "\nOnly found ${i} out of 3 download paths! Something about this script's config must be wrong. \nProceed anyways? (Y/N)";;
+esac
+old_stty_cfg=$(stty -g)
+stty raw -echo ; answer=$(head -c 1) ; stty $old_stty_cfg # Careful playing with stty
+if echo "$answer" | grep -iq "^y" ;then
+ echo "\n Running jobs now... (this may take a while)\n"
+ [ -d $PATH_SUBS ] && chown "$UID:$GID" -R $PATH_SUBS && echo "✔ Set owner of ${PATH_SUBS} to ${USER}."
+ [ -d $PATH_SUBS ] && chmod 644 -R $PATH_SUBS && echo "✔ Set permissions of ${PATH_SUBS} to 644."
+ [ -d $PATH_AUDIO ] && chown "$UID:$GID" -R $PATH_AUDIO && echo "✔ Set owner of ${PATH_AUDIO} to ${USER}."
+ [ -d $PATH_AUDIO ] && chmod 644 -R $PATH_AUDIO && echo "✔ Set permissions of ${PATH_AUDIO} to 644."
+ [ -d $PATH_VIDS ] && chown "$UID:$GID" -R $PATH_VIDS && echo "✔ Set owner of ${PATH_VIDS} to ${USER}."
+ [ -d $PATH_VIDS ] && chmod 644 -R $PATH_VIDS && echo "✔ Set permissions of ${PATH_VIDS} to 644."
+ echo "\n✔ Done."
+ echo "\n If you noticed file access errors those MAY be due to currently running downloads."
+ echo " Feel free to re-run this script, however download parts should have correct file permissions anyhow. :)"
+ exit
+else
+ echo "\nOkay, bye."
+fi
diff --git a/src/assets/i18n/messages.nl.xlf b/src/assets/i18n/messages.nl.xlf
index 3d6b59f..03cb155 100644
--- a/src/assets/i18n/messages.nl.xlf
+++ b/src/assets/i18n/messages.nl.xlf
@@ -1545,8 +1545,8 @@
Custom args input placeholder
- Global custom args for downloads on the home page. Args are delimited using two commas like so: ,,
- Algemene aanvullende opties voor downloads op de overzichtspagina. Scheidt deze met komma's: ,,
+ Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,
+ Algemene aanvullende opties voor downloads op de overzichtspagina. (Stel de opties per abonnement in!) Scheidt deze met komma's: ,,
src/app/settings/settings.component.html
134
diff --git a/src/assets/i18n/messages.zh.xlf b/src/assets/i18n/messages.zh.xlf
index 7de9a79..be003db 100644
--- a/src/assets/i18n/messages.zh.xlf
+++ b/src/assets/i18n/messages.zh.xlf
@@ -1,4 +1,4 @@
-
+
@@ -902,8 +902,8 @@
Video path setting input hint
- Global custom args for downloads on the home page. Args are delimited using two commas like so: ,,
- 开始页面上用于下载的全局自定义参数。参数由两个逗号分隔:,,
+ Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,
+ 开始页面上用于下载的全局自定义参数。(单独为每个订阅设置订阅参数!) 参数由两个逗号分隔:,,
app/settings/settings.component.html
146