Files
2026-04-18 17:16:27 -07:00

133 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "${script_dir}/.." && pwd)"
template_path="${repo_root}/deploy/templates/qortal/default-node-settings.json"
target_dir="${repo_root}/qortal/data"
target_settings=""
resolve_path() {
local raw="${1:-}"
if [[ -z "${raw}" ]]; then
printf '%s' ""
return 0
fi
if [[ "${raw}" == /* ]]; then
printf '%s' "${raw}"
return 0
fi
printf '%s' "${repo_root}/${raw}"
}
ensure_qortal_data_permissions() {
local data_dir="${1:-}"
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
return 0
fi
if [[ -z "${data_dir}" || ! -d "${data_dir}" ]]; then
return 0
fi
chown -R 1000:100 "${data_dir}" >/dev/null 2>&1 || true
chmod -R u+rwX,g+rwX "${data_dir}" >/dev/null 2>&1 || true
}
ensure_auto_update_disabled() {
local settings_file="$1"
if [[ ! -f "${settings_file}" || ! -s "${settings_file}" ]]; then
return 0
fi
if grep -qE '"autoUpdateEnabled"[[:space:]]*:' "${settings_file}"; then
sed -E -i 's/"autoUpdateEnabled"[[:space:]]*:[[:space:]]*(true|false)/"autoUpdateEnabled": false/g' "${settings_file}"
if grep -qE '"autoUpdateEnabled"[[:space:]]*:[[:space:]]*false' "${settings_file}"; then
echo "Ensured autoUpdateEnabled=false in ${settings_file}"
return 0
fi
fi
sed -E -i '$ s/}[[:space:]]*$/,\n "autoUpdateEnabled": false\n}/' "${settings_file}" || true
if grep -qE '"autoUpdateEnabled"[[:space:]]*:[[:space:]]*false' "${settings_file}"; then
echo "Added autoUpdateEnabled=false to ${settings_file}"
return 0
fi
echo "Warning: could not automatically set autoUpdateEnabled in ${settings_file}. Add it manually." >&2
}
while [[ $# -gt 0 ]]; do
case "$1" in
--target-dir)
target_dir="${2:-}"
shift 2
;;
--target-dir=*)
target_dir="${1#*=}"
shift
;;
--target-file)
target_settings="${2:-}"
shift 2
;;
--target-file=*)
target_settings="${1#*=}"
shift
;;
--template-file)
template_path="${2:-}"
shift 2
;;
--template-file=*)
template_path="${1#*=}"
shift
;;
-h|--help)
cat <<USAGE
Usage: ./scripts/ensure-qortal-settings.sh [options]
Initialize a Qortal node settings.json and force autoUpdateEnabled=false.
Options:
--target-dir <path> Settings directory (default: ${repo_root}/qortal/data)
--target-file <path> Settings file path override
--template-file <path> Template JSON to seed from (default: deploy/templates/qortal/default-node-settings.json)
-h, --help Show this help
USAGE
exit 0
;;
*)
echo "Unknown argument: $1" >&2
exit 1
;;
esac
done
template_path="$(resolve_path "${template_path}")"
target_dir="$(resolve_path "${target_dir}")"
if [[ -z "${target_settings}" ]]; then
target_settings="${target_dir%/}/settings.json"
else
target_settings="$(resolve_path "${target_settings}")"
target_dir="$(dirname "${target_settings}")"
fi
if [[ ! -f "${template_path}" ]]; then
echo "Missing template: ${template_path}" >&2
exit 1
fi
mkdir -p "${target_dir}"
ensure_qortal_data_permissions "${target_dir}"
if [[ -f "${target_settings}" && -s "${target_settings}" ]]; then
echo "Using existing Qortal settings: ${target_settings}"
ensure_auto_update_disabled "${target_settings}"
exit 0
fi
cp "${template_path}" "${target_settings}"
echo "Initialized Qortal settings from template: ${target_settings}"
ensure_auto_update_disabled "${target_settings}"