diff --git a/docker/develop/armv7/Dockerfile b/docker/develop/armv7/Dockerfile index 2a0569680..cee210c11 100644 --- a/docker/develop/armv7/Dockerfile +++ b/docker/develop/armv7/Dockerfile @@ -64,6 +64,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ iputils-ping dnsutils \ && \ /scripts/install-nodejs.sh && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ /scripts/install-tensorflow.sh && \ echo "ALL ALL=(ALL) NOPASSWD:SETENV: ALL" >> /etc/sudoers.d/all && \ diff --git a/docker/develop/jammy-slim/Dockerfile b/docker/develop/jammy-slim/Dockerfile index ac8286ea9..ce68a028c 100644 --- a/docker/develop/jammy-slim/Dockerfile +++ b/docker/develop/jammy-slim/Dockerfile @@ -57,6 +57,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ && \ /scripts/install-mariadb.sh mariadb-client && \ /scripts/install-darktable.sh && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ echo 'alias ll="ls -alh"' >> /etc/skel/.bashrc && \ echo 'export PS1="\u@$DOCKER_TAG:\w\$ "' >> /etc/skel/.bashrc && \ diff --git a/docker/develop/jammy/Dockerfile b/docker/develop/jammy/Dockerfile index 3d2a9bdb1..2a3cd28ce 100644 --- a/docker/develop/jammy/Dockerfile +++ b/docker/develop/jammy/Dockerfile @@ -74,6 +74,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ /scripts/install-mariadb.sh mariadb-client && \ /scripts/install-tensorflow.sh && \ /scripts/install-darktable.sh && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ /scripts/install-chrome.sh && \ echo "ALL ALL=(ALL) NOPASSWD:SETENV: ALL" >> /etc/sudoers.d/all && \ diff --git a/docker/develop/plucky-slim/Dockerfile b/docker/develop/plucky-slim/Dockerfile index 453312f7f..d65c995e4 100644 --- a/docker/develop/plucky-slim/Dockerfile +++ b/docker/develop/plucky-slim/Dockerfile @@ -58,6 +58,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ && \ /scripts/install-mariadb.sh mariadb-client && \ /scripts/install-darktable.sh && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ echo 'alias ll="ls -alh"' >> /etc/skel/.bashrc && \ echo 'export PS1="\u@$DOCKER_TAG:\w\$ "' >> /etc/skel/.bashrc && \ diff --git a/docker/develop/plucky/Dockerfile b/docker/develop/plucky/Dockerfile index 31df4f2e6..f3b75a37a 100644 --- a/docker/develop/plucky/Dockerfile +++ b/docker/develop/plucky/Dockerfile @@ -75,6 +75,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ /scripts/install-mariadb.sh mariadb-client && \ /scripts/install-tensorflow.sh && \ /scripts/install-darktable.sh && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ /scripts/install-chrome.sh && \ echo "ALL ALL=(ALL) NOPASSWD:SETENV: ALL" >> /etc/sudoers.d/all && \ diff --git a/docker/photoprism/armv7/Dockerfile b/docker/photoprism/armv7/Dockerfile index bdcc609d7..3a58b3857 100644 --- a/docker/photoprism/armv7/Dockerfile +++ b/docker/photoprism/armv7/Dockerfile @@ -116,6 +116,7 @@ RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80retries && \ libvpx-dev libwebm-dev libjpeg-dev libmatroska-dev libdvdread-dev libdav1d-dev libsharpyuv0 \ iputils-ping dnsutils \ && \ + /scripts/install-yt-dlp.sh && \ /scripts/install-libheif.sh && \ echo 'alias ll="ls -alh"' >> /etc/skel/.bashrc && \ echo 'export PS1="\u@$DOCKER_TAG:\w\$ "' >> /etc/skel/.bashrc && \ diff --git a/scripts/dist/install-yt-dlp.sh b/scripts/dist/install-yt-dlp.sh new file mode 100755 index 000000000..641a0080a --- /dev/null +++ b/scripts/dist/install-yt-dlp.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + +# Installs the yt-dlp binary, a vector search engine, on Linux. +# bash <(curl -s https://raw.githubusercontent.com/photoprism/photoprism/develop/scripts/dist/install-yt-dlp.sh) + +set -e + +# Show usage information if first argument is --help. +if [[ ${1} == "--help" ]]; then + echo "Usage: ${0##*/} [destdir] [version]" 1>&2 + exit 0 +fi + +# You can provide a custom installation directory as the first argument. +DESTDIR=$(realpath "${1:-/usr/local}") + +# Determine target architecture. +if [[ $PHOTOPRISM_ARCH ]]; then + SYSTEM_ARCH=$PHOTOPRISM_ARCH +else + SYSTEM_ARCH=$(uname -m) +fi + +DESTARCH=${BUILD_ARCH:-$SYSTEM_ARCH} + +case $DESTARCH in + amd64 | AMD64 | x86_64 | x86-64) + DESTARCH=x86_64 + ;; + + arm64 | ARM64 | aarch64) + DESTARCH=aarch64 + ;; + + arm | ARM | aarch | armv7l | armhf) + DESTARCH=armv7l + ;; + + *) + echo "Unsupported Machine Architecture: \"$DESTARCH\"" 1>&2 + exit 1 + ;; +esac + +. /etc/os-release + +# Abort if not executed as root. +if [[ $(id -u) != "0" ]] && [[ $DESTDIR == "/usr" || $DESTDIR == "/usr/local" ]]; then + echo "Error: Run ${0##*/} as root to install in a system directory!" 1>&2 + exit 1 +fi + +echo "Installing yt-dlp for ${DESTARCH^^}..." + +# Alternatively, users can specify a custom version to install as the second argument. +GITHUB_LATEST=$(curl --silent "https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') +VERSION=${2:-$GITHUB_LATEST} +BINARY="yt-dlp_linux" + +if [[ $DESTARCH != "x86_64" ]]; then + BINARY="${BINARY}_${DESTARCH}" +fi + +GITHUB_URL="https://github.com/yt-dlp/yt-dlp/releases/download/${VERSION}/${BINARY}" +DESTBIN="${DESTDIR}/bin/yt-dlp" + +echo "------------------------------------------------" +echo "VERSION : ${VERSION}" +echo "LATEST : ${GITHUB_LATEST}" +echo "DOWNLOAD: ${GITHUB_URL}" +echo "DESTDIR : ${DESTDIR}" +echo "DESTBIN : ${DESTBIN}" +echo "------------------------------------------------" + +echo "Downloading the yt-dlp binary to \"${DESTBIN}\"..." +mkdir -p "${DESTDIR}" +curl -fsSL "${GITHUB_URL}" -o "${DESTBIN}" + +echo "Changing permissions of \"${DESTBIN}\" to 755..." +chmod 755 "${DESTBIN}" + +echo "Done."