declare -r consume_dir="${PAPERLESS_CONSUMPTION_DIR:-/usr/src/paperless/consume}"
declare -r tmp_dir="${PAPERLESS_SCRATCH_DIR:=/tmp/paperless}"
-echo "${log_prefix} Checking for folder existence"
-
-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}" \
- "${tmp_dir}"; do
- if [[ ! -d "${dir}" ]]; then
- mkdir --parents --verbose "${dir}"
- fi
-done
-
-echo "${log_prefix} Adjusting file and folder permissions"
-for dir in \
- "${export_dir}" \
- "${data_dir}" \
- "${media_root_dir}" \
- "${consume_dir}" \
- "${tmp_dir}"; do
- find "${dir}" -not \( -user paperless -and -group paperless \) -exec chown --changes paperless:paperless {} +
-done
+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
echo $(date +%s) > /var/run/s6/container_environment/PAPERLESS_START_TIME_S
# Check if we're starting as a non-root user
-if [ $(id -u) == $(id -u paperless) ]; then
+if [ "$(id --user)" != "0" ]; then
printf "true" > /var/run/s6/container_environment/USER_IS_NON_ROOT
- echo "${log_prefix} paperless-ngx docker container running under a user"
+ echo "${log_prefix} paperless-ngx docker container running under a user ($(id --user):$(id --group))"
else
printf "/usr/src/paperless" > /var/run/s6/container_environment/HOME
echo "${log_prefix} paperless-ngx docker container starting init as root"