#!/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 < Settings directory (default: ${repo_root}/qortal/data) --target-file Settings file path override --template-file 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}"