2020年2月26日にARK:Survival Evolvedの新DLC、Genesisが発売しました。
Genesisをみんなで遊ぶためのサーバーを構築したので、そのログです。
サーバーをさわったことのない人も読むかもしれませんが、用語やコマンドやエディタ、ターミナルの操作方法などには、あまり詳しく言及していませんのでご注意ください。
構築自体はそこまで大変な作業ではないですが、バージョンや環境が違うとエラーが出ることもあり、またターミナル(サーバーを操作するソフト)の操作方法は独特で癖があるので、はじめてサーバーをさわる場合は、検索を繰り返して頑張る覚悟は必要です。

また、サーバーを構築する上で何かハマった場合はとりあえず、ARKのGamepediaにあるサーバー構築サーバー設定の2ページの確認をおすすめします。(英語)

バージョン情報

システム バージョン
OS Ubuntu 19.10 x64

VPSを選ぶ

ARKのサーバーには最低6GBのRAMと、64bitOSが必要です。
快適な動作を考えると、メモリは8GB程度確保したほうが無難だと思います。
それだけのメモリを使うとなると、海外VPSでないと予算が嵩みます。また、戦闘も多いARKではPingも重要なため、サーバーのロケーションはアジアにしておきたいです。
以上の理由から、VPSにはロケーションに東京を選べるVULTRを採用しました。
アカウントの登録と、paypalでの残高チャージの後、サーバーには「Cloud Compute」、OSには「Ubuntu」を選択、「IPv6」を有効に設定してデプロイしました。

8GBでGenesisのサーバーを動かしてみたところ、5人程度ならラグもあまりなくプレイできました。
それ以上の人数になるとラグが増えるかなという印象です。

Ubuntuの初期設定

ARKのサーバー構築とは関係ありませんが、セキュリティ的にもセットアップ後の初期設定をやっておきます。
終わっている方は飛ばしてください。

パッケージリストのアップデート

SSHでサーバーに接続後、まずは初回起動プロセスが動いている場合があるので、以下のコマンドで確認します。

1
# ps aux | grep apt | grep -v 'grep'

このコマンドを叩いても何もでてこなくなったら、まずはパッケージリストのアップデートをします。

1
# apt-get update && apt-get upgrade

Y/nを聞かれるので、確認後 Y を入力します。そこそこ時間がかかるのでのんびり待ちます。

作業ユーザーと公開鍵認証の設定

新規ユーザーを追加します。

1
# adduser <作業ユーザー名>

パスワードを聞かれるので設定します。その後のユーザー情報は、Enter連打で問題ありません。
次にsudoグループに追加します。

1
2
# gpasswd -a <作業ユーザー名> sudo
# su <作業ユーザー名>

以降、すべての作業はsudoで行います。
まずは、ssh-keyを作成します。

1
$ ssh-keygen -t ed25519 -C "<作業ユーザー名>'s key"

Keysの保存先を聞かれますが、そのままEnterを入力します。
秘密鍵用のパスワードを求められるので設定します。

次に、公開鍵を移動と、パーミッションの設定をします。

1
2
3
4
5
$ cd ~/.ssh/
$ cat id_ed25519.pub >> authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 ~/.ssh
$ rm id_ed25519.pub

次に秘密鍵を確認します。

1
$ cat id_ed25519

ローカルのPCにid_ed25519というファイルを作成し、表示された内容をコピーします。

1
$ rm id_ed25519

コピー完了後、サーバーから秘密鍵を消去します。

1
2
$ exit
# exit

いったん、サーバーへのSSH接続を終了します。
SSHクライアントで作業用のユーザー名・秘密鍵・パスフレーズを設定して、接続をテストします。
うまく接続できたら完了です。

sshdの設定

sshdの設定をします。vimでの編集方法は割愛します。
編集後、ssh接続をするときのポート番号が変更されますのでご注意ください。

1
$ sudo vim /etc/ssh/sshd_config

編集内容はこちらになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-   #Port 22
+ Port <1024から49151の間のポート番号>

(中略)

- PermitRootLogin yes
+ PermitRootLogin no

(中略)

- #PasswordAuthentication yes
+ PasswordAuthentication no

(中略)

- UsePAM yes
+ UsePAM no

編集完了後、sshサービスを再起動します。

1
$ sudo service ssh restart

ファイアウォールのインストール

ファイアウォールをインストールと設定をします。

1
2
$ sudo apt-get install ufw
$ sudo vim /etc/default/ufw

編集内容はこちらになります。

1
2
-   IPV6=yes
+ IPV6=no

sshのポートと、ARKのサーバーに使うポートを解放します。

1
2
3
4
5
6
$ sudo ufw allow <sshのポート番号>
$ sudo ufw allow 27015/udp
$ sudo ufw allow 7777/udp
$ sudo ufw allow 7778/udp
$ sudo ufw default deny
$ sudo ufw enable

