name to change
This commit is contained in:
		
							parent
							
								
									bf683f42e9
								
							
						
					
					
						commit
						a4f5789611
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,3 @@ | |||||||
| cmangos-docker.wiki | cmangos-docker.wiki | ||||||
| mangosd_data/* | mangosd_data/* | ||||||
|  | database/* | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
								
							| @ -1,22 +1,25 @@ | |||||||
| # wow private server | # wow private server | ||||||
| 
 | 
 | ||||||
| ## Versions prises en charge |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## Pre requis | ## Pre requis | ||||||
| 
 | 
 | ||||||
|  | - Linux 🐧 | ||||||
|  | - Docker :whale: | ||||||
| - Clients: | - Clients: | ||||||
| |                  Game name                 | Game version |  Keyword  | |  | ||||||
| |--------------------------------------------|--------------|-----------| |  | ||||||
| |             World of Warcraft®             |  **v1.12.x** | `classic` | |  | ||||||
| |   World of Warcraft: The Burning Crusade®  |  **v2.4.3**  |   `tbc`   | |  | ||||||
| | World of Warcraft: Wrath of the Link King® |  **v3.3.5a** |  `wotlk`  | |  | ||||||
| 
 | 
 | ||||||
| - Docker | ## Versions prises en charge | ||||||
|  | 
 | ||||||
|  | |                  Game name                 | Game version |  Keyword  |  client download  | | ||||||
|  | |--------------------------------------------|--------------|-----------|-------------------| | ||||||
|  | |             World of Warcraft®             |  **v1.12.x** | `classic` | https://archive.org/download/World_of_Warcraft_Client_and_Installation_Archive/ISO/WoW-1.12.1_install.rar | | ||||||
|  | |   World of Warcraft: The Burning Crusade®  |  **v2.4.3**  |   `tbc`   | https://archive.org/download/World_of_Warcraft_Client_and_Installation_Archive/ISO/WoW-2.4.3_install.rar | | ||||||
|  | | World of Warcraft: Wrath of the Link King® |  **v3.3.5a** |  `wotlk`  |                   | | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ## Configuration | ## Configuration | ||||||
| 
 | 
 | ||||||
| - .env path to wow client | - Renseigner dans le fichier `.env` : | ||||||
|  |     - Le chemin absolue vers le client WOW (Classic, tbc ou wotlk) | ||||||
|  |     - La version de WOW correspondante au client | ||||||
| 
 | 
 | ||||||
| ## Installation | ## Installation | ||||||
| 
 | 
 | ||||||
| @ -25,7 +28,7 @@ | |||||||
| ./builder/run.sh extract | ./builder/run.sh extract | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| > Choisir l'import en HD avec le plus de CPU possible car c'est long | > Choisir l'import en HD avec le plus de CPU possible car c'est long ☕ | ||||||
| 
 | 
 | ||||||
| - Lançer la base de données: | - Lançer la base de données: | ||||||
| ```bash | ```bash | ||||||
| @ -37,5 +40,5 @@ docker compose up wow-db | |||||||
| ./builder/run.sh init-db | ./builder/run.sh init-db | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| > Patienter le temps de la mise en place de la base de données | > Patienter le temps de la mise en place de la base de données ☕ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ services: | |||||||
|       - wow |       - wow | ||||||
| 
 | 
 | ||||||
|   mangosd: |   mangosd: | ||||||
|     image: "ghcr.io/byloth/cmangos/${WOW_VERSION}:latest" |     image: dockerregistry.legaragenumerique.fr/wow-server-wotlk:runner | ||||||
|     container_name: wow-mangosd |     container_name: wow-mangosd | ||||||
|     depends_on: |     depends_on: | ||||||
|       - database |       - database | ||||||
| @ -33,7 +33,7 @@ services: | |||||||
|       - wow |       - wow | ||||||
| 
 | 
 | ||||||
|   realmd: |   realmd: | ||||||
|     image: "ghcr.io/byloth/cmangos/${WOW_VERSION}:latest" |     image: dockerregistry.legaragenumerique.fr/wow-server-wotlk:runner | ||||||
|     container_name: wow-realmd |     container_name: wow-realmd | ||||||
|     depends_on: |     depends_on: | ||||||
|       - database |       - database | ||||||
|  | |||||||
| @ -134,8 +134,8 @@ ENV MANGOS_CHARACTERS_DBNAME="${EXPANSION}characters" | |||||||
| ENV MANGOS_LOGS_DBNAME="${EXPANSION}logs" | ENV MANGOS_LOGS_DBNAME="${EXPANSION}logs" | ||||||
| ENV MANGOS_REALMD_DBNAME="${EXPANSION}realmd" | ENV MANGOS_REALMD_DBNAME="${EXPANSION}realmd" | ||||||
| 
 | 
 | ||||||
| COPY builder/entrypoint.sh / | COPY entrypoint-builder.sh /entrypoint.sh | ||||||
| COPY builder/InstallFullDB.config "${DATABASE_DIR}/" | COPY InstallFullDB.config "${DATABASE_DIR}/" | ||||||
| 
 | 
 | ||||||
| ENTRYPOINT ["/entrypoint.sh"] | ENTRYPOINT ["/entrypoint.sh"] | ||||||
| CMD ["bash"] | CMD ["bash"] | ||||||
| @ -179,7 +179,7 @@ WORKDIR "${MANGOS_DIR}" | |||||||
| 
 | 
 | ||||||
| ARG EXPANSION | ARG EXPANSION | ||||||
| COPY --from=builder "${HOME_DIR}/run" "${MANGOS_DIR}" | COPY --from=builder "${HOME_DIR}/run" "${MANGOS_DIR}" | ||||||
| COPY runner/entrypoint.sh / | COPY entrypoint-runner.sh /entrypoint.sh | ||||||
| 
 | 
 | ||||||
| ENV VOLUME_DIR="/var/lib/mangos" | ENV VOLUME_DIR="/var/lib/mangos" | ||||||
| ENV TMPDIR="${VOLUME_DIR}/tmp" | ENV TMPDIR="${VOLUME_DIR}/tmp" | ||||||
| @ -202,15 +202,11 @@ CMD ["bash"] | |||||||
| EXPOSE 3443 3724 7878 8085 8086 | EXPOSE 3443 3724 7878 8085 8086 | ||||||
| VOLUME ["${VOLUME_DIR}"] | VOLUME ["${VOLUME_DIR}"] | ||||||
| 
 | 
 | ||||||
| ARG COMMIT_SHA |  | ||||||
| ARG CREATE_DATE |  | ||||||
| ARG VERSION | ARG VERSION | ||||||
| LABEL org.opencontainers.image.title="CMaNGOS Runner \"${EXPANSION}\" version" | LABEL org.opencontainers.image.title="CMaNGOS Runner \"${EXPANSION}\" version" | ||||||
| LABEL org.opencontainers.image.description="A CMaNGOS \"${EXPANSION}\" version Docker image ready-to-use to host your emulated private server for WoW wherever you want." | LABEL org.opencontainers.image.description="A CMaNGOS \"${EXPANSION}\" version Docker image ready-to-use to host your emulated private server for WoW wherever you want." | ||||||
| LABEL org.opencontainers.image.licenses="GPL-2.0" | LABEL org.opencontainers.image.licenses="GPL-2.0" | ||||||
| LABEL org.opencontainers.image.version="${VERSION}" | LABEL org.opencontainers.image.version="${VERSION}" | ||||||
| LABEL org.opencontainers.image.revision="${COMMIT_SHA}" |  | ||||||
| LABEL org.opencontainers.image.created="${CREATE_DATE}" |  | ||||||
| 
 | 
 | ||||||
| ARG MANGOS_SHA1 | ARG MANGOS_SHA1 | ||||||
| LABEL "net.cmangos.mangos-${EXPANSION}.revision"="${MANGOS_SHA1}" | LABEL "net.cmangos.mangos-${EXPANSION}.revision"="${MANGOS_SHA1}" | ||||||
|  | |||||||
							
								
								
									
										67
									
								
								docker/InstallFullDB.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								docker/InstallFullDB.config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | #################################################################################################### | ||||||
|  | # This is the config file for the 'InstallFullDB.sh' script | ||||||
|  | # | ||||||
|  | # You need to customize | ||||||
|  | # MYSQL_HOST: Host on which the database resides | ||||||
|  | # MYSQL_PORT: Port on which the database is running | ||||||
|  | # MYSQL_USERNAME: Your a valid mysql username | ||||||
|  | # MYSQL_PASSWORD: Your corresponding mysql password | ||||||
|  | # MYSQL_PATH: Your mysql command (usually mysql) | ||||||
|  | # WORLD_DB_NAME: Your content database | ||||||
|  | # CORE_PATH: Your path to core's directory | ||||||
|  | # | ||||||
|  | #################################################################################################### | ||||||
|  | 
 | ||||||
|  | ## Define the host on which the mangos database resides (typically localhost) | ||||||
|  | MYSQL_HOST="${MANGOS_DBHOST}" | ||||||
|  | 
 | ||||||
|  | ## Define the port on which the mangos database is running (typically 3306) | ||||||
|  | MYSQL_PORT="${MANGOS_DBPORT}" | ||||||
|  | 
 | ||||||
|  | ## Define your username | ||||||
|  | MYSQL_USERNAME="${MANGOS_DBUSER}" | ||||||
|  | 
 | ||||||
|  | ## Define your password (It is suggested to restrict read access to this file!) | ||||||
|  | MYSQL_PASSWORD="${MANGOS_DBPASS}" | ||||||
|  | 
 | ||||||
|  | ## Define default mysql address binding(you can set "%" to be able to connect from any computer) | ||||||
|  | MYSQL_USERIP="%" | ||||||
|  | 
 | ||||||
|  | ## Define the databases names (let them empty for default name '<expansion><dbtype>') | ||||||
|  | WORLD_DB_NAME="${MANGOS_WORLD_DBNAME}" | ||||||
|  | REALM_DB_NAME="${MANGOS_REALMD_DBNAME}" | ||||||
|  | CHAR_DB_NAME="${MANGOS_CHARACTERS_DBNAME}" | ||||||
|  | LOGS_DB_NAME="${MANGOS_LOGS_DBNAME}" | ||||||
|  | 
 | ||||||
|  | ## Define your mysql programm if this differs | ||||||
|  | MYSQL_PATH="/usr/bin/mariadb" | ||||||
|  | 
 | ||||||
|  | ## Define the path to your mysql dump binary folder | ||||||
|  | MYSQL_DUMP_PATH="/usr/bin/mariadb-dump" | ||||||
|  | 
 | ||||||
|  | ## Define the path to your core's folder | ||||||
|  | CORE_PATH="${MANGOS_DIR}" | ||||||
|  | 
 | ||||||
|  | ## Define if the 'locales' directory for processing localization/multi-language SQL files needs to be used | ||||||
|  | ## Set the variable to "YES" to use the locales directory | ||||||
|  | LOCALES="YES" | ||||||
|  | 
 | ||||||
|  | ## Define if you want to wait a bit before applying the full database | ||||||
|  | FORCE_WAIT="NO" | ||||||
|  | 
 | ||||||
|  | ## Define if the 'dev' directory for processing development SQL files needs to be used | ||||||
|  | ## Set the variable to "YES" to use the dev directory | ||||||
|  | DEV_UPDATES="NO" | ||||||
|  | 
 | ||||||
|  | ## Define if AHBot SQL updates need to be applied (by default, assume the core is built without AHBot) | ||||||
|  | ## Set the variable to "YES" to import AHBot sql. | ||||||
|  | AHBOT="NO" | ||||||
|  | 
 | ||||||
|  | ## Define if the 'src/modules/PlayerBots/sql' directory for processing development SQL files needs to be used | ||||||
|  | ## Set the variable to "YES" to use the playerbots directory | ||||||
|  | PLAYERBOTS_DB="NO" | ||||||
|  | 
 | ||||||
|  | # Enjoy using the tool | ||||||
							
								
								
									
										430
									
								
								docker/entrypoint-builder.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										430
									
								
								docker/entrypoint-builder.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,430 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | readonly SCRIPT_VERSION="1.0.0" | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | # Utils: | ||||||
|  | # | ||||||
|  | function echoerr() | ||||||
|  | { | ||||||
|  |     echo ${@} >&2 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function success() | ||||||
|  | { | ||||||
|  |     echo -e "\e[32m${1}\e[0m" | ||||||
|  | } | ||||||
|  | function info() | ||||||
|  | { | ||||||
|  |     echo -e "\e[36m${1}\e[0m" | ||||||
|  | } | ||||||
|  | function warning() | ||||||
|  | { | ||||||
|  |     if [[ "${2}" == "--underline" ]] | ||||||
|  |     then | ||||||
|  |         echo -e "\e[4;33m${1}\e[0m" | ||||||
|  |     else | ||||||
|  |         echo -e "\e[33m${1}\e[0m" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | function error() | ||||||
|  | { | ||||||
|  |     if [[ "${2}" == "--underline" ]] | ||||||
|  |     then | ||||||
|  |         echo -e "\e[4;31m${1}\e[0m" | ||||||
|  |     else | ||||||
|  |         echo -e "\e[31m${1}\e[0m" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function mysql_execute() | ||||||
|  | { | ||||||
|  |     mariadb "-h${MANGOS_DBHOST}" "-P${MANGOS_DBPORT}" "-u${MYSQL_SUPERUSER}" "-p${MYSQL_SUPERPASS}" ${@} | ||||||
|  | } | ||||||
|  | function mysql_dump() | ||||||
|  | { | ||||||
|  |     local DATABASE_NAME="${1}" | ||||||
|  |     local OUTPUT_FILE="${2}" | ||||||
|  | 
 | ||||||
|  |     mariadb-dump "-h${MANGOS_DBHOST}" "-P${MANGOS_DBPORT}" "-u${MYSQL_SUPERUSER}" "-p${MYSQL_SUPERPASS}" \ | ||||||
|  |         "${DATABASE_NAME}" --opt --result-file="${OUTPUT_FILE}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Sub-functions: | ||||||
|  | # | ||||||
|  | function install_updates() | ||||||
|  | { | ||||||
|  |     cd "${DATABASE_DIR}" | ||||||
|  | 
 | ||||||
|  |     ./InstallFullDB.sh -UpdateCore | ||||||
|  | 
 | ||||||
|  |     if [[ "${1}" == "--world" ]] | ||||||
|  |     then | ||||||
|  |         ./InstallFullDB.sh -World | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Main functions: | ||||||
|  | # | ||||||
|  | function extract_resources_from_client() | ||||||
|  | { | ||||||
|  |     cd "${VOLUME_DIR}" | ||||||
|  | 
 | ||||||
|  |     if [[ -f ".resext" ]] || [[ $(ls | grep -c -E "Cameras|dbc|maps|mmaps|vmaps") -gt 0 ]] | ||||||
|  |     then | ||||||
|  |         echo "" | ||||||
|  |         echo -e " $(warning "WARNING!" --underline)" | ||||||
|  |         echo -e "  $(warning "└") It seems that you've already extracted the resources from the client before." | ||||||
|  |         echo -e "    If you continue, existing resources will be overwritten by the new ones." | ||||||
|  |         echo "" | ||||||
|  |         read -p "Are you sure to continue? [Y/n]: " ANSWER | ||||||
|  | 
 | ||||||
|  |         if [[ "${ANSWER}" != "y" ]] && [[ "${ANSWER}" != "Y" ]] | ||||||
|  |         then | ||||||
|  |             echo -e " └ Ok, no problem! Resources have been left untouched." | ||||||
|  | 
 | ||||||
|  |             return | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         rm -rf Cameras/ \ | ||||||
|  |                dbc/ \ | ||||||
|  |                maps/ \ | ||||||
|  |                mmaps/ \ | ||||||
|  |                vmaps/ | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     cd "${HOME_DIR}/run/bin/tools" | ||||||
|  | 
 | ||||||
|  |     cp * "${HOME_DIR}/wow-client/" | ||||||
|  |     cd "${HOME_DIR}/wow-client" | ||||||
|  | 
 | ||||||
|  |     ./ExtractResources.sh ${@} | ||||||
|  | 
 | ||||||
|  |     mv Cameras "${VOLUME_DIR}/Cameras" | ||||||
|  |     mv dbc "${VOLUME_DIR}/dbc" | ||||||
|  |     mv maps "${VOLUME_DIR}/maps" | ||||||
|  |     mv mmaps "${VOLUME_DIR}/mmaps" | ||||||
|  |     mv vmaps "${VOLUME_DIR}/vmaps" | ||||||
|  | 
 | ||||||
|  |     mkdir -p "${VOLUME_DIR}/logs" | ||||||
|  |     mv *.log "${VOLUME_DIR}/logs/" | ||||||
|  | 
 | ||||||
|  |     rm -rf Buildings/ \ | ||||||
|  |        \ | ||||||
|  |        ExtractResources.sh \ | ||||||
|  |        MoveMapGen \ | ||||||
|  |        MoveMapGen.sh \ | ||||||
|  |        ad \ | ||||||
|  |        offmesh.txt \ | ||||||
|  |        vmap_assembler \ | ||||||
|  |        vmap_extractor | ||||||
|  | 
 | ||||||
|  |     echo "${SCRIPT_VERSION}" > "${VOLUME_DIR}/.resext" | ||||||
|  | } | ||||||
|  | function init_db() | ||||||
|  | { | ||||||
|  |     cd "${DATABASE_DIR}" | ||||||
|  | 
 | ||||||
|  |     echo "" | ||||||
|  |     echo "This procedure will create all the databases required by the server" | ||||||
|  |     echo " to run properly and will initialize them with the default data." | ||||||
|  |     echo "" | ||||||
|  |     echo -e " $(warning "WARNING!" --underline)" | ||||||
|  |     echo -e "  $(warning "└") Please note that, if you have already initialized the databases before," | ||||||
|  |                  echo -e "     this procedure will prune $(info "ALL") of your data and" | ||||||
|  |                  echo -e "     they will be lost $(info "FOREVER") (it's a very long time)!" | ||||||
|  |     echo "" | ||||||
|  |     read -p "Are you sure to continue? [Y/n]: " ANSWER | ||||||
|  | 
 | ||||||
|  |     if [[ "${ANSWER}" != "y" ]] && [[ "${ANSWER}" != "Y" ]] | ||||||
|  |     then | ||||||
|  |         echo -e " └ Ok, no problem! Databases have been left untouched." | ||||||
|  | 
 | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     echo -e " └ Please, wait... Initializing databases..." | ||||||
|  |     echo "" | ||||||
|  |     echo -e " --------------------------------------" | ||||||
|  | 
 | ||||||
|  |     ./InstallFullDB.sh -InstallAll "${MYSQL_SUPERUSER}" "${MYSQL_SUPERPASS}" DeleteAll | ||||||
|  | } | ||||||
|  | function backup_db() | ||||||
|  | { | ||||||
|  |     readonly HELP_MSG=" | ||||||
|  | Backups the specified database(s) and then returns the | ||||||
|  |  result as a single \"tar.gz\" file via standard output. | ||||||
|  | 
 | ||||||
|  | Usage: | ||||||
|  |     backup-db [OPTIONS...] | ||||||
|  | 
 | ||||||
|  | Options: | ||||||
|  |     -a | --all | ||||||
|  |         Backups all databases. | ||||||
|  | 
 | ||||||
|  |     -w | --world | ||||||
|  |         Backups the world database: \"$(info "${MANGOS_WORLD_DBNAME}")\". | ||||||
|  | 
 | ||||||
|  |     -c | --characters | ||||||
|  |         Backups the characters database: \"$(info "${MANGOS_CHARACTERS_DBNAME}")\". | ||||||
|  | 
 | ||||||
|  |     -l | --logs | ||||||
|  |         Backups the logs database: \"$(info "${MANGOS_LOGS_DBNAME}")\". | ||||||
|  | 
 | ||||||
|  |     -r | --realmd | ||||||
|  |         Backups the realmd database: \"$(info "${MANGOS_REALMD_DBNAME}")\". | ||||||
|  | 
 | ||||||
|  |     -h | -? | --help | ||||||
|  |         Displays this help message. | ||||||
|  | " | ||||||
|  | 
 | ||||||
|  |     declare -A DATABASES | ||||||
|  | 
 | ||||||
|  |     while [[ ${#} -gt 0 ]] | ||||||
|  |     do | ||||||
|  |         case "${1}" in | ||||||
|  |             -a | --all) | ||||||
|  |                 readonly BACKUPS_ALL="true" | ||||||
|  |                 ;; | ||||||
|  |             -w | --world) | ||||||
|  |                 DATABASES+=(["world"]="${MANGOS_WORLD_DBNAME}") | ||||||
|  |                 ;; | ||||||
|  |             -c | --characters) | ||||||
|  |                 DATABASES+=(["characters"]="${MANGOS_CHARACTERS_DBNAME}") | ||||||
|  |                 ;; | ||||||
|  |             -l | --logs) | ||||||
|  |                 DATABASES+=(["logs"]="${MANGOS_LOGS_DBNAME}") | ||||||
|  |                 ;; | ||||||
|  |             -r | --realmd) | ||||||
|  |                 DATABASES+=(["realmd"]="${MANGOS_REALMD_DBNAME}") | ||||||
|  |                 ;; | ||||||
|  |             -h | -? | --help) | ||||||
|  |                 echo -e "${HELP_MSG}" | ||||||
|  | 
 | ||||||
|  |                 exit 0 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 echoerr "" | ||||||
|  |                 echoerr -e " $(error "ERROR!" --underline)" | ||||||
|  |                 echoerr -e "  $(error "└") Unknown option: \"$(info "${1}")\"" | ||||||
|  |                 echoerr "" | ||||||
|  |                 echoerr " Run \"$(info "backup-db --help")\" for more information." | ||||||
|  | 
 | ||||||
|  |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |         esac | ||||||
|  | 
 | ||||||
|  |         shift | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     if [[ "${BACKUPS_ALL}" == "true" ]] | ||||||
|  |     then | ||||||
|  |         if [[ -n ${DATABASES[@]} ]] | ||||||
|  |         then | ||||||
|  |             echoerr "" | ||||||
|  |             echoerr -e " $(error "ERROR!" --underline)" | ||||||
|  |             echoerr -e "  $(error "└") You cannot specify both \"$(info "--all")\" and any other" | ||||||
|  |             echoerr -e "     specific database options at the same time." | ||||||
|  |             echoerr "" | ||||||
|  |             echoerr " Run \"$(info "backup-db --help")\" for more information." | ||||||
|  | 
 | ||||||
|  |             exit 2 | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         DATABASES=(["world"]="${MANGOS_WORLD_DBNAME}" \ | ||||||
|  |                    ["characters"]="${MANGOS_CHARACTERS_DBNAME}" \ | ||||||
|  |                    ["logs"]="${MANGOS_LOGS_DBNAME}" \ | ||||||
|  |                    ["realmd"]="${MANGOS_REALMD_DBNAME}") | ||||||
|  |     fi | ||||||
|  |     if [[ -z ${DATABASES[@]} ]] | ||||||
|  |     then | ||||||
|  |         echoerr "" | ||||||
|  |         echoerr -e " $(error "ERROR!" --underline)" | ||||||
|  |         echoerr -e "  $(error "└") You must specify at least one database to backup." | ||||||
|  |         echoerr "" | ||||||
|  |         echoerr " Run \"$(info "backup-db --help")\" for more information." | ||||||
|  | 
 | ||||||
|  |         exit 3 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     local TIMESTAMP="$(date +"%Y-%m-%d_%H-%M-%S")" | ||||||
|  |     local BACKUP_DIR="/home/mangos/data/backups/${TIMESTAMP}" | ||||||
|  |     local BACKUP_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.tar.gz" | ||||||
|  | 
 | ||||||
|  |     mkdir -p "${BACKUP_DIR}" | ||||||
|  | 
 | ||||||
|  |     for DATABASE in ${!DATABASES[@]} | ||||||
|  |     do | ||||||
|  |         local DATABASE_NAME="${DATABASES["${DATABASE}"]}" | ||||||
|  |         local OUTPUT_FILENAME="${DATABASE}.sql" | ||||||
|  | 
 | ||||||
|  |         mysql_dump "${DATABASE_NAME}" "${BACKUP_DIR}/${OUTPUT_FILENAME}" | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     cd "${BACKUP_DIR}" | ||||||
|  | 
 | ||||||
|  |     echo "${SCRIPT_VERSION}" > .version | ||||||
|  |     tar -czvf "${BACKUP_FILE}" .version $(ls *.sql | xargs -n 1) > /dev/null | ||||||
|  | 
 | ||||||
|  |     cat "${BACKUP_FILE}" | ||||||
|  | } | ||||||
|  | function manage_db() | ||||||
|  | { | ||||||
|  |     cd "${DATABASE_DIR}" | ||||||
|  | 
 | ||||||
|  |     ./InstallFullDB.sh | ||||||
|  | } | ||||||
|  | function restore_db() | ||||||
|  | { | ||||||
|  |     local TIMESTAMP="$(date +"%Y-%m-%d_%H-%M-%S")" | ||||||
|  |     local TEMP_DIR="${TMPDIR}/${TIMESTAMP}" | ||||||
|  |     local BACKUP_FILE="${TEMP_DIR}/backup_${TIMESTAMP}.tar.gz" | ||||||
|  | 
 | ||||||
|  |     mkdir -p "${TEMP_DIR}" | ||||||
|  |     cat - > "${BACKUP_FILE}" | ||||||
|  | 
 | ||||||
|  |     cd "${TEMP_DIR}" | ||||||
|  | 
 | ||||||
|  |     tar -xzvf "${BACKUP_FILE}" -C . > /dev/null | ||||||
|  | 
 | ||||||
|  |     local BACKUP_FILES=($(ls *.sql | xargs -n 1)) | ||||||
|  | 
 | ||||||
|  |     for BACKUP_FILE in ${BACKUP_FILES[@]} | ||||||
|  |     do | ||||||
|  |         local DATABASE="${BACKUP_FILE%.sql}" | ||||||
|  | 
 | ||||||
|  |         if [[ "${DATABASE}" == "world" ]] | ||||||
|  |         then | ||||||
|  |             local DATABASE_NAME="${MANGOS_WORLD_DBNAME}" | ||||||
|  |         elif [[ "${DATABASE}" == "characters" ]] | ||||||
|  |         then | ||||||
|  |             local DATABASE_NAME="${MANGOS_CHARACTERS_DBNAME}" | ||||||
|  |         elif [[ "${DATABASE}" == "logs" ]] | ||||||
|  |         then | ||||||
|  |             local DATABASE_NAME="${MANGOS_LOGS_DBNAME}" | ||||||
|  |         elif [[ "${DATABASE}" == "realmd" ]] | ||||||
|  |         then | ||||||
|  |             local DATABASE_NAME="${MANGOS_REALMD_DBNAME}" | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         mysql_execute "${DATABASE_NAME}" < "${TEMP_DIR}/${BACKUP_FILE}" | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | function update_db() | ||||||
|  | { | ||||||
|  |     readonly HELP_MSG=" | ||||||
|  | Updates databases by applying the latest changes | ||||||
|  |  to the database structure and default data. | ||||||
|  | Dy default, this is a non-destructive procedure, | ||||||
|  |  so any custom data you may have loaded into | ||||||
|  |  your \"$(info "${MANGOS_WORLD_DBNAME}")\" database will remain intact. | ||||||
|  | 
 | ||||||
|  | Unfortunately, however, sometimes this plain update procedure | ||||||
|  |  isn't enough to apply all the changes required by | ||||||
|  |  the new version of the server to run properly. | ||||||
|  | In these cases, you can use the \"$(info "--world")\" option to | ||||||
|  |  perform a \"deeper\" update procedure to solve the issue. | ||||||
|  | 
 | ||||||
|  | Please note that this more \"aggressive\" update procedure | ||||||
|  |  will prune any custom data from the \"$(info "${MANGOS_WORLD_DBNAME}")\" database | ||||||
|  |  and will restore the default data shipped with the server. | ||||||
|  | If, however, you use an original version of the database | ||||||
|  |  and have never customized any data, you can safely use | ||||||
|  |  this option without any fear. No data will be lost. | ||||||
|  | 
 | ||||||
|  | Usage: | ||||||
|  |     update-db [OPTIONS...] | ||||||
|  | 
 | ||||||
|  | Options: | ||||||
|  |     -w | --world | ||||||
|  |         Updates the world database: \"$(info "${MANGOS_WORLD_DBNAME}")\". | ||||||
|  | 
 | ||||||
|  |     -h | -? | --help | ||||||
|  |         Displays this help message. | ||||||
|  | " | ||||||
|  |     if [[ -n "${1}" ]] | ||||||
|  |     then | ||||||
|  |         case "${1}" in | ||||||
|  |             -w | --world) | ||||||
|  |                 echo "" | ||||||
|  |                 echo -e " $(warning "WARNING!" --underline)" | ||||||
|  |                 echo -e "  $(warning "└") This procedure will prune all custom data you" | ||||||
|  |                 echo -e "     may have loaded into your \"$(info "${MANGOS_WORLD_DBNAME}")\" database." | ||||||
|  |                 echo "" | ||||||
|  |                 read -p "Are you sure to continue? [Y/n]: " ANSWER | ||||||
|  | 
 | ||||||
|  |                 if [[ "${ANSWER}" != "y" ]] && [[ "${ANSWER}" != "Y" ]] | ||||||
|  |                 then | ||||||
|  |                     echo -e " └ Ok, no problem! Database have been left untouched." | ||||||
|  | 
 | ||||||
|  |                     return | ||||||
|  |                 fi | ||||||
|  | 
 | ||||||
|  |                 echo -e " └ Please, wait... Updating database..." | ||||||
|  |                 echo "" | ||||||
|  |                 echo -e " --------------------------------------" | ||||||
|  | 
 | ||||||
|  |                 install_updates --world | ||||||
|  | 
 | ||||||
|  |                 ;; | ||||||
|  |             -h | -? | --help) | ||||||
|  |                 echo -e "${HELP_MSG}" | ||||||
|  | 
 | ||||||
|  |                 exit 0 | ||||||
|  |                 ;; | ||||||
|  |             *) | ||||||
|  |                 echoerr "" | ||||||
|  |                 echoerr -e " $(error "ERROR!" --underline)" | ||||||
|  |                 echoerr -e "  $(error "└") Unknown option: \"$(info "${1}")\"" | ||||||
|  |                 echoerr "" | ||||||
|  |                 echoerr " Run \"$(info "update-db --help")\" for more information." | ||||||
|  | 
 | ||||||
|  |                 exit 1 | ||||||
|  |                 ;; | ||||||
|  |         esac | ||||||
|  |     else | ||||||
|  |         install_updates | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Execution: | ||||||
|  | # | ||||||
|  | case "${1}" in | ||||||
|  |     extract) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         extract_resources_from_client ${@} | ||||||
|  |         ;; | ||||||
|  |     init-db) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         init_db | ||||||
|  |         ;; | ||||||
|  |     backup-db) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         backup_db ${@} | ||||||
|  |         ;; | ||||||
|  |     restore-db) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         restore_db ${@} | ||||||
|  |         ;; | ||||||
|  |     manage-db) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         manage_db | ||||||
|  |         ;; | ||||||
|  |     update-db) | ||||||
|  |         shift | ||||||
|  | 
 | ||||||
|  |         update_db ${@} | ||||||
|  |         ;; | ||||||
|  |     *) | ||||||
|  |         cd "${HOME_DIR}" | ||||||
|  | 
 | ||||||
|  |         exec ${@} | ||||||
|  |         ;; | ||||||
|  | esac | ||||||
| @ -6,12 +6,12 @@ set -e | |||||||
| readonly BASE_DIR="$(realpath "$(dirname "${0}")/..")" | readonly BASE_DIR="$(realpath "$(dirname "${0}")/..")" | ||||||
| source "${BASE_DIR}/.env" | source "${BASE_DIR}/.env" | ||||||
| 
 | 
 | ||||||
| readonly NAME="cmangos-runner" | readonly NAME="cmangos-builder" | ||||||
| readonly IMAGE="ghcr.io/byloth/cmangos/${WOW_VERSION}" | readonly IMAGE="ghcr.io/byloth/cmangos/${WOW_VERSION}/builder" | ||||||
| readonly VERSION="latest" | readonly VERSION="latest" | ||||||
| 
 | 
 | ||||||
| readonly DATA_VOLUME="cmangos_mangosd_data" | readonly DATA_VOLUME="./mangosd_data" | ||||||
| readonly NETWORK="cmangos_default" | readonly NETWORK="wow" | ||||||
| 
 | 
 | ||||||
| if [[ -t 0 ]] && [[ -t 1 ]] | if [[ -t 0 ]] && [[ -t 1 ]] | ||||||
| then | then | ||||||
| @ -24,15 +24,12 @@ docker run ${TTY} \ | |||||||
|            --name "${NAME}" \ |            --name "${NAME}" \ | ||||||
|            --network "${NETWORK}" \ |            --network "${NETWORK}" \ | ||||||
|            --rm \ |            --rm \ | ||||||
|            -e MANGOS_DBHOST="mariadb" \ |            -e MYSQL_SUPERUSER="root" \ | ||||||
|  |            -e MYSQL_SUPERPASS="${MYSQL_SUPERPASS}" \ | ||||||
|  |            -e MANGOS_DBHOST="database" \ | ||||||
|            -e MANGOS_DBUSER="${MANGOS_DBUSER}" \ |            -e MANGOS_DBUSER="${MANGOS_DBUSER}" \ | ||||||
|            -e MANGOS_DBPASS="${MANGOS_DBPASS}" \ |            -e MANGOS_DBPASS="${MANGOS_DBPASS}" \ | ||||||
|            -p 3443:3443 \ |            -v "${DATA_VOLUME}":/home/mangos/data \ | ||||||
|            -p 3724:3724 \ |            -v "${WOW_CLIENT_DIR}":/home/mangos/wow-client \ | ||||||
|            -p 7878:7878 \ |  | ||||||
|            -p 8085:8085 \ |  | ||||||
|            -p 8086:8086 \ |  | ||||||
|            -v "${PWD}/config":/opt/mangos/conf:ro \ |  | ||||||
|            -v "${DATA_VOLUME}":/var/lib/mangos:ro \ |  | ||||||
|     \ |     \ | ||||||
|     "${IMAGE}:${VERSION}" ${@} |     "${IMAGE}:${VERSION}" ${@} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	