#!/bin/bash # Per-location directory layout helpers. Each backup location is one # directory under configs/backup/locations// containing: # # location.config — sourced at startup, holds CFG_BACKUP_LOC__* # including PASSWORD (auto-randomized from # RANDOMIZEDPASSWORD on first install) # ssh.key — private SSH key when AUTH=key (chmod 0600) # kopia.config — kopia adapter's connection state (chmod 0600) # # Everything for one location is co-located here so add/remove operations # are mkdir / rm of one directory. backupLocationsDir() { echo "$configs_dir/backup/locations" } backupLocationDir() { local idx="$1" echo "$(backupLocationsDir)/$idx" } backupLocationConfig() { local idx="$1" echo "$(backupLocationDir "$idx")/location.config" } backupLocationSshKey() { local idx="$1" echo "$(backupLocationDir "$idx")/ssh.key" } backupLocationKopiaConfig() { local idx="$1" echo "$(backupLocationDir "$idx")/kopia.config" } # Owner used when chowning per-location files. Falls back to sudo_user_name # when docker_install_user hasn't been resolved (CLI startup before # checkInstallTypeRequirement runs). backupLocationOwner() { echo "${docker_install_user:-${sudo_user_name:-libreportal}}" } backupLocationEnsureDir() { local idx="$1" local dir dir=$(backupLocationDir "$idx") local owner owner=$(backupLocationOwner) sudo mkdir -p "$dir" sudo chown "$owner":"$owner" "$dir" sudo chmod 0700 "$dir" } backupLocationResolvedPath() { local idx="$1" local mode mode=$(resticLocationField "$idx" PATH_MODE) if [[ "$mode" == "auto" ]]; then # Base dir is the configurable Default Backup Location (Backup Engine # config); each location gets its own numbered subfolder. local base="${CFG_BACKUP_DEFAULT_PATH:-$docker_dir/backups}" echo "${base%/}/${idx}" else resticLocationField "$idx" PATH fi }