Files
pretranscode/scripts/provision-cache.sh
T

43 lines
1.6 KiB
Bash
Executable File

#!/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"