Y/nを聞かれるので、確認後 Y を入力します。
正しく設定できているか確認します。

1
$ sudo ufw status

再起動

最後に再起動をします。

1
$ sudo reboot

ARKサーバーの構築

SteamCmdのインストール

SteamCmdは32Bitでないと動かないようなので、インストールします。

1
2
$ sudo dpkg --add-architecture i386
$ sudo apt-get install lib32gcc1

Y/nを聞かれるので、確認後 Y を入力します。
終了後、OSのアップデートとSteamCmdのインストールを行います。

1
2
$ sudo apt-get update
$ sudo apt-get install steamcmd

Y/nを聞かれるので、確認後 Y を入力します。
ライセンスが表示されるので、TABを押し、OKを選択して、Enterを押します。
I AGREEを選択して、Enterを押します。

ファイルオープン数の上限の設定

1
$ sudo vim /etc/sysctl.conf

このファイルの最終行に、以下のテキストを追記します。

1
fs.file-max=100000

うまく設定できているか確認し、次にlimits.confを編集します。

1
2
$ sudo sysctl -p /etc/sysctl.conf
$ sudo vim /etc/security/limits.conf

# End of file というコメントの前の行に、以下のテキストを追加します。

1
2
* soft nofile 1000000
* hard nofile 1000000

pam.dのセッションファイルの編集

1
$ sudo vim /etc/pam.d/common-session

# end of pam-auth-update config というコメントの前の行に、以下のテキストを追加します。

1
session required pam_limits.so

ARKサーバーのインストールと設定

ARKサーバー用のユーザーを作成しパスワードを設定します。

1
$ sudo adduser <ARKユーザー名>

その後、ユーザーを変更し、ARKサーバー用のディレクトリを作成してインストールを行います。

1
2
3
4
$ su <ARKユーザー名>
$ cd ~
$ mkdir ark
$ /usr/games/steamcmd +login anonymous +force_install_dir /home/<ARKユーザー名>/ark +app_update 376030 +quit

インストールにはかなりの時間がかかりますので、ゆっくり待ちます。
インストールが終了したら、作業ユーザーに戻り、ARKの設定ファイルを作成します。

1
2
$ exit
$ sudo vim /lib/systemd/system/ark.service

以下のテキストをペーストします。
いくつか、自分で設定が必要な箇所がありますので、 <> で囲まれた箇所の書き換えは忘れないようにしてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[unit]
Description=ARK: Survival Evolved dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
User=<ARKユーザー名>
Group=<ARKユーザー名>
ExecStartPre=/usr/games/steamcmd +login anonymous +force_install_dir /home/<ARKユーザー名>/ark +app_update 376030 +quit
ExecStart=/home/<ARKユーザー名>/ark/ShooterGame/Binaries/Linux/ShooterGameServer <マップID>?listen?SessionName=<サーバー名>?MaxPlayers=<最大入室プレイヤー数>?ServerPassword=<入室パスワード>?ServerAdminPassword=<管理者パスワード> -server -log
LimitNOFILE=100000
WorkingDirectory=/home/<ARKユーザー名>/ark/ShooterGame/Binaries/Linux
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID

[Install]
WantedBy=multi-user.target

<ARKユーザー名> には、さきほど作成したARKユーザーの名前を設定します。
<マップID> には、マップIDを設定します。ARKのGamepediaのサーバー設定ページの、 <map_name> の項目に、マップIDのリストアップがありますので、参考にしてください。Genesisに設定したい場合は、 Genesis を設定します。
<サーバー名> には、ARKのサーバーリストに表示されるサーバー名を設定します。
<最大入室プレイヤー数> には、ARKのサーバーに入室できる最大人数を整数で設定します。
<入室パスワード> には、ARKのサーバーに入室するためのパスワードを設定します。
<管理者パスワード> には、ARKのチートコマンドなどを使用するためのパスワードを設定します。

最後に、systemctlの設定を行います。

1
2
3
$ sudo systemctl daemon-reload
$ sudo systemctl enable ark.service
$ sudo systemctl start ark

これで、ARKのサーバーに接続できるはずです。

ARKサーバーの運用

ARKサーバーへの接続手順

構築したサーバーに接続するためには、まず、Steamのゲームクライアントを起動します。
その後、メニューバーの「表示」→「サーバー」を選択し、お気に入りタブを選択します。
右下の「サーバーを追加」ボタンを押下し、 <VPSサーバーのIPアドレス>:27015 を入力します。

次にARKのゲームを起動します。
セッション一覧の左下にある、セッションフィルターから「お気に入り」を選択すると、先ほど設定したサーバーがでてくるので、接続します。

