이번에는 ‘Mangos story’라는 네이버 카페를 통해 알게 된 Azeroth Core라는 World Of Warcraft 서버를 OCI Free Trial에서 제공하는 평생 무료 VM에 구성한 내용을 정리 해 보고자 합니다. 해당 카페에도 글을 올려 두었지만 기록을 위해 개인 블로그에 조금 더 상세한 내용을 담아 구성 & 사용기를 남깁니다.
해당 카페의 게시글은 https://cafe.naver.com/gostorm/50817에서 확인이 가능합니다.
우선 ‘Mangos story’라는 카페의 로아나님이 작성해 주신 글 ‘https://cafe.naver.com/gostorm/50659‘을 참조하여 NT기반의 Azeroth Core 서버와 Client를 구성하였고 생각이상으로 좋은 퀄리티로 구현되어 있는 것을 확인 했습니다. 실제로 10여년 전으로 돌아가 아제로스를 잠깐 탐험해 보기도 했었구요. 헌데 좀 아쉬웠습니다. 게임서버는 소켓의 강점으로 인해 NT기반으로 많이 구성하는 것이 사실이지만 제 본업(?)과 관련된 Linux & Cloud에 서버를 올려 놓고 주변 지인들과 게임을 해 보고 싶었거든요. 그래서 만들어봤습니다. 몇 번의 좌절과 고통의 시간이 있었지만 잘 극복하고 현재 OCI Free Trial에서 제공받은 무료 VM에 서버 구성을 완료 한 상태입니다. 현재는 컨테이너 이미지로 구성을 만들어 보는 중인데 사양 문제로 OCI Free Trial VM에서는 구현이 불가능 할 것 같습니다. 다만, 컨테이너화 작업은 마무리 할 예정입니다.
사족이 좀 길었는데 OCI Free Trial VM에 서버를 구성하려면 우선적으로 Swap 메모리 구성이 필요합니다.
최초 VM이 프로비저닝되면 Swap영역 없이 1GB의 메모리만을 가지고 있는 상태인데 이 상태에서는 프로그램이 OS의 OOM Killer에게 잡혀 죽는 관계로 컴파일은 물론 정상적인 서버 구동도 불가능합니다.
Swap 메모리는 root 유저에서 다음 명령으로 구성하였습니다.
1. Swap File 작성
dd if=/dev/zero of=/swap.img bs=1024 count=8000000
(8Gb의 용량을 가지는 Swap파일을 /swap.img 경로에 설정하는 과정입니다.)
2. 생성된 파일을 swap으로 사용하도록 지정
mkswap /swap.img
3. swap 파일 활성화
swapon /swap.img
4. 부팅시 설정 적용을 위해 /etc/fstab 파일에 아래내용 추가
vi /etc/fstab /swap.img swap swap defaults 0 0
추가 후 /etc/fstab 파일 내용입니다.
ubuntu@kami-vm-8:~$ cat /etc/fstab LABEL=cloudimg-rootfs / ext4 discard,errors=remount-ro 0 1 LABEL=UEFI /boot/efi vfat umask=0077 0 1 # CLOUD_IMG: This file was created/modified by the Cloud Image build process ###################################### ## ORACLE CLOUD INFRASTRUCTURE CUSTOMERS ## ## If you are adding an iSCSI remote block volume to this file you MUST ## include the '_netdev' mount option or your instance will become ## unavailable after the next reboot. ## SCSI device names are not stable across reboots; please use the device UUID ## instead of /dev path. ## ## Example: ## UUID="94c5aade-8bb1-4d55-ad0c-388bb8aa716a" /data1 ext4 defaults,noatime,_netdev 0 2 ## ## More information: ## https://docs.us-phoenix-1.oraclecloud.com/Content/Block/Tasks/connectingtoavolume.htm ## /swap.img swap swap defaults 0 0
여기까지 swap 설정은 완료되었습니다.
다음으로 서버 개발환경 구성이 필요합니다.
1. apt update
sudo apt-get update
2. apt install
sudo apt full-upgrade -y && sudo apt install git cmake make gcc g++ clang libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server mariadb-client libmariadb-dev libmariadb-dev-compat build-essential -y
여기까지 서버 개발환경 구성이 완료 되었습니다.
3. 소스 다운로드
다음으로 ‘Azeroth-Core’ 소스코드를 Clone 해 줍니다. (저는 npc bot이 추가된 trickerer님의 branch를 사용했습니다.)
https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots/tree/npcbots_3.3.5
git clone https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots.git --branch npcbots_3.3.5 --single-branch trickerer
npc bot이 추가되지 않은 ‘Azeroth-Core’ 서버를 구성하시려면 아래 주소를 사용하시면 됩니다.
https://github.com/azerothcore/azerothcore-wotlk
git clone https://github.com/azerothcore/azerothcore-wotlk.git --branch master --single-branch azerothcore
4. 소스 컴파일 및 빌드
소스 코드 Clone이 완료되면 해당 디렉토리로 이동 후 build 디렉토리를 생성하고 이동 해 줍니다.
cd ~/trickerer/ mkdir build cd build
소스 컴파일 및 빌드를 실행합니다. (OCI Free Trial VM은 서버 사양이 좋지 않아 이 과정에서 많은 시간이 소요됩니다. – 몇 시간 이상 소요될 수도 있습니다.)
cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/azeroth-server/ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DWITH_WARNINGS=1 -DTOOLS_BUILD=all -DSCRIPTS=static -DMODULES=static
컴파일 완료 후 빌드(install)을 진행합니다.
make -j $(nproc) install
(저는 빠른 실행을 위해 OCI Free Trial VM과 동일한 Ubuntu 22.04 서버를 별도의 고사양 VM으로 설치 후 소스 컴파일 및 빌드를 수행하고 해당 파일들을 OCI Free Trial VM으로 복사하였습니다만, 리눅스에 대한 지식이 부족하신 분들은 시간이 걸리더라도 본 서버에서 컴파일 및 빌드 하는 것을 강력 추천드립니다. 경로, 권한등의 문제가 있으므로 별도의 VM에서 작업하시는 경우 OCI Free Trial VM과 동일한 유저와 디렉토리 경로에서 수행해 주셔야 별도의 작업없이 파일 복사 만으로 작업이 가능합니다.)
빌드가 마무리되면 $HOME(/home/ubuntu) 경로(OCI 에 Ubuntu VM을 만드시면 ubuntu가 기본 유저입니다.) 아래에 azeroth-server라는 디렉토리가 생성되고 해당 디렉토리가 Azeroth-Core 서버가 설치 된 디렉토리입니다.
다음 과정으로 data 파일을 client에서 추출해야 하는데 저는 로아나님이 작성해 주신 글에 나와 있는 윈도우 서버(C:\AzerothCore\data)의 data디렉토리와 파일을 복사하였습니다. (참조 URL : https://cafe.naver.com/gostorm/50659)
아래 경로를 압축(data.tar.gz)하여 ftp등의 방식으로 OCI VM으로 옮긴 후 /home/ubuntu/azeroth-server/data 경로에 압축을 풀어 주시면 됩니다.

압축 파일을 해제한 후 다음과 같이 디렉토리가 구성 됩니다.
kami@kami-vm-8:~/azeroth-server/data$ pwd /home/kami/azeroth-server/data kami@kami-vm-8:~/azeroth-server/data$ ls -altrh total 828K drwx------ 2 kami kami 4.0K May 10 17:47 Cameras drwx------ 2 kami kami 12K May 10 17:47 dbc drwx------ 2 kami kami 148K May 10 17:49 maps drwx------ 2 kami kami 124K May 10 17:51 mmaps drwx------ 7 kami kami 4.0K May 10 17:51 . drwx------ 2 kami kami 532K May 10 17:55 vmaps drwxrwxr-x 5 kami kami 4.0K May 15 15:32 .. kami@kami-vm-8:~/azeroth-server/data$ tree -L 1 . ├── Cameras ├── dbc ├── maps ├── mmaps └── vmaps 5 directories, 0 files
5. 서버 설정
서버는 준비가 완료되었고 conf 파일을 수정해 줍니다. (서버가 설치될 때 conf.dist의 확장자로 설치된 파일명을 conf로 변경 해 주고 위에서 작업한 data파일의 경로를 설정하는 작업입니다.)
mv /home/ubuntu/azeroth-server/etc/authserver.conf.dist /home/ubuntu/azeroth-server/etc/authserver.conf mv /home/ubuntu/azeroth-server/etc/worldserver.conf.dist /home/ubuntu/azeroth-server/etc/worldserver.conf
확장자 변경 후 worldserver.conf 파일의 DataDir 경로를 설정 해 줍니다. (vi, nano등 익숙한 에디터로 worldserver.conf 파일을 열어 편집 후 저장합니다.)
vi /home/ubuntu/azeroth-server/etc/worldserver.conf
저와 동일한 과정을 진행하셨다면 worldserver.conf 파일의 181번째 줄에 DataDir = “” 부분을 DataDir = “/home/ubuntu/azeroth-server/data” 과 같이 변경 해 주시면 됩니다.

6. MariaDB 설정
서버 구성이 완료 되었으니 아래 명령을 입력하여 MariaDB 서버를 설정 해 줍니다.
sudo mysql_secure_installation
화면을 보며 다음 명령을 차례로 입력하여 MariaDB를 초기화 해 줍니다.
[First option leave blank and hit enter] [N to switch to unix_socket authentication] [Y to change the root password] [Y to remove anonymous users] [Y or N to disallow root login remotely] [Y to remove test DB] [Y to reload privilege tables now]
초기화 후 MariaDB에 접속하여 acore 계정을 설정합니다.
sudo mysql -u root -p
acore 계정과 데이터베이스를 생성하고 권한을 설정합니다.
DROP USER IF EXISTS 'acore'@'localhost'; CREATE USER 'acore'@'localhost' IDENTIFIED BY 'acore' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; GRANT ALL PRIVILEGES ON * . * TO 'acore'@'localhost' WITH GRANT OPTION; CREATE DATABASE `acore_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; CREATE DATABASE `acore_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; CREATE DATABASE `acore_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON `acore_world` . * TO 'acore'@'localhost' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON `acore_characters` . * TO 'acore'@'localhost' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON `acore_auth` . * TO 'acore'@'localhost' WITH GRANT OPTION; exit
서버 구성이 완료 되었습니다. 데이터베이스 작성을 위해 다음 명령으로 서버를 실행 해 줍니다.
sudo /home/ubuntu/azeroth-server/bin/authserver sudo /home/ubuntu/azeroth-server/bin/worldserver
각각 서버가 포어 그라운드에 프롬프트 입력상태로 실행되므로 authserver 실행 후 별도의 세션으로 접속하여 worldserver를 실행 해 주어야 정상적으로 게임접속이 가능합니다.
(윈도우 azerothcore서버에서도 authserver, worldserver 클릭 시 생성되는 CMD창을 닫으면 서버가 꺼지는 것과 동일한 원리 입니다.)
nohup ./autoserver & 등과 같은 방식으로 백그라운드 데몬으로 프로세스를 실행할 수도 있지만 관련 내용은 이번 포스팅에서는 다루지 않도록 하겠습니다.
서버가 실행된 후 데이터 베이스 작성이 되면 acore_auth 데이터베이스의 realmlist의 address필드의 값을 OCI VM의 퍼블릭 IP로 변경 해 주어야 정상적으로 접속이 가능합니다.
autoserver와 worldserver를 종료한 후 hediSQL등을 활용하여 아래와 같이 해당 값을 변경 해 줍니다.

추가로 Client 한글화는 위에 링크 된 로아나님의 글에 나와 있는 한글화 SQL을 hediSQL등을 활용하여 적용해 주시면 됩니다. 수행하지 않을 경우 영문으로 퀘스트등이 표시됩니다.
7. 서버실행 & 클라이언트 접속
sudo /home/ubuntu/azeroth-server/bin/authserver sudo /home/ubuntu/azeroth-server/bin/worldserver
마지막으로 클라이언트에서 서버 접속 정보 수정 후 게임을 즐기시면 됩니다.
서버실행v355.bat 파일을 열고

아래와 같이 OCI VM 퍼블릭 IP를 입력 후 Client를 실행 해 주시면 됩니다.

여기까지 OCI Free Tiral을 활용하여 ‘Azeroth-Core’ 서버를 구성하는 방법을 설명 드렸습니다.
추후 다른 버전의 WOW 서버도 구성 해 보면 재미있을 것 같네요, 컨테이너 버전도 조만간 구성 후 포스팅 진행 하겠습니다.
고맙습니다.
hediSQL 접속 방법좀 알려주세요~~
hediSQL 세션관리자에서 생성하신 서버 주소를 입력하시고 접속 하시면 됩니다.
보여드리려고 캡쳐를 만들었는데 댓글은 이미지가 등록이 안되네요..
ssh로 접속해야만 접속이 되네요
어찌되었든 접속이 되서 잘 되고 있어요
감사합니다.
시간되시면 카페에 보니 플레이어봇이 있던데 적용하는 법도 포스팅 해주시면.. 미리 감사드려요 ㅎㅎ;;;;