# Setup defaults and template-backed constants for setup.sh # setup.sh -> scripts/bash/lib/common.sh (shared helpers) source "$SCRIPT_DIR/scripts/bash/lib/common.sh" # Feature Flags # Set to 0 to disable server configuration preset selection ENABLE_CONFIG_PRESETS="${ENABLE_CONFIG_PRESETS:-0}" sanitize_project_name(){ project_name::sanitize "$1" } resolve_project_image_tag(){ local project="$1" tag="$2" echo "${project}:${tag}" } declare -A TEMPLATE_VALUE_MAP=( [DEFAULT_MYSQL_PASSWORD]=MYSQL_ROOT_PASSWORD [DEFAULT_REALM_PORT]=WORLD_EXTERNAL_PORT [DEFAULT_AUTH_PORT]=AUTH_EXTERNAL_PORT [DEFAULT_SOAP_PORT]=SOAP_EXTERNAL_PORT [DEFAULT_MYSQL_PORT]=MYSQL_EXTERNAL_PORT [DEFAULT_PLAYERBOT_MIN]=PLAYERBOT_MIN_BOTS [DEFAULT_PLAYERBOT_MAX]=PLAYERBOT_MAX_BOTS [DEFAULT_LOCAL_STORAGE]=STORAGE_PATH [DEFAULT_BACKUP_PATH]=BACKUP_PATH [DEFAULT_COMPOSE_OVERRIDE_MYSQL_EXPOSE_ENABLED]=COMPOSE_OVERRIDE_MYSQL_EXPOSE_ENABLED [DEFAULT_COMPOSE_OVERRIDE_WORLDSERVER_DEBUG_LOGGING_ENABLED]=COMPOSE_OVERRIDE_WORLDSERVER_DEBUG_LOGGING_ENABLED [PERMISSION_LOCAL_USER]=DEFAULT_PERMISSION_LOCAL_USER [PERMISSION_NFS_USER]=DEFAULT_PERMISSION_NFS_USER [DEFAULT_CUSTOM_UID]=DEFAULT_CUSTOM_UID [DEFAULT_CUSTOM_GID]=DEFAULT_CUSTOM_GID [DEFAULT_LOCAL_ADDRESS]=SERVER_ADDRESS [DEFAULT_BACKUP_DAYS]=BACKUP_RETENTION_DAYS [DEFAULT_BACKUP_HOURS]=BACKUP_RETENTION_HOURS [DEFAULT_BACKUP_TIME]=BACKUP_DAILY_TIME [DEFAULT_BACKUP_HEALTHCHECK_MAX_MINUTES]=BACKUP_HEALTHCHECK_MAX_MINUTES [DEFAULT_BACKUP_HEALTHCHECK_GRACE_SECONDS]=BACKUP_HEALTHCHECK_GRACE_SECONDS [DEFAULT_NFS_STORAGE]=DEFAULT_NFS_STORAGE_PATH [DEFAULT_MOUNT_STORAGE]=DEFAULT_MOUNT_STORAGE_PATH [DEFAULT_MYSQL_IMAGE]=MYSQL_IMAGE [DEFAULT_AC_DB_IMPORT_IMAGE]=AC_DB_IMPORT_IMAGE [DEFAULT_AC_AUTHSERVER_IMAGE]=AC_AUTHSERVER_IMAGE [DEFAULT_AC_WORLDSERVER_IMAGE]=AC_WORLDSERVER_IMAGE [DEFAULT_AC_CLIENT_DATA_IMAGE]=AC_CLIENT_DATA_IMAGE [DEFAULT_DOCKER_IMAGE_TAG]=DOCKER_IMAGE_TAG [DEFAULT_AUTHSERVER_IMAGE_BASE]=AC_AUTHSERVER_IMAGE_BASE [DEFAULT_WORLDSERVER_IMAGE_BASE]=AC_WORLDSERVER_IMAGE_BASE [DEFAULT_DB_IMPORT_IMAGE_BASE]=AC_DB_IMPORT_IMAGE_BASE [DEFAULT_CLIENT_DATA_IMAGE_BASE]=AC_CLIENT_DATA_IMAGE_BASE [DEFAULT_AUTH_IMAGE_PLAYERBOTS]=AC_AUTHSERVER_IMAGE_PLAYERBOTS [DEFAULT_WORLD_IMAGE_PLAYERBOTS]=AC_WORLDSERVER_IMAGE_PLAYERBOTS [DEFAULT_CLIENT_DATA_IMAGE_PLAYERBOTS]=AC_CLIENT_DATA_IMAGE_PLAYERBOTS [DEFAULT_AUTH_IMAGE_MODULES]=AC_AUTHSERVER_IMAGE_MODULES [DEFAULT_WORLD_IMAGE_MODULES]=AC_WORLDSERVER_IMAGE_MODULES [DEFAULT_ALPINE_GIT_IMAGE]=ALPINE_GIT_IMAGE [DEFAULT_ALPINE_IMAGE]=ALPINE_IMAGE [DEFAULT_DB_AUTH_NAME]=DB_AUTH_NAME [DEFAULT_DB_WORLD_NAME]=DB_WORLD_NAME [DEFAULT_DB_CHARACTERS_NAME]=DB_CHARACTERS_NAME [DEFAULT_DB_PLAYERBOTS_NAME]=DB_PLAYERBOTS_NAME [DEFAULT_CONTAINER_MYSQL]=CONTAINER_MYSQL [DEFAULT_CONTAINER_DB_IMPORT]=CONTAINER_DB_IMPORT [DEFAULT_CONTAINER_DB_INIT]=CONTAINER_DB_INIT [DEFAULT_CONTAINER_BACKUP]=CONTAINER_BACKUP [DEFAULT_CONTAINER_MODULES]=CONTAINER_MODULES [DEFAULT_CONTAINER_POST_INSTALL]=CONTAINER_POST_INSTALL [DEFAULT_COMPOSE_PROJECT_NAME]=COMPOSE_PROJECT_NAME [DEFAULT_CLIENT_DATA_PATH]=CLIENT_DATA_PATH [DEFAULT_CLIENT_DATA_CACHE_PATH]=CLIENT_DATA_CACHE_PATH [DEFAULT_CLIENT_DATA_VERSION]=CLIENT_DATA_VERSION [DEFAULT_NETWORK_NAME]=NETWORK_NAME [DEFAULT_NETWORK_SUBNET]=NETWORK_SUBNET [DEFAULT_NETWORK_GATEWAY]=NETWORK_GATEWAY [DEFAULT_MYSQL_CHARACTER_SET]=MYSQL_CHARACTER_SET [DEFAULT_MYSQL_COLLATION]=MYSQL_COLLATION [DEFAULT_MYSQL_MAX_CONNECTIONS]=MYSQL_MAX_CONNECTIONS [DEFAULT_MYSQL_INNODB_BUFFER_POOL_SIZE]=MYSQL_INNODB_BUFFER_POOL_SIZE [DEFAULT_MYSQL_INNODB_LOG_FILE_SIZE]=MYSQL_INNODB_LOG_FILE_SIZE [DEFAULT_MYSQL_INNODB_REDO_LOG_CAPACITY]=MYSQL_INNODB_REDO_LOG_CAPACITY [DEFAULT_MYSQL_RUNTIME_TMPFS_SIZE]=MYSQL_RUNTIME_TMPFS_SIZE [DEFAULT_MYSQL_DISABLE_BINLOG]=MYSQL_DISABLE_BINLOG [DEFAULT_MYSQL_CONFIG_DIR]=MYSQL_CONFIG_DIR [DEFAULT_MYSQL_HOST]=MYSQL_HOST [DEFAULT_DB_WAIT_RETRIES]=DB_WAIT_RETRIES [DEFAULT_DB_WAIT_SLEEP]=DB_WAIT_SLEEP [DEFAULT_DB_RECONNECT_SECONDS]=DB_RECONNECT_SECONDS [DEFAULT_DB_RECONNECT_ATTEMPTS]=DB_RECONNECT_ATTEMPTS [DEFAULT_DB_UPDATES_ALLOWED_MODULES]=DB_UPDATES_ALLOWED_MODULES [DEFAULT_DB_UPDATES_REDUNDANCY]=DB_UPDATES_REDUNDANCY [DEFAULT_DB_LOGIN_WORKER_THREADS]=DB_LOGIN_WORKER_THREADS [DEFAULT_DB_WORLD_WORKER_THREADS]=DB_WORLD_WORKER_THREADS [DEFAULT_DB_CHARACTER_WORKER_THREADS]=DB_CHARACTER_WORKER_THREADS [DEFAULT_DB_LOGIN_SYNCH_THREADS]=DB_LOGIN_SYNCH_THREADS [DEFAULT_DB_WORLD_SYNCH_THREADS]=DB_WORLD_SYNCH_THREADS [DEFAULT_DB_CHARACTER_SYNCH_THREADS]=DB_CHARACTER_SYNCH_THREADS [DEFAULT_HOST_ZONEINFO_PATH]=HOST_ZONEINFO_PATH [DEFAULT_ELUNA_SCRIPT_PATH]=AC_ELUNA_SCRIPT_PATH [DEFAULT_PMA_EXTERNAL_PORT]=PMA_EXTERNAL_PORT [DEFAULT_PMA_UPLOAD_LIMIT]=PMA_UPLOAD_LIMIT [DEFAULT_PMA_MEMORY_LIMIT]=PMA_MEMORY_LIMIT [DEFAULT_PMA_MAX_EXECUTION_TIME]=PMA_MAX_EXECUTION_TIME [DEFAULT_KEIRA3_EXTERNAL_PORT]=KEIRA3_EXTERNAL_PORT [DEFAULT_PMA_USER]=PMA_USER [DEFAULT_PMA_ARBITRARY]=PMA_ARBITRARY [DEFAULT_PMA_ABSOLUTE_URI]=PMA_ABSOLUTE_URI [DEFAULT_AUTH_INTERNAL_PORT]=AUTH_PORT [DEFAULT_WORLD_INTERNAL_PORT]=WORLD_PORT [DEFAULT_SOAP_INTERNAL_PORT]=SOAP_PORT [DEFAULT_MYSQL_INTERNAL_PORT]=MYSQL_PORT [DEFAULT_TZ]=TZ [DEFAULT_MYSQL_ROOT_HOST]=MYSQL_ROOT_HOST [DEFAULT_MYSQL_USER]=MYSQL_USER [DEFAULT_ELUNA_ENABLED]=AC_ELUNA_ENABLED [DEFAULT_ELUNA_TRACE_BACK]=AC_ELUNA_TRACE_BACK [DEFAULT_ELUNA_AUTO_RELOAD]=AC_ELUNA_AUTO_RELOAD [DEFAULT_ELUNA_BYTECODE_CACHE]=AC_ELUNA_BYTECODE_CACHE [DEFAULT_ELUNA_AUTO_RELOAD_INTERVAL]=AC_ELUNA_AUTO_RELOAD_INTERVAL [DEFAULT_ELUNA_REQUIRE_PATHS]=AC_ELUNA_REQUIRE_PATHS [DEFAULT_ELUNA_REQUIRE_CPATHS]=AC_ELUNA_REQUIRE_CPATHS [DEFAULT_MODULE_ELUNA]=MODULE_ELUNA ) for __template_var in "${!TEMPLATE_VALUE_MAP[@]}"; do __template_key="${TEMPLATE_VALUE_MAP[$__template_var]}" __template_value="$(get_template_value "${__template_key}")" printf -v "${__template_var}" '%s' "${__template_value}" readonly "${__template_var}" done unset __template_var __template_key __template_value # Static values readonly DEFAULT_FALLBACK_LAN_IP="192.168.1.100" readonly DEFAULT_DOMAIN_PLACEHOLDER="your-domain.com" # Module preset names (not in template) readonly DEFAULT_PRESET_SUGGESTED="suggested-modules" readonly DEFAULT_PRESET_PLAYERBOTS="suggested-modules-playerbots" # Health check configuration (loaded via loop) readonly -a HEALTHCHECK_KEYS=( MYSQL_HEALTHCHECK_INTERVAL MYSQL_HEALTHCHECK_TIMEOUT MYSQL_HEALTHCHECK_RETRIES MYSQL_HEALTHCHECK_START_PERIOD AUTH_HEALTHCHECK_INTERVAL AUTH_HEALTHCHECK_TIMEOUT AUTH_HEALTHCHECK_RETRIES AUTH_HEALTHCHECK_START_PERIOD WORLD_HEALTHCHECK_INTERVAL WORLD_HEALTHCHECK_TIMEOUT WORLD_HEALTHCHECK_RETRIES WORLD_HEALTHCHECK_START_PERIOD BACKUP_HEALTHCHECK_INTERVAL BACKUP_HEALTHCHECK_TIMEOUT BACKUP_HEALTHCHECK_RETRIES BACKUP_HEALTHCHECK_START_PERIOD ) for __hc_key in "${HEALTHCHECK_KEYS[@]}"; do __hc_value="$(get_template_value "${__hc_key}")" printf -v "DEFAULT_${__hc_key}" '%s' "$__hc_value" readonly "DEFAULT_${__hc_key}" done unset __hc_key __hc_value # Route detection IP (not in template) readonly ROUTE_DETECTION_IP="1.1.1.1"