54 lines
1.1 KiB
Bash
Executable File
54 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ---
|
|
# shellcheck disable=1091
|
|
# ---
|
|
. /usr/local/share/dao/config/dao.conf
|
|
|
|
CHECK_INTERVAL=30
|
|
BASE_RCLONE_OPTS=(
|
|
--vfs-cache-mode writes
|
|
--cache-dir /tmp/rclone-cache
|
|
--dir-cache-time 5m
|
|
--poll-interval 1m
|
|
--timeout 1h
|
|
--low-level-retries 10
|
|
--retries 3
|
|
)
|
|
CRYPT_RCLONE_OPTS=(
|
|
--buffer-size 64M
|
|
--transfers 4
|
|
)
|
|
|
|
# Mount configurations: remote:mount_point:name:is_crypt
|
|
MOUNTS=(
|
|
"koofr:${DAO_STORAGE_DIR}/koofr:koofr:false"
|
|
"koofr_vault:${DAO_STORAGE_DIR}/vault:vault:true"
|
|
)
|
|
|
|
ensure_mount() {
|
|
declare remote="$1" mount_point="$2" mount_name="$3" is_crypt="$4"
|
|
|
|
# Return early if already mounted
|
|
findmnt -rn "$mount_point" >/dev/null 2>&1 && return 0
|
|
|
|
declare opts_array=("${BASE_RCLONE_OPTS[@]}")
|
|
[[ "$is_crypt" == "true" ]] && opts_array+=("${CRYPT_RCLONE_OPTS[@]}")
|
|
|
|
/usr/bin/rclone mount "$remote:" "$mount_point" "${opts_array[@]}" &
|
|
}
|
|
|
|
main() {
|
|
while true; do
|
|
for mount_config in "${MOUNTS[@]}"; do
|
|
IFS=':' read -r remote mount_point mount_name is_crypt <<<"$mount_config"
|
|
ensure_mount "$remote" "$mount_point" "$mount_name" "$is_crypt"
|
|
done
|
|
|
|
sleep "$CHECK_INTERVAL"
|
|
done
|
|
}
|
|
|
|
main "$@"
|