OCI FreeTrial에 Azeroth Core 서버 구축

이번에는 ‘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 서버도 구성 해 보면 재미있을 것 같네요, 컨테이너 버전도 조만간 구성 후 포스팅 진행 하겠습니다.

고맙습니다.

3 thoughts on “OCI FreeTrial에 Azeroth Core 서버 구축”

      • ssh로 접속해야만 접속이 되네요
        어찌되었든 접속이 되서 잘 되고 있어요
        감사합니다.
        시간되시면 카페에 보니 플레이어봇이 있던데 적용하는 법도 포스팅 해주시면.. 미리 감사드려요 ㅎㅎ;;;;

        응답

Leave a Comment