diff --git a/scripts/dist/arch.sh b/scripts/dist/arch.sh index 7e2c5a7f2..3eee8e7f2 100755 --- a/scripts/dist/arch.sh +++ b/scripts/dist/arch.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # This script returns the normalized machine architecture (amd64, arm64, or arm). # An error is returned if the architecture is currently not supported by PhotoPrism. diff --git a/scripts/dist/audit.sh b/scripts/dist/audit.sh index c3f1d13b3..a109cad91 100755 --- a/scripts/dist/audit.sh +++ b/scripts/dist/audit.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash ######################################## TEST STORAGE FOLDER PERMISSIONS ######################################## diff --git a/scripts/dist/cleanup.sh b/scripts/dist/cleanup.sh index 83e6d06e0..cf1fbfeb0 100755 --- a/scripts/dist/cleanup.sh +++ b/scripts/dist/cleanup.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(/usr/bin/id -u) != "0" ]]; then diff --git a/scripts/dist/dist-upgrade.sh b/scripts/dist/dist-upgrade.sh index 17dfafcc8..5e087d706 100755 --- a/scripts/dist/dist-upgrade.sh +++ b/scripts/dist/dist-upgrade.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(/usr/bin/id -u) != "0" ]]; then diff --git a/scripts/dist/entrypoint-init.sh b/scripts/dist/entrypoint-init.sh index d2a1880fa..5aa30caea 100755 --- a/scripts/dist/entrypoint-init.sh +++ b/scripts/dist/entrypoint-init.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # INITIALIZES CONTAINER PACKAGES AND PERMISSIONS @@ -28,34 +28,35 @@ case $DOCKER_ENV in ;; *) - echo "unsupported init environment \"$DOCKER_ENV\""; + echo "init: unsupported environment $DOCKER_ENV"; exit ;; esac if [[ ${PHOTOPRISM_UID} =~ $re ]] && [[ ${PHOTOPRISM_UID} != "0" ]]; then if [[ ${PHOTOPRISM_GID} =~ $re ]] && [[ ${PHOTOPRISM_GID} != "0" ]]; then - /usr/sbin/groupadd -g "${PHOTOPRISM_GID}" "group_${PHOTOPRISM_GID}" 2>/dev/null - /usr/sbin/useradd -o -u "${PHOTOPRISM_UID}" -g "${PHOTOPRISM_GID}" -d "/photoprism" "user_${PHOTOPRISM_UID}" 2>/dev/null - /usr/sbin/usermod -g "${PHOTOPRISM_GID}" "user_${PHOTOPRISM_UID}" 2>/dev/null - - if [[ -z ${PHOTOPRISM_DISABLE_CHOWN} ]]; then - echo "updating filesystem permissions..." - echo "PHOTOPRISM_DISABLE_CHOWN: \"true\" disables filesystem permission updates" - /bin/chown --preserve-root -Rcf "${PHOTOPRISM_UID}:${PHOTOPRISM_GID}" "${CHOWN_DIRS[@]}" - /bin/chmod --preserve-root -Rcf u+rwX "${CHMOD_DIRS[@]}" - fi + CHOWN="${PHOTOPRISM_UID}:${PHOTOPRISM_GID}" else - /usr/sbin/useradd -o -u "${PHOTOPRISM_UID}" -g 1000 -d "/photoprism" "user_${PHOTOPRISM_UID}" 2>/dev/null - /usr/sbin/usermod -g 1000 "user_${PHOTOPRISM_UID}" 2>/dev/null + CHOWN="${PHOTOPRISM_UID}" + fi - if [[ -z ${PHOTOPRISM_DISABLE_CHOWN} ]]; then - echo "updating filesystem permissions..." - echo "PHOTOPRISM_DISABLE_CHOWN: \"true\" disables filesystem permission updates" - /bin/chown --preserve-root -Rcf "${PHOTOPRISM_UID}" "${CHOWN_DIRS[@]}" - /bin/chmod --preserve-root -Rcf u+rwX "${CHMOD_DIRS[@]}" + if [[ ${PHOTOPRISM_UID} -ge 500 ]]; then + if [[ ${PHOTOPRISM_GID} =~ $re ]] && [[ ${PHOTOPRISM_GID} != "0" ]] && [[ ${PHOTOPRISM_GID} -ge 500 ]]; then + /usr/sbin/groupadd -g "${PHOTOPRISM_GID}" "group_${PHOTOPRISM_GID}" 2>/dev/null + /usr/sbin/useradd -o -u "${PHOTOPRISM_UID}" -g "${PHOTOPRISM_GID}" -d "/photoprism" "user_${PHOTOPRISM_UID}" 2>/dev/null + /usr/sbin/usermod -g "${PHOTOPRISM_GID}" "user_${PHOTOPRISM_UID}" 2>/dev/null + else + /usr/sbin/useradd -o -u "${PHOTOPRISM_UID}" -g 1000 -d "/photoprism" "user_${PHOTOPRISM_UID}" 2>/dev/null + /usr/sbin/usermod -g 1000 "user_${PHOTOPRISM_UID}" 2>/dev/null fi fi + + if [[ ${CHOWN} ]] && [[ -z ${PHOTOPRISM_DISABLE_CHOWN} ]]; then + echo "init: updating filesystem permissions" + echo "note: PHOTOPRISM_DISABLE_CHOWN=\"true\" disables permission updates" + /bin/chown --preserve-root -Rcf "${CHOWN}" "${CHOWN_DIRS[@]}" + /bin/chmod --preserve-root -Rcf u+rwX "${CHMOD_DIRS[@]}" + fi fi # do nothing if PHOTOPRISM_INIT was not set @@ -68,7 +69,7 @@ INIT_LOCK="/scripts/.init-lock" # execute targets via /usr/bin/make if [[ ! -e ${INIT_LOCK} ]]; then for INIT_TARGET in $PHOTOPRISM_INIT; do - echo "init $INIT_TARGET..." + echo "init: $INIT_TARGET" /usr/bin/make -C "$INIT_SCRIPTS" "$INIT_TARGET" done diff --git a/scripts/dist/entrypoint.sh b/scripts/dist/entrypoint.sh index ffa7400c2..6b46450f5 100755 --- a/scripts/dist/entrypoint.sh +++ b/scripts/dist/entrypoint.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # regular expressions re='^[0-9]+$' @@ -12,16 +12,16 @@ export DOCKER_TAG=${DOCKER_TAG:-unknown} case $DOCKER_ENV in prod) export PATH="/usr/local/sbin:/usr/sbin:/sbin:/bin:/scripts:/opt/photoprism/bin:/usr/local/bin:/usr/bin"; - INIT_SCRIPT="/scripts/entrypoint-init.sh" + INIT_SCRIPT="/scripts/entrypoint-init.sh"; ;; develop) export PATH="/usr/local/sbin:/usr/sbin:/sbin:/bin:/scripts:/usr/local/go/bin:/go/bin:/usr/local/bin:/usr/bin"; - INIT_SCRIPT="/go/src/github.com/photoprism/photoprism/scripts/dist/entrypoint-init.sh" + INIT_SCRIPT="/go/src/github.com/photoprism/photoprism/scripts/dist/entrypoint-init.sh"; ;; *) - echo "unknown environment \"$DOCKER_ENV\""; + echo "entrypoint: unknown environment $DOCKER_ENV"; INIT_SCRIPT="" ;; esac @@ -42,20 +42,23 @@ if [[ -z ${PHOTOPRISM_UID} ]]; then fi fi -# docker image info -DOCKER_IMAGE="$PHOTOPRISM_ARCH-$DOCKER_ENV/$DOCKER_TAG" - # initialize container packages and permissions if [[ ${INIT_SCRIPT} ]] && [[ -f "${INIT_SCRIPT}" ]]; then if [[ $(/usr/bin/id -u) == "0" ]]; then - echo "init $DOCKER_IMAGE as root" + echo "started $DOCKER_TAG as root ($PHOTOPRISM_ARCH-$DOCKER_ENV)" /bin/bash -c "${INIT_SCRIPT}" else - echo "init $DOCKER_IMAGE as uid $(/usr/bin/id -u)" + echo "started $DOCKER_TAG as uid $(/usr/bin/id -u) ($PHOTOPRISM_ARCH-$DOCKER_ENV)" /usr/bin/sudo -E "${INIT_SCRIPT}" fi else - echo "started $DOCKER_IMAGE as uid $(/usr/bin/id -u)" + echo "started $DOCKER_TAG as uid $(/usr/bin/id -u) without init script ($PHOTOPRISM_ARCH-$DOCKER_ENV)" +fi + +# display documentation info and link +if [[ $DOCKER_ENV == "prod" ]]; then + echo "Problems? Our Troubleshooting Checklists help you quickly diagnose and solve them:"; + echo "https://docs.photoprism.app/getting-started/troubleshooting/"; fi # set explicit home directory @@ -74,12 +77,15 @@ else fi # display additional container info for troubleshooting -echo "umask: \"$(umask)\" ($(umask -S))" -echo "home-directory: ${HOME}" -echo "storage-path: ${PHOTOPRISM_STORAGE_PATH}" -echo "originals-path: ${PHOTOPRISM_ORIGINALS_PATH}" -echo "import-path: ${PHOTOPRISM_IMPORT_PATH}" -echo "assets-path: ${PHOTOPRISM_ASSETS_PATH}" +echo "file umask....: \"$(umask)\" ($(umask -S))" +echo "home directory: ${HOME}" +echo "assets path...: ${PHOTOPRISM_ASSETS_PATH:-default}" +echo "storage path..: ${PHOTOPRISM_STORAGE_PATH:-default}" +echo "config path...: ${PHOTOPRISM_CONFIG_PATH:-default}" +echo "cache path....: ${PHOTOPRISM_CACHE_PATH:-default}" +echo "backup path...: ${PHOTOPRISM_BACKUP_PATH:-default}" +echo "import path...: ${PHOTOPRISM_IMPORT_PATH:-default}" +echo "originals path: ${PHOTOPRISM_ORIGINALS_PATH:-default}" # change to another user and group on request if [[ ${INIT_SCRIPT} ]] && [[ $(/usr/bin/id -u) == "0" ]] && [[ ${PHOTOPRISM_UID} =~ $re ]] && [[ ${PHOTOPRISM_UID} != "0" ]]; then diff --git a/scripts/dist/heif-convert.sh b/scripts/dist/heif-convert.sh index ccb35a9a0..0cd9d6d57 100755 --- a/scripts/dist/heif-convert.sh +++ b/scripts/dist/heif-convert.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash if [[ -z $1 ]] && [[ -z $2 ]]; then echo "Usage: heif-convert " 1>&2 diff --git a/scripts/dist/install-chrome.sh b/scripts/dist/install-chrome.sh index a124dcfc3..3f1ffc27b 100755 --- a/scripts/dist/install-chrome.sh +++ b/scripts/dist/install-chrome.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-darktable.sh b/scripts/dist/install-darktable.sh index 1809ef23f..3eafc0b27 100755 --- a/scripts/dist/install-darktable.sh +++ b/scripts/dist/install-darktable.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-davfs.sh b/scripts/dist/install-davfs.sh index 97011f2d8..fcef48b6e 100755 --- a/scripts/dist/install-davfs.sh +++ b/scripts/dist/install-davfs.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-go.sh b/scripts/dist/install-go.sh index 56bb792dd..bac28ec64 100755 --- a/scripts/dist/install-go.sh +++ b/scripts/dist/install-go.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash GOLANG_VERSION=1.18 diff --git a/scripts/dist/install-gpu.sh b/scripts/dist/install-gpu.sh index 793247112..266726b61 100755 --- a/scripts/dist/install-gpu.sh +++ b/scripts/dist/install-gpu.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-mariadb.sh b/scripts/dist/install-mariadb.sh index 56fcedccd..8eaa7cd86 100755 --- a/scripts/dist/install-mariadb.sh +++ b/scripts/dist/install-mariadb.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-nodejs.sh b/scripts/dist/install-nodejs.sh index 91162c6ac..e1873f54d 100755 --- a/scripts/dist/install-nodejs.sh +++ b/scripts/dist/install-nodejs.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash # abort if not executed as root if [[ $(id -u) != "0" ]]; then diff --git a/scripts/dist/install-tensorflow.sh b/scripts/dist/install-tensorflow.sh index a0c820471..ef0e289d5 100755 --- a/scripts/dist/install-tensorflow.sh +++ b/scripts/dist/install-tensorflow.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash set -e diff --git a/scripts/dist/tensorflow-driver.sh b/scripts/dist/tensorflow-driver.sh index ce89a94f5..1afcafea7 100755 --- a/scripts/dist/tensorflow-driver.sh +++ b/scripts/dist/tensorflow-driver.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash CPU_DETECTED=$(/usr/bin/lshw -c processor -json 2>/dev/null)