ひよこになりたい

Programming Server Network Security CTF and so on

7 Days to DieのLinuxサーバーを立てる

7 Days to DieというゲームをLinux Server上に置くための手順です。7 Days to DieはDedicated ServerとしてLinuxが使用できるのがいいですね。

OSはInstall済みなのが前提です。今回はCentOS7を利用しました。

ここも参考になるので詰まったら見てみてください

ディスクの用意

partedで適当に分割し、mkfsでext4のディスクを作る

[zip@satori ~]$ sudo parted -l
[sudo] password for zip:
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 17.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary  xfs          boot
 2      1075MB  17.2GB  16.1GB  primary  ext4


Error: /dev/sdb: unrecognised disk label
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

[zip@satori ~]$ sudo parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Error: /dev/sdb: unrecognised disk label
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel msdos
(parted) mkpart primary ext4 0% 100%
(parted) q
Information: You may need to update /etc/fstab.

[zip@satori ~]$ sudo mkfs.ext4 /dev/sdb1

fstabに書いてマウント

[zip@satori ~]$ ls -la /dev/disk/by-uuid/
total 0
drwxr-xr-x. 2 root root 100 Aug  4 00:46 .
drwxr-xr-x. 5 root root 100 Aug  4 00:43 ..
lrwxrwxrwx. 1 root root  10 Aug  4 00:46 2eb3c8da-38f5-4a1e-8119-49a5cb4272a7 -> ../../sdb1
lrwxrwxrwx. 1 root root  10 Aug  4 00:45 3e2282e0-6444-4a96-864f-0c98fbe80674 -> ../../sda1
lrwxrwxrwx. 1 root root  10 Aug  4 00:45 68842a27-4a2c-4562-bcae-9e468c9b2f48 -> ../../sda2

[zip@satori ~]$ sudo vim /etc/fstab
UUID=68842a27-4a2c-4562-bcae-9e468c9b2f48 /                       ext4    defaults        1 1
UUID=3e2282e0-6444-4a96-864f-0c98fbe80674 /boot                   xfs     defaults        0 0
UUID=2eb3c8da-38f5-4a1e-8119-49a5cb4272a7 /7days                  ext4    defaults        0 0

[zip@satori ~]$ sudo mkdir -p /7days
[zip@satori ~]$ sudo mount -a
[zip@satori ~]$ sudo useradd sdtd -d /7days/
[zip@satori ~]$ sudo chown sdtd. /7days

メモリ状況の確認。一応それなりに重いと思うのでメモリ不足に備えるためswapを作っておく。今回はファイルベースにしました。

