7. 게임 서버 패키징하기

게임 서버를 빌드하고 바이너리를 배포하는 것은 상당히 중요한 일입니다. 그러나, 그 과정에서 실수도 많이 일어납니다. 대부분의 실수는 파일을 빠트리거나, 어떤 것이 복사가 안되거나 하는 문제입니다. 따라서 서버를 배포하기 위해서는 패키지로 묶어서 배포하는 것이 바람직하고 이를 사람이 하는 것이 아니라 프로그램이 자동으로 하게 하는 것이 좋습니다.

아이펀 엔진은 이를 위해 서버 패키지를 자동으로 생성하고 버전을 부여하는 기능을 제공합니다.

7.1. 아이펀 엔진을 이용하여 서버 패키지 생성하기

iFun Engine 의 서버는 빌드 디렉토리에서 make package 를 실행하면 자동으로 패키지로 묶어줍니다. 그리고 패키지 포맷도 Ubuntu 를 위한 .deb 파일 형태, Centos 를 위한 .rpm 형태, 그리고 Linux 의 일반적인 .tgz 형태 를 지원합니다. 원하는 패키징 형태를 hello_world-source/CMakeLists.txt 에 지정합니다. 우리는 Ubuntu 를 쓰고 있기 때문에 다음 처럼 지정하겠습니다.

# Generate a distribution package in tgz?
set(WANT_TGZ_PACKAGE false)

# Generate a distribution package in Debian DEB?
set(WANT_DEB_PACKAGE true)

# Generate a distribution package in Redhat RPM?
set(WANT_RPM_PACKAGE false)

이제 make package 를 실행해봅니다. 그러면 .deb 파일이 생성된 것을 알 수 있을 겁니다.

$ make package
Leveraging ccache. CCACHE=/usr/bin/ccache, CCACHE_DIR=, CCACHE_TEMPDIR=.
/tmp/hello_world-source/etc/upstart/default/hello_world.lobby not found. Skipping.
/tmp/hello_world-source/etc/upstart/init/hello_world.lobby.conf not found. Skipping.
/tmp/hello_world-source/etc/upstart/default/hello_world.game not found. Skipping.
/tmp/hello_world-source/etc/upstart/init/hello_world.game.conf not found. Skipping.
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/hello_world-build/debug
[ 16%] Built target internal_create_launchers
[ 25%] Built target internal_import_manifest_dirs
[ 33%] Built target internal_import_resource_dirs
[100%] Built target hello_world
Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: hello_world
CPack: - Install project: hello_world
CPack: -   Install component: game
CPack: -   Install component: lobby
CPack: Create package
CPackDeb: - Generating dependency list
CPackDeb: - Generating dependency list
CPack: - package: /tmp/hello_world-build/debug/hello-world_0.0.1_install-game.deb generated.
CPack: - package: /tmp/hello_world-build/debug/hello-world_0.0.1_install-lobby.deb generated.

$ ls *.deb
hello-world_0.0.1_install-game.deb  hello-world_0.0.1_install-lobby.deb

참고

만일 flavor 를 지정하지 않았다면 .deb 하나가 생성되고, flavor 를 지정한 경우는 flavor 별로 파일을 생성합니다.

이제 이 파일들을 서버로 옮겨서 Ubuntu 의 dpkg 명령으로 게임 서버를 설치할 수 있습니다.

7.2. 게임 서버 패키지의 버전과 빌드번호

앞의 섹션에서 생성된 .deb 파일들은 버전 번호가 0.0.1 로 지정되어있습니다. 이 버전 번호가 어디서 나온 건지 궁금하실 수 있겠네요. 이 번호는 hello_world-source/VERSION 이라는 파일에 기재된 것을 사용합니다. 만일 0.0.2 로 고치고 make package 를 한다면 0.0.2 버전의 파일이 나올 겁니다.

버전은 보통 게임이 큰 업데이트를 겪을 때 올라가는 숫자입니다. 그렇기 때문에 수동으로 VERSION 파일을 갱신해서 올려야됩니다. 그러나 많은 경우에 매번 빌드를 할 때마다 빌드 번호를 붙이는 것이 편리합니다. iFun Engine 은 SVN 이나 GIT 으로 체크 아웃된 경우 SVN 리비전 번호나 GIT 커밋 ID 를 버전 뒤에 빌드 번호로 붙여줄 수 있습니다. hello_world-source/CMakeLists.txt 에 다음 변수를 선택해서 true 로 수정하면 됩니다.

# Source managed by git can append a build number from git commit id.
set(PACKAGE_WITH_BUILD_NUMBER_FROM_GIT false)

# Source managed by svn can append a build number from svn info.
set(PACKAGE_WITH_BUILD_NUMBER_FROM_SVN false)

중요

위 내용은 SVN 이나 GIT 으로 체크아웃된 경우만 동작합니다.

참고

만일 소스 디렉토리에 커밋되지 않은 내용이 있다면, 아이펀 엔진은 버전 스트링에 ~dirty 라는 문자열을 추가로 붙여줍니다. 예를 들면 0.0.1-1234~dirty 처럼 됩니다.