2021-10-22 15:22:10 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# SPDX-FileCopyrightText: 2020 Umbrel. https://getumbrel.com
|
|
|
|
#
|
2022-01-21 20:37:48 +00:00
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
2021-10-22 15:22:10 +00:00
|
|
|
|
|
|
|
check_root () {
|
|
|
|
if [[ $UID != 0 ]]; then
|
|
|
|
echo "Error: This script must be run as root."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
check_if_not_already_running() {
|
|
|
|
if ps ax | grep $0 | grep -v $$ | grep bash | grep -v grep
|
|
|
|
then
|
|
|
|
echo "backup monitor is already running"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
check_dependencies () {
|
|
|
|
for cmd in "$@"; do
|
|
|
|
if ! command -v $cmd >/dev/null 2>&1; then
|
|
|
|
echo "This script requires \"${cmd}\" to be installed"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
check_root
|
|
|
|
|
|
|
|
check_if_not_already_running
|
|
|
|
|
|
|
|
check_dependencies fswatch readlink dirname
|
|
|
|
|
|
|
|
CITADEL_ROOT="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))/../.."
|
|
|
|
|
|
|
|
monitor_file () {
|
|
|
|
local file_path="${1}"
|
|
|
|
echo "Monitoring $file_path"
|
|
|
|
echo
|
|
|
|
|
|
|
|
if [[ ! -e "${file_path}" ]]; then
|
|
|
|
echo "$file_path doesn't exist, waiting for it to be created..."
|
|
|
|
echo
|
|
|
|
until [[ -e "${file_path}" ]]; do
|
|
|
|
sleep 1
|
|
|
|
done
|
|
|
|
echo "$file_path created! Triggering backup..."
|
|
|
|
touch "${CITADEL_ROOT}/events/signals/backup"
|
|
|
|
fi
|
|
|
|
|
|
|
|
fswatch -0 --event Updated $file_path | xargs -0 -n 1 -I {} touch "${CITADEL_ROOT}/events/signals/backup"
|
|
|
|
}
|
|
|
|
|
|
|
|
if [[ ! -d "${CITADEL_ROOT}" ]]; then
|
|
|
|
echo "Root dir does not exist '$CITADEL_ROOT'"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
[[ -f "${CITADEL_ROOT}/.env" ]] && source "${CITADEL_ROOT}/.env"
|
|
|
|
BITCOIN_NETWORK=${BITCOIN_NETWORK:-mainnet}
|
|
|
|
|
|
|
|
# Monitor LND channel.backup
|
|
|
|
monitor_file "${CITADEL_ROOT}/lnd/data/chain/bitcoin/${BITCOIN_NETWORK}/channel.backup" &
|
|
|
|
|
|
|
|
# Monitor db/user.json
|
|
|
|
# We want to back up user settings too, however we currently store the encrypted
|
|
|
|
# mnemonic in this file which is not safe to backup remotely.
|
|
|
|
# Uncomment this in the future once we've ensured there's no critical data in
|
|
|
|
# this file.
|
|
|
|
# monitor_file "${CITADEL_ROOT}/db/user.json" &
|