133 lines
3.5 KiB
Bash
Executable File
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}"
|