mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-01-22 13:06:24 +00:00
feat: cleanup setup into sub-modules
This commit is contained in:
223
scripts/bash/setup/config_flow.sh
Normal file
223
scripts/bash/setup/config_flow.sh
Normal file
@@ -0,0 +1,223 @@
|
||||
# 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
|
||||
}
|
||||
Reference in New Issue
Block a user