#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${KOPIA_ENV_FILE:-/opt/kopia/kopia.env}" if [[ -f "$ENV_FILE" ]]; then # shellcheck disable=SC1090 source "$ENV_FILE" fi KOPIA_CONFIG_FILE="${KOPIA_CONFIG_FILE:-/opt/kopia/repository.config}" KOPIA_CACHE_DIRECTORY="${KOPIA_CACHE_DIRECTORY:-/opt/kopia/cache}" KOPIA_LOG_DIR="${KOPIA_LOG_DIR:-/opt/kopia/logs}" BACKUP_STAGING_DIR="${BACKUP_STAGING_DIR:-/opt/kopia/staging}" BACKUP_PATHS_FILE="${BACKUP_PATHS_FILE:-$SCRIPT_DIR/backup-paths.txt}" KOPIA_EXCLUDES_FILE="${KOPIA_EXCLUDES_FILE:-$SCRIPT_DIR/excludes.txt}" export KOPIA_PASSWORD export KOPIA_CACHE_DIRECTORY require_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "Missing required command: $1" >&2 exit 1 } } require_env() { local name="$1" if [[ -z "${!name:-}" ]]; then echo "Missing required environment variable: $name" >&2 exit 1 fi } require_real_env() { local name="$1" require_env "$name" case "${!name}" in change-me|change-me.*|*.change-me|*change-me*) echo "Environment variable $name still contains a placeholder value" >&2 exit 1 ;; esac } kopia_cmd() { kopia --config-file="$KOPIA_CONFIG_FILE" "$@" } log() { printf '[%s] %s\n' "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" "$*" } ensure_runtime_dirs() { mkdir -p "$KOPIA_CACHE_DIRECTORY" "$KOPIA_LOG_DIR" "$BACKUP_STAGING_DIR" }