一度接続すると、 /home/<ARKユーザー名>/ark/ShooterGame の中に、Savedディレクトリが生成されているはずですので、確認します。

1
$ sudo ls -l /home/<ARKユーザー名>/ark/ShooterGame

できていなかった場合、arkディレクトリのパーミッション設定や、手順に抜けがある可能性がありますので、ご注意ください。

ARKサーバーの設定変更

/home/<ARKユーザー名>/ark/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
/home/<ARKユーザー名>/ark/ShooterGame/Saved/Config/LinuxServer/Game.ini
この2ファイルを編集することで、サーバーのテイム速度やPvP設定などを変更できます。
詳しくは、ARKのGamepediaのサーバー設定ページを参考にしてください。
また編集後は、サーバーの再起動とステータスの確認を忘れないようにしましょう。

1
2
$ sudo reboot
$ sudo systemctl status ark.service

筆者のサーバー設定

参考までに、現在筆者がサーバーで使用している設定を掲載しておきます。

GameUserSettings.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ServerSettings]
serverPVE=1
EnablePVEGamma=1
allowThirdPersonPlayer=1
bAllowFlyerCarryPvE=1
bDisableStructureDecayPvE=1
globalVoiceChat=0
XPMultiplier=30.00000
HarvestAmountMultiplier=4.00000
PlayerCharacterHealthRecoveryMultiplier=1.00000
PlayerCharacterStaminaDrainMultiplier=1.00000
PlayerCharacterFoodDrainMultiplier=1.00000
PlayerCharacterWaterDrainMultiplier=1.00000
TamingSpeedMultiplier=10.00000
DifficultyOffset=1.00000

Game.ini

1
2
3
4
5
6
7
8
[/script/shootergame.shootergamemode]
EggHatchSpeedMultiplier=50.00000
BabyMatureSpeedMultiplier=50.00000
BabyImprintingStatScaleMultiplier=30.00000
BabyCuddleIntervalMultiplier=0.01000
BabyCuddleGracePeriodMultiplier=20.00000
BabyCuddleLoseImprintQualitySpeedMultiplier=0.00100
BabyFoodConsumptionSpeedMultiplier=0.10000

解説
上から解説をしていきます。

  • PvPオフ
  • PvEでのガンマ値の変更を許可
  • 三人称視点可能
  • 飛行恐竜で人間の持ち運び可能
  • PvEでの建築物の破壊タイマーをオフ
  • ボイスチャットオフ
  • 経験値(XP)30倍
  • 採取の収穫量4倍
  • プレイヤーのHP回復量1倍(通常)
  • プレイヤーのスタミナ消費量1倍(通常)
  • プレイヤーの食料消費量1倍(通常)
  • プレイヤーの水分消費量1倍(通常)
  • テイム速度10倍
  • 難易度マックス (マックスにしないと、野生の恐竜の出現レベルが低くなるため、マックスにしています)
  • 孵化/妊娠速度50倍
  • Babyの成長速度50倍
  • Babyのインプリントボーナス30倍
  • Babyのインプリント可能間隔0.01倍
  • Babyのインプリント猶予期間20倍
  • Babyのインプリントボーナス減少速度0.001倍
  • Babyの食料消費速度 0.1倍

ハマったエラー

SteamAPI_Init() failed

1
$ sudo systemctl status ark.service

を実行すると、

1
2
ShooterGameServer[997]: [S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
ShooterGameServer[997]: Setting breakpad minidump AppID = 346110

というエラーメッセージがでてきますが、調べた限りでは、これは無視しても問題ないようです。

error while loading shared libraries: libsteam_api.so:

Genesis発売日にサーバーを構築したところ、下のようなエラーメッセージがでました。

1
/ShooterGame/Binaries/Linux/ShooterGameServer: error while loading shared libraries: libsteam_api.so: cannot open shared object file: No such file or directory

どうやら、ARKのDLCリリース直後は、Linuxの個人サーバーに対応していないようです。

こちらのフォーラムに解決方法がありました。
フォーラムに貼られたGoogleDriveから足りないファイルをダウンロードし、 /home/<ARKユーザー名>/ark/Engine/Binaries/Linux にすべてのファイルを転送し、転送したファイルのパーミッションを775に設定して再起動したところ、無事にエラーが解決しました。
ファイルのダウンロードなど、くれぐれも自己責任でお願いします。

マップの変更

プレイするマップを変更したい場合は、

1
$ sudo vim /lib/systemd/system/ark.service

で、<マップID>を変更し、再起動します。
マップを変更した場合、プレイヤーキャラクターは引き継ぎますが、アイテムは引き継がないようです。(要確認)

おわりに

以上でARKのサーバー設定を終わります。
いつか気が向いたら、セーブデータのバックアップ方法や、Modなどについても追記したいと思います。