mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-09-22 11:05:06 -04:00
* Create frigate and go2rtc runtime users in the image * Add single fix-ownership helper for volume permission migration * Add init-usermod oneshot for PUID and PGID remapping * Chown newly created runtime directories to the frigate user * Run sentinel-guarded ownership sweep during prepare * Add host-side volume permission migration script * Guard log directory ownership for user-mode startup * Fall back to plain s6-log when running without root * Assert PUID remapping and sweep sentinel in CI smoke test * Skip the ownership sweep in the devcontainer * Pin FRIGATE_RUN_AS_ROOT in ownership tests * Do not record the sweep as complete when a chown failed * Validate PUID and PGID in the migration script * Treat a failed ownership scan as an incomplete sweep * Reject PUID and PGID of 0 during remapping * Handle symlinks, dry runs, and sentinel write failures in the sweep * Treat an absent sweep root as an incomplete sweep
46 lines
1.6 KiB
Bash
Executable File
46 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Ahead-of-time volume ownership migration for switching Frigate to non-root.
|
|
# Run from the host BEFORE enabling PUID/PGID or --user:
|
|
#
|
|
# ./fix-permissions.sh [--dry-run] <config_dir> <media_dir> [PUID] [PGID]
|
|
#
|
|
# Wraps the image's fix-ownership helper so there is exactly one
|
|
# implementation of the chown logic. Requires an image that contains the
|
|
# helper (any release that includes non-root support).
|
|
|
|
set -o errexit -o nounset -o pipefail
|
|
|
|
IMAGE="${FRIGATE_IMAGE:-ghcr.io/blakeblackshear/frigate:stable}"
|
|
|
|
dry_run_flag=""
|
|
if [[ "${1:-}" == "--dry-run" ]]; then
|
|
dry_run_flag="--dry-run"
|
|
shift
|
|
fi
|
|
|
|
if [[ $# -lt 2 ]]; then
|
|
echo "Usage: $0 [--dry-run] <config_dir> <media_dir> [PUID] [PGID]" >&2
|
|
exit 2
|
|
fi
|
|
|
|
config_dir="$1"
|
|
media_dir="$2"
|
|
puid="${3:-1000}"
|
|
pgid="${4:-1000}"
|
|
|
|
# The ids are interpolated into the container's bash -c source below, so
|
|
# anything but digits would be reparsed as shell rather than passed through
|
|
if ! [[ "$puid" =~ ^[0-9]+$ && "$pgid" =~ ^[0-9]+$ ]]; then
|
|
echo "[ERROR] PUID and PGID must be numeric, got '${puid}' and '${pgid}'" >&2
|
|
exit 2
|
|
fi
|
|
|
|
echo "[INFO] Using image ${IMAGE} (override with FRIGATE_IMAGE=...)"
|
|
# shellcheck disable=SC2086
|
|
docker run --rm \
|
|
-v "${config_dir}:/config" \
|
|
-v "${media_dir}:/media/frigate" \
|
|
--entrypoint bash \
|
|
"${IMAGE}" \
|
|
-c "command -v fix-ownership >/dev/null || { echo '[ERROR] this Frigate image predates non-root support; set FRIGATE_IMAGE to a release that includes it' >&2; exit 1; }; exec fix-ownership ${dry_run_flag} ${puid} ${pgid} /config /media/frigate"
|