mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-01-21 20:46:23 +00:00
224 lines
8.6 KiB
Bash
224 lines
8.6 KiB
Bash
# Interactive configuration flow for setup.sh
|
|
|
|
select_deployment_type() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say)
|
|
say HEADER "DEPLOYMENT TYPE"
|
|
echo "1) 🏠 Local Development (${DEFAULT_LOCAL_ADDRESS})"
|
|
echo "2) 🌐 LAN Server (local network IP) (autodetect)"
|
|
echo "3) ☁️ Public Server (domain or public IP) (manual)"
|
|
local DEPLOYMENT_TYPE_INPUT="${CLI_DEPLOYMENT_TYPE}"
|
|
if [ "$NON_INTERACTIVE" = "1" ] && [ -z "$DEPLOYMENT_TYPE_INPUT" ]; then
|
|
DEPLOYMENT_TYPE_INPUT="local"
|
|
fi
|
|
while true; do
|
|
if [ -z "$DEPLOYMENT_TYPE_INPUT" ]; then
|
|
read -p "$(echo -e "${YELLOW}🔧 Select deployment type [1-3]: ${NC}")" DEPLOYMENT_TYPE_INPUT
|
|
fi
|
|
case "${DEPLOYMENT_TYPE_INPUT,,}" in
|
|
1|local)
|
|
DEPLOYMENT_TYPE=local
|
|
;;
|
|
2|lan)
|
|
DEPLOYMENT_TYPE=lan
|
|
;;
|
|
3|public)
|
|
DEPLOYMENT_TYPE=public
|
|
;;
|
|
*)
|
|
if [ -n "$CLI_DEPLOYMENT_TYPE" ] || [ "$NON_INTERACTIVE" = "1" ]; then
|
|
say ERROR "Invalid deployment type: ${DEPLOYMENT_TYPE_INPUT}"
|
|
exit 1
|
|
fi
|
|
say ERROR "Please select 1, 2, or 3"
|
|
DEPLOYMENT_TYPE_INPUT=""
|
|
continue
|
|
;;
|
|
esac
|
|
break
|
|
done
|
|
if [ -n "$CLI_DEPLOYMENT_TYPE" ] || [ "$NON_INTERACTIVE" = "1" ]; then
|
|
say INFO "Deployment type set to ${DEPLOYMENT_TYPE}."
|
|
fi
|
|
}
|
|
|
|
configure_server() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask, validate_ip, validate_port)
|
|
say HEADER "SERVER CONFIGURATION"
|
|
if [ -n "$CLI_SERVER_ADDRESS" ]; then
|
|
SERVER_ADDRESS="$CLI_SERVER_ADDRESS"
|
|
elif [ "$DEPLOYMENT_TYPE" = "local" ]; then
|
|
SERVER_ADDRESS=$DEFAULT_LOCAL_ADDRESS
|
|
elif [ "$DEPLOYMENT_TYPE" = "lan" ]; then
|
|
local LAN_IP
|
|
LAN_IP=$(ip route get $ROUTE_DETECTION_IP 2>/dev/null | awk 'NR==1{print $7}')
|
|
SERVER_ADDRESS=$(ask "Enter server IP address" "${CLI_SERVER_ADDRESS:-${LAN_IP:-$DEFAULT_FALLBACK_LAN_IP}}" validate_ip)
|
|
else
|
|
SERVER_ADDRESS=$(ask "Enter server address (IP or domain)" "${CLI_SERVER_ADDRESS:-$DEFAULT_DOMAIN_PLACEHOLDER}" )
|
|
fi
|
|
|
|
REALM_PORT=$(ask "Enter client connection port" "${CLI_REALM_PORT:-$DEFAULT_REALM_PORT}" validate_port)
|
|
AUTH_EXTERNAL_PORT=$(ask "Enter auth server port" "${CLI_AUTH_PORT:-$DEFAULT_AUTH_PORT}" validate_port)
|
|
SOAP_EXTERNAL_PORT=$(ask "Enter SOAP API port" "${CLI_SOAP_PORT:-$DEFAULT_SOAP_PORT}" validate_port)
|
|
MYSQL_EXTERNAL_PORT=$(ask "Enter MySQL external port" "${CLI_MYSQL_PORT:-$DEFAULT_MYSQL_PORT}" validate_port)
|
|
}
|
|
|
|
choose_permission_scheme() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask, validate_number)
|
|
say HEADER "PERMISSION SCHEME"
|
|
local CURRENT_UID CURRENT_GID CURRENT_USER_PAIR CURRENT_USER_NAME CURRENT_GROUP_NAME
|
|
CURRENT_UID="$(id -u 2>/dev/null || echo 1000)"
|
|
CURRENT_GID="$(id -g 2>/dev/null || echo 1000)"
|
|
CURRENT_USER_NAME="$(id -un 2>/dev/null || echo user)"
|
|
CURRENT_GROUP_NAME="$(id -gn 2>/dev/null || echo users)"
|
|
CURRENT_USER_PAIR="${CURRENT_UID}:${CURRENT_GID}"
|
|
echo "1) 🏠 Local Root (${PERMISSION_LOCAL_USER})"
|
|
echo "2) 🗂️ Current User (${CURRENT_USER_NAME}:${CURRENT_GROUP_NAME} → ${CURRENT_USER_PAIR})"
|
|
echo "3) ⚙️ Custom"
|
|
local PERMISSION_SCHEME_INPUT="${CLI_PERMISSION_SCHEME}"
|
|
if [ "$NON_INTERACTIVE" = "1" ] && [ -z "$PERMISSION_SCHEME_INPUT" ]; then
|
|
PERMISSION_SCHEME_INPUT="local"
|
|
fi
|
|
while true; do
|
|
if [ -z "$PERMISSION_SCHEME_INPUT" ]; then
|
|
read -p "$(echo -e "${YELLOW}🔧 Select permission scheme [1-3]: ${NC}")" PERMISSION_SCHEME_INPUT
|
|
fi
|
|
case "${PERMISSION_SCHEME_INPUT,,}" in
|
|
1|local)
|
|
CONTAINER_USER="$PERMISSION_LOCAL_USER"
|
|
PERMISSION_SCHEME_NAME="local"
|
|
;;
|
|
2|nfs|user)
|
|
CONTAINER_USER="$CURRENT_USER_PAIR"
|
|
PERMISSION_SCHEME_NAME="user"
|
|
;;
|
|
3|custom)
|
|
local uid gid
|
|
uid="${CLI_CUSTOM_UID:-$(ask "Enter PUID (user id)" $DEFAULT_CUSTOM_UID validate_number)}"
|
|
gid="${CLI_CUSTOM_GID:-$(ask "Enter PGID (group id)" $DEFAULT_CUSTOM_GID validate_number)}"
|
|
CONTAINER_USER="${uid}:${gid}"
|
|
PERMISSION_SCHEME_NAME="custom"
|
|
;;
|
|
*)
|
|
if [ -n "$CLI_PERMISSION_SCHEME" ] || [ "$NON_INTERACTIVE" = "1" ]; then
|
|
say ERROR "Invalid permission scheme: ${PERMISSION_SCHEME_INPUT}"
|
|
exit 1
|
|
fi
|
|
say ERROR "Please select 1, 2, or 3"
|
|
PERMISSION_SCHEME_INPUT=""
|
|
continue
|
|
;;
|
|
esac
|
|
break
|
|
done
|
|
if [ -n "$CLI_PERMISSION_SCHEME" ] || [ "$NON_INTERACTIVE" = "1" ]; then
|
|
say INFO "Permission scheme set to ${PERMISSION_SCHEME_NAME:-$PERMISSION_SCHEME_INPUT}."
|
|
fi
|
|
}
|
|
|
|
configure_database() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask)
|
|
say HEADER "DATABASE CONFIGURATION"
|
|
MYSQL_ROOT_PASSWORD=$(ask "Enter MySQL root password" "${CLI_MYSQL_PASSWORD:-$DEFAULT_MYSQL_PASSWORD}")
|
|
}
|
|
|
|
configure_storage() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask)
|
|
say HEADER "STORAGE CONFIGURATION"
|
|
if [ -n "$CLI_STORAGE_PATH" ]; then
|
|
STORAGE_PATH="$CLI_STORAGE_PATH"
|
|
elif [ "$NON_INTERACTIVE" = "1" ]; then
|
|
if [ "$DEPLOYMENT_TYPE" = "local" ]; then
|
|
STORAGE_PATH=$DEFAULT_LOCAL_STORAGE
|
|
else
|
|
STORAGE_PATH=$DEFAULT_MOUNT_STORAGE
|
|
fi
|
|
else
|
|
echo "1) 💾 ${DEFAULT_LOCAL_STORAGE} (local)"
|
|
echo "2) 🌐 ${DEFAULT_NFS_STORAGE} (NFS)"
|
|
echo "3) 📁 Custom"
|
|
while true; do
|
|
read -p "$(echo -e "${YELLOW}🔧 Select storage option [1-3]: ${NC}")" s
|
|
case "$s" in
|
|
1) STORAGE_PATH=$DEFAULT_LOCAL_STORAGE; break;;
|
|
2) STORAGE_PATH=$DEFAULT_NFS_STORAGE; break;;
|
|
3) STORAGE_PATH=$(ask "Enter custom storage path" "$DEFAULT_MOUNT_STORAGE"); break;;
|
|
*) say ERROR "Please select 1, 2, or 3";;
|
|
esac
|
|
done
|
|
fi
|
|
say INFO "Storage path set to ${STORAGE_PATH}"
|
|
}
|
|
|
|
configure_backups() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask, validate_number)
|
|
say HEADER "BACKUP CONFIGURATION"
|
|
BACKUP_RETENTION_DAYS=$(ask "Daily backups retention (days)" "${CLI_BACKUP_DAYS:-$DEFAULT_BACKUP_DAYS}" validate_number)
|
|
BACKUP_RETENTION_HOURS=$(ask "Hourly backups retention (hours)" "${CLI_BACKUP_HOURS:-$DEFAULT_BACKUP_HOURS}" validate_number)
|
|
BACKUP_DAILY_TIME=$(ask "Daily backup hour (00-23, UTC)" "${CLI_BACKUP_TIME:-$DEFAULT_BACKUP_TIME}" validate_number)
|
|
}
|
|
|
|
select_server_preset() {
|
|
# setup.sh -> scripts/bash/setup/ui.sh (say, ask)
|
|
if [ "$ENABLE_CONFIG_PRESETS" = "1" ]; then
|
|
say HEADER "SERVER CONFIGURATION PRESET"
|
|
|
|
if [ -n "$CLI_CONFIG_PRESET" ]; then
|
|
SERVER_CONFIG_PRESET="$CLI_CONFIG_PRESET"
|
|
say INFO "Using preset from command line: $SERVER_CONFIG_PRESET"
|
|
return 0
|
|
fi
|
|
|
|
declare -A CONFIG_PRESET_NAMES=()
|
|
declare -A CONFIG_PRESET_DESCRIPTIONS=()
|
|
declare -A CONFIG_MENU_INDEX=()
|
|
local config_dir="$SCRIPT_DIR/config/presets"
|
|
local menu_index=1
|
|
|
|
echo "Choose a server configuration preset:"
|
|
|
|
# setup.sh -> scripts/python/parse-config-presets.py (preset metadata)
|
|
if [ -x "$SCRIPT_DIR/scripts/python/parse-config-presets.py" ] && [ -d "$config_dir" ]; then
|
|
while IFS=$'\t' read -r preset_key preset_name preset_desc; do
|
|
[ -n "$preset_key" ] || continue
|
|
CONFIG_PRESET_NAMES["$preset_key"]="$preset_name"
|
|
CONFIG_PRESET_DESCRIPTIONS["$preset_key"]="$preset_desc"
|
|
CONFIG_MENU_INDEX[$menu_index]="$preset_key"
|
|
echo "$menu_index) $preset_name"
|
|
echo " $preset_desc"
|
|
menu_index=$((menu_index + 1))
|
|
done < <(python3 "$SCRIPT_DIR/scripts/python/parse-config-presets.py" list --presets-dir "$config_dir")
|
|
else
|
|
# Fallback if parser script not available
|
|
CONFIG_MENU_INDEX[1]="none"
|
|
CONFIG_PRESET_NAMES["none"]="Default (No Preset)"
|
|
CONFIG_PRESET_DESCRIPTIONS["none"]="Use default AzerothCore settings"
|
|
echo "1) Default (No Preset)"
|
|
echo " Use default AzerothCore settings without any modifications"
|
|
fi
|
|
|
|
local max_config_option=$((menu_index - 1))
|
|
|
|
if [ "$NON_INTERACTIVE" = "1" ]; then
|
|
SERVER_CONFIG_PRESET="none"
|
|
say INFO "Non-interactive mode: Using default configuration preset"
|
|
return 0
|
|
fi
|
|
|
|
while true; do
|
|
read -p "$(echo -e "${YELLOW}🎯 Select server configuration [1-$max_config_option]: ${NC}")" choice
|
|
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "$max_config_option" ]; then
|
|
SERVER_CONFIG_PRESET="${CONFIG_MENU_INDEX[$choice]}"
|
|
local chosen_name="${CONFIG_PRESET_NAMES[$SERVER_CONFIG_PRESET]}"
|
|
say INFO "Selected: $chosen_name"
|
|
break
|
|
else
|
|
say ERROR "Please select a number between 1 and $max_config_option"
|
|
fi
|
|
done
|
|
else
|
|
# Config presets disabled - use default
|
|
SERVER_CONFIG_PRESET="none"
|
|
say INFO "Server configuration presets disabled - using default settings"
|
|
fi
|
|
}
|