CentOS StreamにARK鯖を建てる
仲間内でプレイしようと思い、VPSにARK:Survival Evolvedのサーバーを建てたときの備忘録です。6月3日に「Genesis Part2」が配信され、ARK界隈もまた少し盛り上がるかな。
事前準備
マシンスペック
サーバーはさくらのVPSの4GBメモリープランです。キャンペーン期間中でしたので追加費用なしでSSDの容量をアップできました。OSはCentOS Streamをインストールしています。
CPU: 仮想4core
メモリー: 4GB
SSD: 400GB
OS: CentOS Stream
ファイル数上限変更
開くことができるファイル数上限を変更します。
vi /etc/sysctl.conf
viコマンドで開き、以下の設定を追加します。
fs.file-max=100000
vi /etc/security/limits.conf
limits.confには以下の2行追加します。
* soft nofile 1000000
* hard nofile 1000000
一旦サーバーを再起動し設定を反映させます。
仮想メモリーを割り当てる
ARKのサーバープログラムには最低でも6GBのメモリーを要するので今回用意したマシンスペックではメモリー不足のため動かすことが出来ません。SSDの領域を仮想メモリーとして割り当てます。
6GB以上のメモリーを搭載したマシンの場合は仮想メモリーを割り当てる操作は不要です。VPSのマシンスペックが高くなればなるほど利用料金も上がるので、お財布事情と要相談ですね。メモリー2GBのVPSに仮想メモリーを割り当ててプレイしてみましたがラグが酷くまともにプレイ出来ませんでした。最低でも4GBメモリーを搭載したVPSの方がよさそうですね。4,5人ぐらいでのプレイなら問題なく出来ると思います。
(例として4GBの仮想メモリーを割り当てます。環境によって変更してください。)
dd if=/dev/zero of=/var/swpfile bs=1M count=4096
mkswap /var/swpfile
chmod 600 /var/swpfile
swapon /var/swpfile
このままではサーバー再起動時に確保したスワップ領域が外れてしまうので、サーバー起動時にスワップ領域を割り当てるように設定します。
vi /etc/systemd/system/swapon.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/swapon /var/swpfile
[Install]
WantedBy=multi-user.target
上記の内容でサービスのユニット定義ファイルを作成します。サービス名は何でも構いません。分かりやすい名前を付けておきましょう。
定義したサービスを起動し、自動起動を有効にしておきます。
systemctl start swapon.service
systemctl enable swapon.service
必要なライブラリをインストール
yum install glibc.i686 libstdc++.i686
サーバープログラムをインストールする
ユーザー作成
ARKのサーバープログラムを実行するユーザーを作成します。
useradd ark
passwd ark
changing password for user ark
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
作成したユーザーに切り替えます。
su - ark
SteamCMDの入手
Steamのゲームのサーバープログラムの入手にはSteamCMDというプログラムが必要です。Steamというフォルダを作成し、そこにダウンロードし解凍します。
mkdir Steam
cd Steam
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
ARKのサーバープログラムをインストール
SteamCMDを起動します。
./steamcmd.sh
匿名ユーザーでログインします。
Steam>login anonymous
インストール先ディレクトリを指定します。
Steam>force_install_dir ./ARK/
ARKのサーバープログラムをダウンロードします。376030という謎の数字はARKサーバープログラムのIDです。同様のやり方で他のSteamゲームのサーバープログラムを入手することができます。
Steam>app_update 376030 validate
SteamCMDを閉じます。
Steam>exit
ARKを起動する
ARK起動ファイルを設定
ARK用のユニット定義ファイルを作成し、systemctlに登録します。サーバーの再起動等の操作が容易になるので便利です。root権限のあるユーザーでこれらの作業をします。
vi /etc/systemd/system/ark-dedicated.service
[unit]
Description=ARK: Survival Evolved dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStartPre=/home/ark/Steam/steamcmd.sh +login anonymous +force_install_dir ARK +app_update 376030 +quit
ExecStart=/home/ark/Steam/ARK/ShooterGame/Binaries/Linux/ShooterGameServer TheIsland?listen?SessionName=<server_name>?ServerPassword=<join_password>?ServerAdminPassword=<admin_password> -server -log
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
User=ark
Group=ark
[Install]
WantedBy=multi-user.target
ファルダパス等はそれぞれ環境によって合わせてください。サーバーパスワードを設定しておくとプライベートサーバーにできます。身内でプレイするには荒らしや負荷対策に設定しておいた方が良いと思います。
ARK: Survival Evolved を起動する
デーモンの設定を反映します。
systemctl daemon-reload
自動起動の登録をし、arkのサーバーを起動します。arkのサーバーの起動には時間が掛かりますので気長に待ちましょう。
systemctl enable ark-dedicated
systemctl start ark-dedicated
停止する場合
systemctl stop ark-dedicated
ポートを開放する
サーバーは立ち上がりましたが、ARKで通信するポートを開放しないと接続できませんね。1つ1つポートを開放しても良いですが、開放するポートが増えると管理が乱雑になりそうなので、firewalldにark用のサービスを定義します。
vi /usr/lib/firewalld/services/ark.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>ARK</short>
<description>ARK Survival Evolved</description>
<port protocol="udp" port="27015"/>
<port protocol="udp" port="7777"/>
<port protocol="udp" port="7778"/>
</service>
定義したサービスをfirewalldに読み込み、publicゾーンにサービスを追加しポートを開放します。
firewall-cmd --reload
firewall-cmd --permanent --zone=public --add-service=ark
firewall-cmd --reload
サーバーに接続して遊び倒す
以上でARK:Survival Evolvedのサーバーの立ち上げは完了です。ポートを開放し、正常に起動できていればサーバーブラウザーに表示されます。Steamのサーバーブラウザーかゲーム内で自身のサーバーを検索、サーバーのドメイン、IPを入力、いずれかの方法で接続して恐竜の跋扈する世界で遊びましょう。
サーバープロパティ
難易度調整などの詳細な設定はARKのサーバープログラムに格納されているiniファイルから変更します。テイミングスピードを調整するなどして遊ばないと膨大な時間がかかります。
ディレクトリパス
Steam/ARK/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
Steam/ARK/ShooterGame/Saved/Config/LinuxServer/Game.ini
詳細は公式wikiへ