[zip@satori ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7823         139        7326           8         357        7416
Swap:             0           0           0

[zip@satori ~]$ sudo mkdir /swap
[zip@satori ~]$ sudo dd if=/dev/zero of=/swap/swapfile_8g bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 32.5157 s, 264 MB/s
[zip@satori ~]$ sudo mkswap /swap/swapfile_8g
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=437a728a-872c-4659-94bb-83449500508f
[zip@satori ~]$ sudo swapon /swap/swapfile_8g
swapon: /swap/swapfile_8g: insecure permissions 0644, 0600 suggested.
[zip@satori ~]$ sudo chmod 0600 /swap/swapfile_8g
[zip@satori ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7823         145         129           8        7547        7342
Swap:          8191           0        8191
[zip@satori ~]$ sudo vim /etc/fstab
UUID=68842a27-4a2c-4562-bcae-9e468c9b2f48 /                       ext4    defaults        1 1
UUID=3e2282e0-6444-4a96-864f-0c98fbe80674 /boot                   xfs     defaults        0 0
UUID=2eb3c8da-38f5-4a1e-8119-49a5cb4272a7 /7days                  ext4    defaults        0 0
UUID=437a728a-872c-4659-94bb-83449500508f swap                    swap    defaults        0 0

swapをできるだけ使わないようにする。

[zip@satori ~]$ sudo vim /etc/sysctl.conf
vm.swappiness=1
[zip@satori ~]$ sudo sysctl -p
vm.swappiness = 1

Firewall設定

firewalldに設定を追加する。ポートは 26900/tcp。26900-26903/udpも公式では必須と書かれているけど、開放しなくても入れたので今回は設定しません

8081/tcpは管理コンソールなので締めておきましょう

[zip@satori 7days]$ sudo firewall-cmd --permanent --add-port=26900/tcp
success
[zip@satori 7days]$ sudo firewall-cmd --reload
success
[zip@satori 7days]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: dhcpv6-client ssh
  ports: 26900/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

SteamCMDのInstall

SteamCMD - Valve Developer Community

[zip@satori ~]$ sudo yum install glibc.i686 libstdc++.i686
[zip@satori ~]$ sudo su - sdtd
Last login: Fri Aug  4 00:56:18 JST 2017 on pts/0
-bash-4.2$ mkdir Steam  # 決め打ち
-bash-4.2$ cd Steam/
-bash-4.2$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxf -
-bash-4.2$ ./steamcmd.sh
Steam>login anonymous

Connecting anonymously to Steam Public...Logged in OK
Waiting for user info...OK

Steam>force_install_dir ../
Steam>app_update 294420 validate

Steam>quit

設定ファイルの編集

設定ファイルは基本的にはdefaultでOKですが、以下のパラメータは設定推奨です

  • ServerPassword
    • 完全オープンなサーバーにしたい以外は設定しておきましょう
  • SaveGameFolder
    • <!-- <property name="SaveGameFolder" value="absolute path" /> --> という記述があるので <!-- --> を削除して absolute path を設定しましょう
    • 7days to dieではデフォルトでは7days実行ユーザーの ~/.local/share/7DaysToDie/Saves/Navezgame/GameName の名前でディレクトリが切られ、そこにゲームデータが保存されます。
    • 何もしない場合、インストールディレクトリにはセーブデータは入らないので注意。ここで指定した場所に置かれるので、先程実行ファイルをインストールしたディレクトリのパスを記述しておきましょう
    • この記事の場合、/7days/ に7daysの実行ファイルが置かれるので、 value="/7days/" と記述しておくと実行ファイルが置かれたディレクトリにセーブデータが置かれます
-bash-4.2$ pwd
/7days
-bash-4.2$ ls
7DaysToDieServer_Data  7DaysToDieServer.x86_64  backup.sh  libstdc++.so.6  Saves             startserver.sh   steamapps
7DaysToDieServer.x86   backup_rotate.conf       Data       Licenses        serverconfig.xml  steam_appid.txt  steamclient.so
-bash-4.2$ cat serverconfig.xml | grep 'name="SaveGameFolder"'
        <property name="SaveGameFolder"                         value="/7days/Saves/" />  <!-- Use this to only override the save game path. Do not forget to uncomment the entry! -->
-bash-4.2$ ls /7days/Saves/
Navezgane  profiles.sdf  serveradmin.xml
-bash-4.2$ ls /7days/Saves/Navezgane/
7days Game
-bash-4.2$ cat serverconfig.xml | grep 'name="GameName"'
        <property name="GameName"                                               value="7days Game"/>
  • GameName
    • ↑で使われるので、わかり易い名前にしておきましょう
  • TelnetPassword / TelnetEnabled
    • 変更推奨

起動&systemd作成

起動のため、systemdに登録する

$ vim /etc/systemd/system/7days.service
[Unit]
Description=7 Days to die server

[Service]
User=sdtd
Group=sdtd
WorkingDirectory=/7days/
ExecStart=/bin/sh /7days/startserver.sh -configfile=serverconfig.xml
ExecReload=/bin/kill -HUP $MAINPID
Type=simple

[Install]
WantedBy=multi-user.target

設定ファイルをおいたら起動

$ sudo systemctl enable 7days
$ sudo systemctl start 7days

しばらくすると起動します。

Ramdisk上に置くには

以下のコマンドでramdiskを作成し、そこにインストール or データの移動をします

今回は16GBのramdiskを作成。fstabにも設定を入れ、起動時にramdiskを作成するようにする

$ sudo mkdir -p /ramdisk
$ sudo vim /etc/fstab
~略~
tmpfs       /ramdisk tmpfs   defaults,size=16384M   0 0
$ sudo mount -a

データの移動を行う場合は、 「設定ファイルの編集」のセクションでも記述した、 SaveGameFolder の場所を変更しましょう

移動しないと移動前のディスクを参照するためramdiskの恩恵を受けれません

backup

ramdiskに置く場合はbackupも設定しましょう(置かない場合も、だけど)

今回は3時間に一度backupをするスクリプトを設定します。niceで優先度を下げておきます

$ sudo yum install pigz -y
$ cd
$ vim backup.sh
#!/bin/sh

DST="/backups"
BACKUP_DAYS=3

cd /ramdisk/

DIRNAME=$(basename $(pwd))
NOW=$(date "+%Y-%m-%d-%H-%M-%S-%Z")

tar c . | pigz -p 8 > $DST/7days_backup_$DIRNAME_$NOW.tar.gz

# find "${DST}" -type f -ctime "+${BACKUP_DAYS}" -exec \rm -fv {} \; | logger  # DST内のBACKUP_DAYS日前以前のファイルをすべて削除するので注意

このスクリプトをsystemd.timerに登録。

$ sudo vim /etc/systemd/system/7days_backup.timer
[Unit]
Description=7 Days to Die backup timer

[Timer]
OnBootSec=3h
OnUnitActiveSec=3h
Unit=7days_backup.service

[Install]
WantedBy=multi-user.target

$ sudo vim /etc/systemd/system/7days_backup.service
[Unit]
Description=7 Days to Die backup service

[Service]
Type=simple
ExecStart=/bin/nice -n 10 /bin/sh /7days/backup.sh

[Install]
WantedBy=multi-user.target

backupの実行&timer set

$ sudo systemctl start 7days_backup  # 実行
$ sudo systemctl enable 7days_backup.timer  # timer set

これで設定できました