아무거나 적당히 운영되는 이상한 블로그

리눅스 우분투 CUI(Headless)서버에서 OpenRCT2 서버 돌리기 본문

잡담

리눅스 우분투 CUI(Headless)서버에서 OpenRCT2 서버 돌리기

저세상 음향연구소 2020. 5. 4. 16:05

어쩌다가 노트북 서버를 돌리게 되었는데, 생각해보니 노트북 정도이면 OpenRCT2 서버도 올릴 수 있겠구나 생각이 들어서 한번 OpenRCT2 서버 돌리는 삽질에 관한 이야기입니다. 다만 이것은 문서화를 위해서 AWS Lightsail에서 구축이 가능한지 확인해봤습니다.

1. OpenRCT2 설치하고 세팅하기.

먼저 서버에서 필요한 모듈을 설치합니다. 공식 문서에 따르면 sdl2, fontconfig, libzip, libpng, speexdsp, curl, jansson, openssl, icu , zlib, gl ,duktape 모듈이 필요하다고 하는데, 이게 필요모듈이 버전에 따라 그때그때 다르고 모듈의 설치 여부가 리눅스 배포판이나 서버 운영 환경에 따라 다르니 에러메세지 보고 구글링 하여 필요한 모듈을 apt로 설치해주면 됩니다.

sudo apt install -y libduktape202 libjansson4 libzip4 libfontconfig

AWS 라이트세일 우분투 기준 libduktape202, libjansson4, libzip4, libfontconfig의 설치가 필요합니다.

wget https://github.com/Limetric/OpenRCT2-binaries/releases/download/v0.2.6-174b32c/OpenRCT2-0.2.6-develop-174b32c-linux-x86_64.tar.gz
tar -xvzf OpenRCT2-0.2.6-develop-174b32c-linux-x86_64.tar.gz
rm OpenRCT2-0.2.6-develop-174b32c-linux-x86_64.tar.gz

그리고 나서 한번 OpenRCT2를 다운받고 적당히 압축을 풉니다. CUI 환경에서는 wget으로 다운받고 tar -zcvf 으로 압축을 풀면 됩니다.

./OpenRCT2/openrct2-cli

그리고 openrct2-cli를 돌려봅시다. CUI로 돌리는 경우에는 ./openrct2-cli 로 돌리면 됩니다. 물론 높은 확률로 모듈이 없다는 에러 메세지가 나올겁니다.

OpenRCT2를 돌릴 게임 데이터는 GUI로 돌릴 경우에 필요합니다. 서버만 돌린다면 필요하지는 않지만 만약에 필요하다면 OpenRCT2를 한번 돌려보고 /home/(사용자폴더)/.config/OpenRCT2/config.ini 의  game_path를 수정하여 지정해줍니다. 저는 game path를 game_path = "/home/hanzo/rct2data" 로 세팅했습니다.

2. config.ini 편집으로 서버를 설정하고 돌리기.

nano .config/OpenRCT2/config.ini

config.ini [network]의 예시는 다음과 같습니다.

[network] 
player_name = "haruhi" 
default_port = 11753 
listen_address = "" 
default_password = "" 
stay_connected = true 
advertise = true 
maxplayers = 16 
server_name = "하루히 테스트 서버" 
server_description = "하루히 테스트 서버입니다." 
server_greeting = "안녕하세요. 해당 서버는 하루히 테스트 서버입니다. 이 서버는 잠깐 테스트으로 CUI 서버 설정 시연중입니다." 
master_server_url = "" 
provider_name = "저세상 음향연구소" 
provider_email = "uaz@uaz.kr" 
provider_website = "http://b.uaz.kr" 
known_keys_only = false 
log_chat = false 
log_server_actions = false 
pause_server_if_no_clients = false 
desync_debugging = false 


중요한 세팅
player_name - 서버를 돌리는 컴퓨터에서 뜨는 사용자 이름입니다. 기본값은 컴퓨터의 유저명입니다.
advertise - true인 경우 OpenRCT2의 서버 리스트에 뜹니다. false인 경우에는 서버 IP나 도메인 주소를 직접 입력하여 접속해야합니다.
maxplayers - 최대 접속 가능한 사람 수 입니다.
server_name - 서버 리스트에서 보이는 서버 이름입니다.
server_description - 서버 리스트 이름에 마우스를 대면 보이는 설명입니다.
server_greeting - 서버에 접속한 사람에게 뜨는 환영 채팅입니다.

안중요한 세팅
provider_name - 서버 인포에서 서버 소유자의 이름을 표시해줍니다.
provider_email - 서버 인포에서 서버 소유자의 이메일 주소를 표시해줍니다.
provider_website - 서버 인포에서 서버 소유자의 웹사이트를 표시해줍니다.

password와 port 세팅은 CUI 환경에서 무시되기에 CUI 서버 가동시 명령으로 넣어줘야합니다. 또한 일부 설정은 어드민 계정으로 설정이 가능합니다.

아 그런데 생각해보니 포트를 안열었네요. 포트 여는 방법은 역시 네트워크 환경에 따라 접근 방법이 다릅니다. 기본적으로 TCP 타입의 11753 포트를 열어주시면 됩니다.

