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