#!/bin/bash set -euo pipefail [ "${EUID}" -eq 0 ] || { echo "Run as root." >&2; exit 1; } ENV_FILE=${1:-.env} [ -f "$ENV_FILE" ] || { echo "Missing $ENV_FILE" >&2; exit 1; } set -a . "$ENV_FILE" set +a : "${PRETRANSCODE_ROOT:?}" : "${PRETRANSCODE_VIEW_PATH:?}" : "${PRETRANSCODE_CACHE_PATH:?}" : "${PRETRANSCODE_STATE_PATH:?}" : "${PRETRANSCODE_CACHE_IMAGE:?}" : "${CACHE_MAX_BYTES:?}" : "${PRETRANSCODE_UID:?}" : "${PRETRANSCODE_GID:?}" mkdir -p "$PRETRANSCODE_ROOT" "$PRETRANSCODE_VIEW_PATH" \ "$PRETRANSCODE_CACHE_PATH" "$PRETRANSCODE_STATE_PATH" if [ ! -f "$PRETRANSCODE_CACHE_IMAGE" ]; then fallocate -l "$CACHE_MAX_BYTES" "$PRETRANSCODE_CACHE_IMAGE" mkfs.ext4 -q -F -m 0 -L pretranscode "$PRETRANSCODE_CACHE_IMAGE" # mkfs may discard unused extents; claim the configured allocation again. fallocate -l "$CACHE_MAX_BYTES" "$PRETRANSCODE_CACHE_IMAGE" elif [ "$(stat -c %s "$PRETRANSCODE_CACHE_IMAGE")" -ne "$CACHE_MAX_BYTES" ]; then echo "Cache image exists with a different size; resize it explicitly before provisioning." >&2 exit 1 fi FSTAB_LINE="$PRETRANSCODE_CACHE_IMAGE $PRETRANSCODE_CACHE_PATH ext4 loop,nofail,noatime 0 2" grep -qF "$FSTAB_LINE" /etc/fstab || echo "$FSTAB_LINE" >> /etc/fstab mountpoint -q "$PRETRANSCODE_CACHE_PATH" || mount "$PRETRANSCODE_CACHE_PATH" touch "$PRETRANSCODE_CACHE_PATH/.pretranscode-cache" chown -R "$PRETRANSCODE_UID:$PRETRANSCODE_GID" \ "$PRETRANSCODE_VIEW_PATH" "$PRETRANSCODE_STATE_PATH" "$PRETRANSCODE_CACHE_PATH" chmod 0755 "$PRETRANSCODE_VIEW_PATH" "$PRETRANSCODE_STATE_PATH" "$PRETRANSCODE_CACHE_PATH" echo "Cache provisioned at $PRETRANSCODE_CACHE_PATH" df -h "$PRETRANSCODE_CACHE_PATH"