Initial import of borg-restore
This commit is contained in:
Executable
+129
@@ -0,0 +1,129 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
CONFIG_FILE="${PLUGIN_DIR}/plugin-settings.conf"
|
||||
DATA_DIR="${PLUGIN_DIR}/data"
|
||||
JOB_DIR="${DATA_DIR}/jobs"
|
||||
LOG_DIR="${DATA_DIR}/logs"
|
||||
PID_DIR="${DATA_DIR}/pids"
|
||||
CANCEL_DIR="${DATA_DIR}/cancel"
|
||||
TMP_DIR="${DATA_DIR}/tmp"
|
||||
CSRF_DIR="${DATA_DIR}/csrf"
|
||||
|
||||
warn() {
|
||||
printf '[fix_permissions] %s\n' "$*" >&2
|
||||
}
|
||||
|
||||
strip_quotes() {
|
||||
local v="$1"
|
||||
v="${v#"${v%%[![:space:]]*}"}"
|
||||
v="${v%"${v##*[![:space:]]}"}"
|
||||
if [[ "$v" == \"*\" && "$v" == *\" ]]; then
|
||||
v="${v:1:${#v}-2}"
|
||||
elif [[ "$v" == \'*\' && "$v" == *\' ]]; then
|
||||
v="${v:1:${#v}-2}"
|
||||
fi
|
||||
printf '%s' "$v"
|
||||
}
|
||||
|
||||
get_cfg() {
|
||||
local key="$1"
|
||||
local value=""
|
||||
if [ -r "$CONFIG_FILE" ]; then
|
||||
while IFS= read -r line; do
|
||||
line="${line%%#*}"
|
||||
line="$(strip_quotes "$line")"
|
||||
if [[ "$line" == "$key="* ]]; then
|
||||
value="${line#*=}"
|
||||
fi
|
||||
done < "$CONFIG_FILE"
|
||||
fi
|
||||
printf '%s' "$value"
|
||||
}
|
||||
|
||||
owner_name="$(stat -c %U "$PLUGIN_DIR" 2>/dev/null || true)"
|
||||
if [ "$owner_name" != "root" ] && [ "$owner_name" != "diradmin" ]; then
|
||||
owner_name="root"
|
||||
fi
|
||||
owner_group="$owner_name"
|
||||
|
||||
fix_dir() {
|
||||
local path="$1"
|
||||
if [ -z "$path" ]; then
|
||||
return
|
||||
fi
|
||||
mkdir -p "$path"
|
||||
chown "$owner_name":"$owner_group" "$path" || true
|
||||
chmod 700 "$path" || true
|
||||
}
|
||||
|
||||
fix_file() {
|
||||
local path="$1"
|
||||
local label="$2"
|
||||
if [ -z "$path" ]; then
|
||||
return
|
||||
fi
|
||||
if [ ! -e "$path" ]; then
|
||||
warn "${label} missing: ${path}"
|
||||
return
|
||||
fi
|
||||
if [ -L "$path" ] || [ ! -f "$path" ]; then
|
||||
warn "${label} not a regular file: ${path}"
|
||||
return
|
||||
fi
|
||||
chown "$owner_name":"$owner_group" "$path" || true
|
||||
chmod 600 "$path" || true
|
||||
}
|
||||
|
||||
BB_PATH="$(get_cfg "BB_PATH")"
|
||||
BORG_VARIABLES_FILE="$(get_cfg "BORG_VARIABLES_FILE")"
|
||||
|
||||
if [ -z "$BB_PATH" ]; then
|
||||
BB_PATH="/opt/bb"
|
||||
fi
|
||||
|
||||
bbvars_path=""
|
||||
if [ -n "$BORG_VARIABLES_FILE" ]; then
|
||||
bbvars_path="${BORG_VARIABLES_FILE}"
|
||||
if [[ "$bbvars_path" == *DA_USER* ]]; then
|
||||
if [ -n "${DA_USER:-}" ]; then
|
||||
bbvars_path="${bbvars_path//DA_USER/${DA_USER}}"
|
||||
elif [ -f "/opt/bb/bbvars.sh" ]; then
|
||||
bbvars_path="/opt/bb/bbvars.sh"
|
||||
else
|
||||
bbvars_path=""
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [[ "$BB_PATH" == *.sh ]]; then
|
||||
bbvars_path="$BB_PATH"
|
||||
else
|
||||
bbvars_path="${BB_PATH%/}/bbvars.sh"
|
||||
fi
|
||||
fi
|
||||
|
||||
fix_dir "$DATA_DIR"
|
||||
fix_dir "$JOB_DIR/pending"
|
||||
fix_dir "$JOB_DIR/processing"
|
||||
fix_dir "$JOB_DIR/done"
|
||||
fix_dir "$LOG_DIR"
|
||||
fix_dir "$PID_DIR"
|
||||
fix_dir "$CANCEL_DIR"
|
||||
fix_dir "$TMP_DIR"
|
||||
fix_dir "$CSRF_DIR"
|
||||
|
||||
fix_file "$CONFIG_FILE" "plugin-settings.conf"
|
||||
if [ -n "$bbvars_path" ]; then
|
||||
fix_file "$bbvars_path" "bbvars.sh"
|
||||
else
|
||||
warn "bbvars.sh path not resolved; skipped"
|
||||
fi
|
||||
|
||||
for f in "$JOB_DIR"/pending/*.env "$JOB_DIR"/processing/*.env "$JOB_DIR"/done/*.{ok,fail,cancel,env.ok,env.fail,env.cancel}; do
|
||||
if [ -f "$f" ]; then
|
||||
fix_file "$f" "job file"
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user