Initial portable pretranscode service
This commit is contained in:
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user