56 lines
1.2 KiB
Bash
56 lines
1.2 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
is_integer() {
|
|
case "${1:-}" in
|
|
'' | *[!0-9]*) return 1 ;;
|
|
*) return 0 ;;
|
|
esac
|
|
}
|
|
|
|
chown_path() {
|
|
owner="$1"
|
|
path="$2"
|
|
if ! chown "$owner" "$path"; then
|
|
echo "Warning: could not change ownership of $path to $owner; continuing." >&2
|
|
fi
|
|
}
|
|
|
|
run_as_requested_user() {
|
|
uid="${USER_UID:-}"
|
|
gid="${USER_GID:-}"
|
|
|
|
if [ -z "$uid" ] && [ -z "$gid" ]; then
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$uid" ] || [ -z "$gid" ]; then
|
|
echo "Both USER_UID and USER_GID must be set together." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! is_integer "$uid" || ! is_integer "$gid"; then
|
|
echo "USER_UID and USER_GID must be numeric." >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p /app/.kaizoku/home
|
|
for path in /downloads /jellyfin/tv /jellyfin/movies /app/.kaizoku /app/.kaizoku/home; do
|
|
chown_path "$uid:$gid" "$path"
|
|
done
|
|
|
|
cd /app
|
|
exec setpriv \
|
|
--reuid "$uid" \
|
|
--regid "$gid" \
|
|
--clear-groups \
|
|
env HOME=/app/.kaizoku/home python3 /app/app.py "$@"
|
|
}
|
|
|
|
mkdir -p /downloads /jellyfin/tv /jellyfin/movies /app/.kaizoku
|
|
|
|
run_as_requested_user "$@" || true
|
|
|
|
cd /app
|
|
exec python3 /app/app.py "$@"
|