← 목록

마크 모드팩 서버 구축기 (Society: Sunlit Valley)

#minecraft#homeserver#linux

집 서버에서 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에 명령 밀어넣지만 않으면 된다.

← 목록으로
오늘 0·전체 0