Arma3 MODサーバー構築 (LinuxGSM)
Insergencyにもちょっと飽きてきたので気分転換に別のゲームをやってみよう月間ですw
たまたまセールで900円だったので購入
もうセールは終わったけど、何回もやっているらしいんでそのうちまたやると思われる。
お試しでSMGメンバーの方にサーバーを立ててもらって軽く遊んだんだけど
やっぱり自分でサーバーを立てたくなったんで備考禄的にここに書きます。
まず、ゲームサーバーOSはAlmaLinux 8(CentOS 8系)
ゲームサーバーマネージャーはLinuxGSM
目次 / Contents
AlmaLinuxにArma3をインストール(LinuxGSM)
下記コマンド(コマンドは基本的に1行づつ実行。2行以上で間隔が狭い場合は実質1行です)をコンソールにて実行する(sudoコマンドが使えるユーザーであること)
前段階のインストール
sudo yum install epel-release
sudo yum install curl wget tar bzip2 gzip unzip python3 binutils bc jq tmux glibc.i686 libstdc++ libstdc++.i686
GameDig
次にGameDigという詳細情報を表示するための追加モジュールをインストール
推奨なのでなくても問題ないが、ログにインストール出来ない等のエラーメッセージが出るので自分は入れている。
curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -
sudo yum install nodejs npm
sudo npm install gamedig -g
ユーザー作成&インストール
GAMEサーバー用のユーザー作成(インスタンス)
基本、ゲームのインスタンスはユーザーごとで管理する。
設定ファイルなどの重複を防ぐため?
ユーザー名は何でもいい。(例として[arma3user1]としている)
sudo adduser arma3user1
sudo passwd arma3user1
↑コードを実行すると新パスワードを聞いてくるので直接入力する。
su - arma3user1
wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh arma3server
↑ユーザーを[arma3user1]に変更した上でLinuxGSMのダウンロード。
steamユーザーはサーバー用に新規で作成しておく。このユーザーはArma3を購入していなくてもOK。
Steamガード
Steamガードをオフにしておく。Steamのページで[Steamアカウントの詳細]→アカウントセキュリティ[Steamガードの管理]→[Steamガードをオフにする]
Steamガードがあるとupdateコマンドを使うたびに認証用のメールが送られてくるので、オフのままにしておく。なのでサーバー用のアカウントには何も情報を載せないでおくこと。
(Insurgency: Sandstormの場合は、匿名アカウントが使えるため何も問題なかったのに)
mkdir -p lgsm/config-lgsm/arma3server
vim lgsm/config-lgsm/arma3server/arma3server.cfg
lgsm/config-lgsm/arma3server/arma3server.cfgに新たに作ったsteamアカウントで(abcde,xyzの部分)下記コードを書き込む(vim以外のテキストエディタでも問題なし)
steamuser="abcde"
steampass='xyz'
Arma3サーバーのインストール(中身はsteamCMDでインストールしている)
./arma3server install
ダウンロードに多少時間がかかるがこれでインストールは完了。
失敗した場合は下記コードで再インストールしてみる。
./arma3server update
初期設定
ここから先はGUIでの設定とする。
ユーザー[arma3user1]でログインする。
arma3server.cfgの設定。
lgsm/config-lgsm/arma3server/_default.cfg
をテキストエディターで開きテンプレートとしてすべてのコードを
lgsm/config-lgsm/arma3server/arma3server.cfg
にコピーしてくる。
common.cfgでも多分大丈夫だが自分の環境ではこけたことがあったので上記にしている、実は使い方が異なる。
- common.cfg:このユーザー全体(グローバル)
- arma3server.cfg:このユーザーで別のインスタンスを作成できる用
まぁ、別なインスタンスを作成する予定がなくてもarma3server.cfgに書いておけば問題はない。
参考:Valheimの専用サーバ(LinuxGSM)で複数インスタンスを生成する - njo (hatenablog.com)
↓折角なのでサンプルを用意した。
##################################
####### Instance Secrets #########
##################################
# PLACE INSTANCE SECRET SETTINGS HERE
## These settings will apply to a specific instance.
#### Game Server Settings ####
## SteamCMD Login | https://docs.linuxgsm.com/steamcmd#steamcmd-login
steamuser="username"
steampass='password'
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="2302"
## ARMA 3 Modules
# Add mods with relative paths:
# mods/@cba_a3
# To load the "Community Base Addons v3" module found in the
# directory serverfiles/mods/@cba_a3. Load several mods as:
# mods="mods/@ace\;mods/@acex\;mods/@cba_a3"
mods=""
## Server-side Mods
servermods=""
## Path to BattlEye
# Leave empty for default
bepath=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="-ip=${ip} -port=${port} -cfg=${networkcfgfullpath} -config=${servercfgfullpath} -mod='${mods}' -servermod=${servermods} -bepath=${bepath} -autoinit -loadmissiontomemory"
steamuser="username"
steampass='password'
はご自分のSteamアカウント(インストールで使用したもの)に変えてください。
これで、arma3server.cfgの初期設定は完了。
実際に大事なのは[startparameters=]の1行(実は1行で書かなくてはいけない)
ipやportはそこに入れるために代入しているに過ぎない。
一応ポートはデフォルトの2302になっている。
最初はよくわからないと思うのでデフォルト推奨。
arma3server.server.cfgの設定
次にサーバーの名前などの初期設定をする。
下記コマンド(LinuxGSMのコマンド)を実行して一度サーバーを起動し必要なファイルを作ってもらうほうが早い。
./arma3server start
./arma3server stop
終わったら[/home/arma3user1/serverfiles/cfg/arma3server.server.cfg]を編集する。
既にテンプレートが用意されているので必要な部分を書き換えるだけである。
こういうところがLinuxGSMの便利さ。(SteamCMDでも出来るかもしれませんが、使ってないのでわからない)
- hostname = "LinuxGSM"; サーバーの名前
- password = "arma3pass"; パスワードをかけておきたい場合([//]でコメントアウトされている)
- passwordAdmin = "adminE50B1TTi"; 管理者パスワード(何に使うか分かっていないが変更しておく)
- admins[] = {""}; 管理者のSteamID64を入れておくと、ゲーム内でパスワード無しで管理者にログイン出来る
- maxPlayers = 32; 最大プレイヤー数
- motd[] = {"Welcome to My Arma 3 Server"}; ウェルカムメッセージ
あたりを変更する。
以上でcfg系の初期設定は終了。
ポート開放
使用するポートはUDPの連続した5ポート
デフォルトでは2302~2306を開放しておけばいい。
参考:【GAME】ARMA3 EXILE MODサーバの旅その40 | 鍋風呂 (ahh.jp)
Linux(CentOS 8系)でのポート開放のしかた。
sudoコマンドが使えるユーザーで行うこと。
sudo firewall-cmd --list-all
↑現在の設定確認
sudo firewall-cmd --zone=public --add-port=2302-2306/udp --permanent
sudo firewall-cmd --reload
↑2302~2306のUDPポート開放
sudo firewall-cmd --list-all
↑念のため確認して解放できていれば完了。
次にルーター側も開放しておく。
ルーター側の説明は機種によって異なるのでここでは省略します。
自力で頑張ってみてください!
終わったら、これでとりあえずデフォルトサーバーは公開できますので
試しに動かして遊んでみてください。下記コマンドで起動します。
./arma3server start
LinuxGSMコマンド基本的な使い方をみてテスト運用してみてください。(翻訳ツールを使えば大体意味は分かるはず!)
以上で初期設定は完了です。
細かい設定については自分もあまり分かっていないので
各自調べて設定してみてください。
crontabの設定
上記LinuxGSMのサイトにもありますが、設定しておくとサーバーを自動化できる便利なcrontabの説明です。
AlmaLinux 8ではcronを使わずタイマーを推奨とありますが、かなり面倒なのでゲームサーバーはcronを使っていますし、まぁ普通に動いています。
crontab -e
テキストエディターが開くと思うので下記を書き込みます。
*/5 * * * * /home/arma3user1/arma3server monitor > /dev/null 2>&1
*/30 * * * * /home/arma3user1/arma3server update > /dev/null 2>&1
0 0 * * 0 /home/arma3user1/arma3server update-lgsm > /dev/null 2>&1
0 8 * * * /home/arma3user1/arma3server restart > /dev/null 2>&1
arma3user1は各自作成したユーザー名に変更してくださいね。
1行目の説明:5分ごとにコマンド[./arma3server monitor]を実行する。(停止していたら起動する)
2行目の説明:30分ごとにコマンド[./arma3server update]を実行する。(アップデートチェック)
3行目の説明:毎週日曜の0時にコマンド[./arma3server update-lgsm]を実行する。(LinuxGSMのアップデートチェック)
4行目の説明:毎日8時にコマンド[./arma3server restart]を実行する。(再起動。LinuxGSMサイトには載っていない)
たとえばここに毎週月曜の6時にバックアップを追加したい場合
0 6 * * 1 /home/arma3user1/arma3server backup > /dev/null 2>&1
を追加すればいい。
参考:crontabの書き方 | server-memo.net
Rconツール
次に必須ではないが、あると便利なRconツールの設定方法。
Rconツールは別なPCからでもお手軽リモート管理ができるアプリです。
設定ファイルの変更などはできませんが、現在いるプレイヤーの情報やミッションの変更。リスタートやコマンドの送信など、わざわざゲームにログインして管理者コマンドしなくても色々できてしまいます。
サーバーの設定
アンチチートソフトのBattlEye経由でRconが実行されるので、まずはBattlEyeを有効にしておくこと。
/home/arma3user1/serverfiles/cfg/arma3server.server.cfgをテキストエディターで開き
101行目の[BattlEye = 1;]が1になっていることを確認
0だった場合、1にする。
ファイル編集
/home/armaserver1/serverfiles/battleye/launchのフォルダにテキストエディターで
RConPassword xyz
RConPort 2310
と書いて(パスワードのxyzは各自変更してね)、beserver.cfgとbeserver_x64.cfgとして追加する。(64ビットで起動している場合はx64しか使わないが念のため)
ポートは変更できるが2302~2306は使えない。そして、なぜかわからないが2301も使えなかった。
あるサイトを参考に、ここでは例として2310にしている。
参考:ARMA 3 - Setting Up RCon - HackMD
ポート開放
次に2310ポートを開放する
sudo firewall-cmd --zone=public --add-port=2310/udp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
サーバーでポートが開いたことが確認出来たら、ルーター側のポートも開放する。
(ローカルでしか使わない場合は、ルーターの設定は必要ない)
battleWarden
Rconツールは何でもいいが、とりあえず良さそうだったbattleWardenを使っているので
簡単な説明を。
と言ってもダウンロードして、起動して、Server ManagerにHostID(サーバーのIP [ipv4] )、Port(上記で設定した2310)、Password(上記で設定したもの)を登録して繋ぐだけ。
うまく動かない場合は、ファイアウォールに例外アプリとして登録すればいけるかな?
まだ、自分も使い始めたばかりなので細かい使い方はわからないけど
そんなに難しい英語でもないし使っていくうちに何とかなると思う。
日本語の情報がほぼないので、その内気が向いたらまとめてBLOGに書くかもしれない。
Mod適用
ファイルダウンロード
サーバーでのMODダウンロード方法が分からなかったのでゴリ押し戦法を使っています。
まずは、クライアント(Windows)で使うMODをSteamでサブスクライブし
ダウンロードされたら、ゲームがインストールされているフォルダ
...\SteamLibrary\steamapps\common\Arma 3\!Workshopフォルダ(隠しフォルダになっているので表示できる設定にしてください)から、サーバーの/home/arma3user1/serverfiles/modsフォルダに@xxxフォルダをコピー。(modsフォルダは新規作成する)
コピーの方法は何でもいいが自分はFTPを使っている、FTPについてはゲームと直接関係ないのでここでは省略する。
MOD適用設定
lgsm/config-lgsm/arma3server/arma3server.cfgを開き23行目の[mods=""]にダウンロードしたフォルダ名を記入する。
例として、
mods="mods/@ace;mods/@CBA_A3;mods/@JSRS SOUNDMOD"
これは、modsフォルダ内の@ace、@CBA_A3、@JSRS SOUNDMODフォルダを有効化するという意味。
参考:Arma3 Dedicated Server - MODのインストール - Ging Ring Activity Report (hatenablog.com)
アドオン署名
次に署名の追加を行う。
これが日本語の情報がほとんどなく苦労した部分であるが分かってしまえば簡単である。
arma3ではクライアントとサーバー側のMODの整合性チェックを署名keyを使って行っているようで、MODを入れた場合その署名keyも適応させないとエラーが出て入れなくなる。
サーバー設定で署名チェックを無効化もできるが、そうすると適応されないMODが悪さをすることがある。
なので、私は署名チェックは推奨しておく。
まずは、[/home/arma3user1/serverfiles/cfg/arma3server.server.cfg]を開き90行目の
verifySignatures = 2;
であることを確認する。(値が0の場合署名チェックは無効)
次に、ダウンロードしたmodsフォルダ内にある@xxxフォルダの(例えば/home/arm3user1/serverfiles/mods/@ace)keysフォルダ内にある[xxx.bikey]ファイルを[/home/arm3user1/serverfiles/keys]フォルダ内にコピーする。
以上で署名の設定は完了。
但し、MODがアップデートされた場合は署名keyも更新されるので、ダウンロードから署名keyのコピーまでもう一度やる必要がある。
これによりクライアントとサーバーでのバージョン違いによる誤作動を防いでいる。
参考:【亀】最短Arma3 Exile Modサーバの上げ方@2020/3更新 | 鍋風呂 (ahh.jp)
ace3のモジュールMODには.bikeyが入っていないが、ベースとなる@aceのキーがすべてに対応しているようで1つだけで問題ないようだ。
以上で署名に関する設定は完了。
クライアントでサーバーに入る場合にランチャーから入ろうとすると自動でMODをon/offされるようになったはず。
うん。便利!
Modミッション
最後にModミッションの入れ方です。
これもサーバーでのダウンロードの仕方が分からなかったので、クライアントからコピーしてきています。
SteamのArma3用ワークショップで
入れたいミッションをサブスクライブする。
ダウンロードが完了すると[C:\Program Files (x86)\Steam\userdata\xxxxxxxx\ugc\referenced]フォルダに番号が書かれたフォルダが作成される。
その中にある xxx.pboファイルがミッションファイルなのでそれを[/home/arma3user1/serverfiles/mpmissions]フォルダの中にコピーする。(FTP等で)
arma3user1はあなたが作成したユーザーの名前に変更してね。
以上でミッションのインストールは完了。
ゲームを起動してチェックしてみてください。
これで、基本構成の説明は終了です。
後はそれぞれ好きなサーバー構成にしてください。
自分はまだArma3触り始めたばかりなのでここから先はおいおいやっていくつもりです。