마크 모드팩 서버 구축기 (Society: Sunlit Valley)
집 서버에서 Paper 서버를 하나 돌리고 있었는데 모드팩 서버를 하나 더 파기로 했다. 고른 팩은 Society: Sunlit Valley. 스타듀밸리처럼 농사짓고 계절 도는 팩이다. 마크 1.20.1에 Forge 기반이고 모드가 305개 들어있음
설치
팩이 ServerPackCreator로 만들어져 있어서 서버팩 받아서 풀고 start 스크립트 돌리면 끝이다. 대신 자잘한게 몇 개 있었다.
- 마크 1.20.1은 Java 17이 필요하다. Paper 쪽은 1.21이라 21을 쓰고 있어서 서버에 자바가 두 벌이 됐다. 버전별로 요구하는 자바가 다르니
update-alternatives로 바꾸지 말고 각 서버가 자기 경로를 직접 물게 하는게 편함 - 힙은
variables.txt의 JAVA_ARGS에서 조절한다. 8G 줬다. 모드 305개짜리는 이거보다 짜게 주면 부팅부터 힘들어한다 - 포트는 25585. 기존 Paper가 25565라 하나 비켜줬음
기존 서버랑 똑같이 tmux 세션 안에서 돌린다. 죽어도 세션은 남으니까 로그 보기 편하다.
재시작 함정
이 팩의 start.sh에는 RESTART=true라는 옵션이 있다. 이름만 보면 재시작 옵션 같은데 아니다. 크래시났을 때 자동으로 다시 띄워주는 옵션이다.
콘솔에서 stop을 치면 서버가 정상 종료되는데 start.sh 입장에서는 정상 종료라 재시작 안 하고 그냥 끝난다. 그러면 tmux 세션까지 같이 닫힘
재시작하려고 stop 쳤는데 세션이 통째로 사라져 있는거다...
그래서 재시작은 스크립트로 만들었다. stop 보내고 -> 프로세스 죽을 때까지 기다렸다가 -> 새 tmux 세션 파서 다시 띄우는 순서
하나 더 서버 부팅 중에 tmux로 콘솔 명령을 밀어넣으면 안 된다. 부팅 중에는 콘솔이 입력을 안 받는게 아니라 버퍼에 쌓아둔다. 부팅 끝나는 순간 쌓여있던 명령이 한꺼번에 실행됨
부팅 중에 넣은 명령이 5분 뒤에 터지는걸 실제로 겪었다.
게임 계정에 sudo가 왜 있지
서버 파다가 보니 게임 서버 돌리는 계정이 sudo 그룹에 들어가 있었다. 예전에 세팅하면서 편하다고 넣어놨던 모양인데(과거의 나 반성해라) 게임 서버는 인터넷에 포트가 열려있는 프로세스다. 뚫리면 그 계정 권한이 그대로 공격자 권한이 된다. 침해 한번 당해보고 나니까 이런게 그냥 안 넘어가짐
- 게임 계정은 sudo 그룹에서 뺐다. 게임 돌리는데 sudo 필요없다
- 내 계정에서 로그, 설정 읽는건 ACL로 읽기 권한만 줬다(
setfacl, rX + default). 매번 sudo 치는 것보다 낫고, 쓰기는 여전히 sudo가 필요하니 실수로 뭘 건드릴 일도 없다
백업이랑 디스코드
- 백업은 팩에 들어있는 FTB Backups 2를 그대로 썼다. 30분마다, 최근 5개 보관, 접속자 있을 때만. 빈 서버가 백업만 쌓는건 의미없으니까
- 디스코드 연동 모드(dcintegration)도 붙였다. 게임 채팅이랑 디스코드 채널 양방향에 접속/퇴장 알림까지. 참고로 이런 봇 토큰은 설정 파일에 평문으로 들어가는데 어디 노출됐다 싶으면 그냥 리셋하는게 마음 편하다
계절 지나면 작물 죽나?
이 팩은 Serene Seasons로 계절이 돈다. 그러다 문득 걱정이 됐다. 아무도 접속 안 해도 서버 시간은 흐르는데 그러면 봄에 심은 작물이 여름 되면 죽어있는거 아닌가??
설정을 까봤더니 이중으로 막혀 있었다.
# fertility.toml
out_of_season_crop_behavior = 1 # 1 = 성장 정지 (2였으면 파괴)
# seasons.toml
progress_season_while_offline = false
제철이 지난 작물은 죽는게 아니라 성장만 멈추고, 애초에 접속자가 0명이면 계절 시계 자체가 멈춘다. 낮밤은 흐르는데 계절은 별도 카운터라 정지함 괜히 걱정햇다.
덤으로 알게 된 것 마크 서버는 사람이 없어도 시계(낮밤)가 계속 돈다. 빈 서버 일시정지 옵션은 1.21.2부터 생겨서 1.20.1엔 없다. 대신 청크가 전부 언로드되니까 농작물이든 기계든 어차피 멈춰있음. 흘러가는건 시계뿐이다.
마치며
모드 305개짜리 서버는 부팅에 몇 분씩 걸린다. 그동안 딴짓하다가 tmux에 명령 밀어넣지만 않으면 된다...