diff --git a/entrypoint.sh b/entrypoint.sh index ef42f34a4..33fe57a92 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,5 +1,19 @@ #! /bin/bash +# Set default UID and GID for Kavita but allow overrides +PUID=${PUID:-0} +PGID=${PGID:-0} + +# Add Kavita group if it doesn't already exist +if [[ -z "$(getent group "$PGID" | cut -d':' -f1)" ]]; then + groupadd -o -g "$PGID" kavita +fi + +# Add Kavita user if it doesn't already exist +if [[ -z "$(getent passwd "$PUID" | cut -d':' -f1)" ]]; then + useradd -o -u "$PUID" -g "$PGID" -d /kavita kavita +fi + if [ ! -f "/kavita/config/appsettings.json" ]; then echo "Kavita configuration file does not exist, creating..." echo '{ @@ -10,4 +24,24 @@ fi chmod +x Kavita -./Kavita +if [[ "$PUID" -eq 0 ]]; then + # Run as root + ./Kavita +else + # Set ownership on config dir if running non-root and current ownership is different + if [[ ! "$(stat -c %u /kavita/config)" = "$PUID" ]]; then + echo "Specified PUID differs from Kavita config dir ownership, updating permissions now..." + if [[ ! "$(stat -c %g /kavita/config)" = "$PGID" ]]; then + chown -R "$PUID":"$PGID" /kavita/config + else + chown -R "$PUID" /kavita/config + fi + + elif [[ ! "$(stat -c %g /kavita/config)" = "$PGID" ]]; then + echo "Specified PGID differs from Kavita config dir ownership, updating permissions now..." + chgrp -R "$PGID" /kavita/config + fi + + # Run as non-root user + su -l kavita -c ./Kavita +fi