mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			feature-pw
			...
			0e59cf05a5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0e59cf05a5 | ||
| 
						 | 
					77528a3426 | 
@@ -1,179 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# Source: https://github.com/sameersbn/docker-gitlab/
 | 
			
		||||
map_uidgid() {
 | 
			
		||||
	local -r usermap_original_uid=$(id -u paperless)
 | 
			
		||||
	local -r usermap_original_gid=$(id -g paperless)
 | 
			
		||||
	local -r usermap_new_uid=${USERMAP_UID:-$usermap_original_uid}
 | 
			
		||||
	local -r usermap_new_gid=${USERMAP_GID:-${usermap_original_gid:-$usermap_new_uid}}
 | 
			
		||||
	if [[ ${usermap_new_uid} != "${usermap_original_uid}" || ${usermap_new_gid} != "${usermap_original_gid}" ]]; then
 | 
			
		||||
		echo "Mapping UID and GID for paperless:paperless to $usermap_new_uid:$usermap_new_gid"
 | 
			
		||||
		usermod --non-unique --uid "${usermap_new_uid}" paperless
 | 
			
		||||
		groupmod --non-unique --gid "${usermap_new_gid}" paperless
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
map_folders() {
 | 
			
		||||
	# Export these so they can be used in docker-prepare.sh
 | 
			
		||||
	export DATA_DIR="${PAPERLESS_DATA_DIR:-/usr/src/paperless/data}"
 | 
			
		||||
	export MEDIA_ROOT_DIR="${PAPERLESS_MEDIA_ROOT:-/usr/src/paperless/media}"
 | 
			
		||||
	export CONSUME_DIR="${PAPERLESS_CONSUMPTION_DIR:-/usr/src/paperless/consume}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
custom_container_init() {
 | 
			
		||||
	# Mostly borrowed from the LinuxServer.io base image
 | 
			
		||||
	# https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
 | 
			
		||||
	local -r custom_script_dir="/custom-cont-init.d"
 | 
			
		||||
	# Tamper checking.
 | 
			
		||||
	# Don't run files which are owned by anyone except root
 | 
			
		||||
	# Don't run files which are writeable by others
 | 
			
		||||
	if [ -d "${custom_script_dir}" ]; then
 | 
			
		||||
		if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
 | 
			
		||||
			echo "**** Potential tampering with custom scripts detected ****"
 | 
			
		||||
			echo "**** The folder '${custom_script_dir}' must be owned by root ****"
 | 
			
		||||
			return 0
 | 
			
		||||
		fi
 | 
			
		||||
		if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
 | 
			
		||||
			echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
 | 
			
		||||
			echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
 | 
			
		||||
			return 0
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		# Make sure custom init directory has files in it
 | 
			
		||||
		if [ -n "$(/bin/ls --almost-all "${custom_script_dir}" 2>/dev/null)" ]; then
 | 
			
		||||
			echo "[custom-init] files found in ${custom_script_dir} executing"
 | 
			
		||||
			# Loop over files in the directory
 | 
			
		||||
			for SCRIPT in "${custom_script_dir}"/*; do
 | 
			
		||||
				NAME="$(basename "${SCRIPT}")"
 | 
			
		||||
				if [ -f "${SCRIPT}" ]; then
 | 
			
		||||
					echo "[custom-init] ${NAME}: executing..."
 | 
			
		||||
					/bin/bash "${SCRIPT}"
 | 
			
		||||
					echo "[custom-init] ${NAME}: exited $?"
 | 
			
		||||
				elif [ ! -f "${SCRIPT}" ]; then
 | 
			
		||||
					echo "[custom-init] ${NAME}: is not a file"
 | 
			
		||||
				fi
 | 
			
		||||
			done
 | 
			
		||||
		else
 | 
			
		||||
			echo "[custom-init] no custom files found exiting..."
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
initialize() {
 | 
			
		||||
 | 
			
		||||
	# Setup environment from secrets before anything else
 | 
			
		||||
	# Check for a version of this var with _FILE appended
 | 
			
		||||
	# and convert the contents to the env var value
 | 
			
		||||
	# Source it so export is persistent
 | 
			
		||||
	# shellcheck disable=SC1091
 | 
			
		||||
	source /sbin/env-from-file.sh
 | 
			
		||||
 | 
			
		||||
	# Change the user and group IDs if needed
 | 
			
		||||
	map_uidgid
 | 
			
		||||
 | 
			
		||||
	# Check for overrides of certain folders
 | 
			
		||||
	map_folders
 | 
			
		||||
 | 
			
		||||
	local -r export_dir="/usr/src/paperless/export"
 | 
			
		||||
 | 
			
		||||
	for dir in \
 | 
			
		||||
		"${export_dir}" \
 | 
			
		||||
		"${DATA_DIR}" "${DATA_DIR}/index" \
 | 
			
		||||
		"${MEDIA_ROOT_DIR}" "${MEDIA_ROOT_DIR}/documents" "${MEDIA_ROOT_DIR}/documents/originals" "${MEDIA_ROOT_DIR}/documents/thumbnails" \
 | 
			
		||||
		"${CONSUME_DIR}"; do
 | 
			
		||||
		if [[ ! -d "${dir}" ]]; then
 | 
			
		||||
			echo "Creating directory ${dir}"
 | 
			
		||||
			mkdir --parents --verbose "${dir}"
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	local -r tmp_dir="${PAPERLESS_SCRATCH_DIR:=/tmp/paperless}"
 | 
			
		||||
	echo "Creating directory scratch directory ${tmp_dir}"
 | 
			
		||||
	mkdir --parents --verbose "${tmp_dir}"
 | 
			
		||||
 | 
			
		||||
	set +e
 | 
			
		||||
	echo "Adjusting permissions of paperless files. This may take a while."
 | 
			
		||||
	chown -R paperless:paperless "${tmp_dir}"
 | 
			
		||||
	for dir in \
 | 
			
		||||
		"${export_dir}" \
 | 
			
		||||
		"${DATA_DIR}" \
 | 
			
		||||
		"${MEDIA_ROOT_DIR}" \
 | 
			
		||||
		"${CONSUME_DIR}"; do
 | 
			
		||||
		find "${dir}" -not \( -user paperless -and -group paperless \) -exec chown --changes paperless:paperless {} +
 | 
			
		||||
	done
 | 
			
		||||
	set -e
 | 
			
		||||
 | 
			
		||||
	"${gosu_cmd[@]}" /sbin/docker-prepare.sh
 | 
			
		||||
 | 
			
		||||
	# Leave this last thing
 | 
			
		||||
	custom_container_init
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
install_languages() {
 | 
			
		||||
	echo "Installing languages..."
 | 
			
		||||
 | 
			
		||||
	read -ra langs <<<"$1"
 | 
			
		||||
 | 
			
		||||
	# Check that it is not empty
 | 
			
		||||
	if [ ${#langs[@]} -eq 0 ]; then
 | 
			
		||||
		return
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Build list of packages to install
 | 
			
		||||
	to_install=()
 | 
			
		||||
	for lang in "${langs[@]}"; do
 | 
			
		||||
		pkg="tesseract-ocr-$lang"
 | 
			
		||||
 | 
			
		||||
		if dpkg --status "$pkg" &>/dev/null; then
 | 
			
		||||
			echo "Package $pkg already installed!"
 | 
			
		||||
			continue
 | 
			
		||||
		else
 | 
			
		||||
			to_install+=("$pkg")
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Use apt only when we install packages
 | 
			
		||||
	if [ ${#to_install[@]} -gt 0 ]; then
 | 
			
		||||
		apt-get update
 | 
			
		||||
 | 
			
		||||
		for pkg in "${to_install[@]}"; do
 | 
			
		||||
 | 
			
		||||
			if ! apt-cache show "$pkg" &>/dev/null; then
 | 
			
		||||
				echo "Skipped $pkg: Package not found! :("
 | 
			
		||||
				continue
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			echo "Installing package $pkg..."
 | 
			
		||||
			if ! apt-get --assume-yes install "$pkg" &>/dev/null; then
 | 
			
		||||
				echo "Could not install $pkg"
 | 
			
		||||
				exit 1
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
echo "Paperless-ngx docker container starting..."
 | 
			
		||||
 | 
			
		||||
gosu_cmd=(gosu paperless)
 | 
			
		||||
if [ "$(id --user)" == "$(id --user paperless)" ]; then
 | 
			
		||||
	gosu_cmd=()
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Install additional languages if specified
 | 
			
		||||
if [[ -n "$PAPERLESS_OCR_LANGUAGES" ]]; then
 | 
			
		||||
	install_languages "$PAPERLESS_OCR_LANGUAGES"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
initialize
 | 
			
		||||
 | 
			
		||||
if [[ "$1" != "/"* ]]; then
 | 
			
		||||
	echo Executing management command "$@"
 | 
			
		||||
	exec "${gosu_cmd[@]}" python3 manage.py "$@"
 | 
			
		||||
else
 | 
			
		||||
	echo Executing "$@"
 | 
			
		||||
	exec "$@"
 | 
			
		||||
fi
 | 
			
		||||
		Reference in New Issue
	
	Block a user