세팅이 끝나면 이제 서버를 돌릴 차래만 남았습니다. 그런데 서버를 돌리기 위해서는 멀티플레이를 실행할 시나리오 파일(sc6) 또는 세이브 파일(sv6)이 필요합니다. 이것은 원하는 시나리오를 사용하든세이브 파일을 사용하든 서버로 업로드할 필요가 있습니다. 업로드는 SFTP를 통하여 하시면 됩니다. SFTP는 ssh를 통한 파일 전송이 가능하지만 서버 환경에 따라 접근 방법이 다릅니다.

./OpenRCT2/openrct2-cli host h.sv6 --port 11753 --password 하루히

본 디렉토리에 시나리오 파일은 던지고 한번 실행해봅시다. 아직은 서버 가동 테스트입니다. --password는 옵션으로 만약 공개적으로 서버를 운영할 생각이시면 해당 옵션을 넣지 않으시면 됩니다. 

서버가 잘 실행됩니다.

런데 그냥 접속하면 어떠한 권한을 받지 못해서 서버 관리를 할 수 없습니다. 프로그램을 Ctrl+C 를 두번 하여 프로그램을 멈추도록 합시다. 

3. 사용자에게 권한 할당해주기

nano .config/OpenRCT2/users.json

 먼저 서버의 users.json을 편집합니다.

[
    {
        "hash": "",
        "name": "haruhi",
        "groupId": 0
    },
    {
	"hash": "52525252ffffffffaaaaaaaabbbbccccddddeeee",
	"name": "kpneox",
	"groupId": 0
    }
]

hash - 권한을 줄 사람의 퍼블릿 키를 입력합니다. 
name - 권한을 줄 사람의 이름을 입력합니다.
groupIDd - 어떤 권한을 가진 그룹인지 설정합니다.

퍼블릿 키는 문서\OpenRCT2\keys에서 가린 부분이 바로 퍼블릿 키 입니다.

nano .config/OpenRCT2/groups.json

그리고 나서 groups.json을 생성합니다. 한번 서버에 어드민 권한을 받으면 게임 내에서 수정이 가능하니 지금은 그냥 이거 쓰시면 됩니다.

{
    "default_group": 1,
    "groups": [
        {
            "id": 0,
            "name": "Admin",
            "permissions": [
                "PERMISSION_CHAT",
                "PERMISSION_TERRAFORM",
                "PERMISSION_SET_WATER_LEVEL",
                "PERMISSION_TOGGLE_PAUSE",
                "PERMISSION_CREATE_RIDE",
                "PERMISSION_REMOVE_RIDE",
                "PERMISSION_BUILD_RIDE",
                "PERMISSION_RIDE_PROPERTIES",
                "PERMISSION_SCENERY",
                "PERMISSION_PATH",
                "PERMISSION_CLEAR_LANDSCAPE",
                "PERMISSION_GUEST",
                "PERMISSION_STAFF",
                "PERMISSION_PARK_PROPERTIES",
                "PERMISSION_PARK_FUNDING",
                "PERMISSION_KICK_PLAYER",
                "PERMISSION_MODIFY_GROUPS",
                "PERMISSION_SET_PLAYER_GROUP",
                "PERMISSION_CHEAT",
                "PERMISSION_TOGGLE_SCENERY_CLUSTER",
                "PERMISSION_PASSWORDLESS_LOGIN",
                "PERMISSION_MODIFY_TILE",
                "PERMISSION_EDIT_SCENARIO_OPTIONS"
            ]
        },
        {
            "id": 1,
            "name": "Spectator",
            "permissions": [
                "PERMISSION_CHAT"
            ]
        },
        {
            "id": 2,
            "name": "User",
            "permissions": [
                "PERMISSION_CHAT",
                "PERMISSION_TERRAFORM",
                "PERMISSION_SET_WATER_LEVEL",
                "PERMISSION_TOGGLE_PAUSE",
                "PERMISSION_CREATE_RIDE",
                "PERMISSION_REMOVE_RIDE",
                "PERMISSION_BUILD_RIDE",
                "PERMISSION_RIDE_PROPERTIES",
                "PERMISSION_SCENERY",
                "PERMISSION_PATH",
                "PERMISSION_CLEAR_LANDSCAPE",
                "PERMISSION_GUEST",
                "PERMISSION_STAFF",
                "PERMISSION_PARK_PROPERTIES",
                "PERMISSION_PARK_FUNDING",
                "PERMISSION_TOGGLE_SCENERY_CLUSTER"
            ]
        }
    ]
}

그리고 나서 다시 서버를 돌리고 접속해봅니다.

이제는 어드민이 되었습니다. 이 서버는 이제 제껍니다.

nohup ./OpenRCT2/openrct2-cli host h.sv6 --port 11753 --password 하루히 > /dev/null 2>&1 &

마지막으로 서버를 상시 가동해야합니다. nohup을 사용하여 터미널을 나가도 서버 프로그램이 돌아가도록 합시다.

ps -ef | grep openrct2-cli
kill 12345

이런 경우 OFF 하는 방법은 프로세서 넘버를 확인한 다음 kill 하면 됩니다. 그런데 AWS에서 nohup나 서비스를 쓰면 거짓말처럼 서버 접속이 안됩니다. -_-;

[가동시]
screen -S title
./OpenRCT2/openrct2-cli host h.sv6 --port 11753 --password 하루히
[Ctrl+A+D로 탈출]

[종료시]
screen -r title
[Ctrl+C 2번으로 서버 종료]
exit

원인은 모르겠지만 이것저것 써본 결과 screen을 쓰면 된다는 결론에 도달했습니다.

 

Comments