mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	* Adds better handling during folder checking/creation/permissions for when the image is running as non-root * Prefers the long options to commands
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#!/command/with-contenv /usr/bin/bash
 | 
						|
# shellcheck shell=bash
 | 
						|
 | 
						|
declare -r log_prefix="[init-folders]"
 | 
						|
 | 
						|
declare -r export_dir="/usr/src/paperless/export"
 | 
						|
declare -r data_dir="${PAPERLESS_DATA_DIR:-/usr/src/paperless/data}"
 | 
						|
declare -r media_root_dir="${PAPERLESS_MEDIA_ROOT:-/usr/src/paperless/media}"
 | 
						|
declare -r consume_dir="${PAPERLESS_CONSUMPTION_DIR:-/usr/src/paperless/consume}"
 | 
						|
declare -r tmp_dir="${PAPERLESS_SCRATCH_DIR:=/tmp/paperless}"
 | 
						|
 | 
						|
declare -r main_dirs=(
 | 
						|
	"${export_dir}"
 | 
						|
	"${data_dir}"
 | 
						|
	"${media_root_dir}"
 | 
						|
	"${consume_dir}"
 | 
						|
	"${tmp_dir}"
 | 
						|
)
 | 
						|
 | 
						|
declare -r extra_dirs=(
 | 
						|
	"${main_dirs[@]}"
 | 
						|
	"${data_dir}/index"
 | 
						|
	"${media_root_dir}/documents"
 | 
						|
	"${media_root_dir}/documents/originals"
 | 
						|
	"${media_root_dir}/documents/thumbnails"
 | 
						|
)
 | 
						|
 | 
						|
if [[ -n "${USER_IS_NON_ROOT}" ]]; then
 | 
						|
	# Non-root mode: Create directories as current user, warn about permission issues
 | 
						|
	echo "${log_prefix} Running in non-root mode, checking directories"
 | 
						|
	current_uid=$(id --user)
 | 
						|
	current_gid=$(id --group)
 | 
						|
 | 
						|
	for dir in "${extra_dirs[@]}"; do
 | 
						|
		if [[ ! -d "${dir}" ]]; then
 | 
						|
			mkdir --parents --verbose "${dir}" || echo "${log_prefix} WARNING: Could not create ${dir} - permission denied"
 | 
						|
		fi
 | 
						|
		# Check permissions on existing directories too
 | 
						|
		if [[ -d "${dir}" && ! -w "${dir}" ]]; then
 | 
						|
			echo "${log_prefix} WARNING: No write permission to ${dir}"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
 | 
						|
	# Warn about ownership issues
 | 
						|
	for dir in "${main_dirs[@]}"; do
 | 
						|
		if [[ -d "${dir}" ]]; then
 | 
						|
			find "${dir}" -not \( -user ${current_uid} -and -group ${current_gid} \) -exec echo "${log_prefix} WARNING: Permission issue on {}: not owned by current user (${current_uid}:${current_gid})" \; 2>/dev/null || echo "${log_prefix} WARNING: Cannot check permissions on ${dir}"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
else
 | 
						|
	# Root mode: Create and fix permissions as needed
 | 
						|
	echo "${log_prefix} Running with root privileges, adjusting directories and permissions"
 | 
						|
 | 
						|
	# First create directories
 | 
						|
	for dir in "${extra_dirs[@]}"; do
 | 
						|
		if [[ ! -d "${dir}" ]]; then
 | 
						|
			mkdir --parents --verbose "${dir}"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
 | 
						|
	# Then fix permissions on all directories
 | 
						|
	for dir in "${main_dirs[@]}"; do
 | 
						|
		find "${dir}" -not \( -user paperless -and -group paperless \) -exec chown --changes paperless:paperless {} +
 | 
						|
	done
 | 
						|
fi
 |