7 Days to DieのLinuxサーバーを立てる
7 Days to DieというゲームをLinux Server上に置くための手順です。7 Days to DieはDedicated ServerとしてLinuxが使用できるのがいいですね。
OSはInstall済みなのが前提です。今回はCentOS7を利用しました。
ここも参考になるので詰まったら見てみてください
- マルチサーバー構築について - 7 Days to Die Japan Wiki*
- Steam Community :: Guide :: Installing Linux dedicated server for 7 days to die
- https://developer.valvesoftware.com/wiki/SteamCMD
ディスクの用意
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も公式では必須と書かれているけど、開放しなくても入れたので今回は設定しません
※[2020/03/28追記] 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
これで設定できました