(linux, steamCMD利用します。)
この記事はPCゲーム Advent Calendar 2018 – Adventarの2日目の投稿です。
概要
Insurgency: Sandstorm
Insurgency Sandstormのリリース予定が若干延期され12月12日に決定したようなのです。現在はパブリックリリースに向けて購入者のみのbetaがリリースされているので、ちらほらサーバーが立っている様子。また先日にはサーバー提供者向けのDedicated Serverがリリースされたので、これもサーバーの増加を手助けしています。
ただ、なんといってもこれ系のゲームは「日本サーバーが少ない」ので、プレイヤーの間口を広げるべくもっと日本サーバーが立ってほしい。そんな思いを込めて日本語のサーバー導入ガイドを公開します。
検証環境
本稿は以下の検証環境で検証しています。
- OS: Ubuntu Server 16.04LTS
- Architecture: 64bit(amd64)
- Insurgency Sandstormを所持しているSteamアカウント
実際のサーバー導入に際しては、CentOSほかRhel等の一般的にサーバー用途として用いられるLinuxディストリビューションでも、同様の手順で再現可能かと思います。(若干読み替える必要はあると思いますが。)
また後方互換について、Ubuntu Server 18.04LTSでも同様の手順で導入可能です。
導入
Insurgencyサーバー向けのユーザー作成
サーバーの提供をsudoer等に登録されているユーザーで行うと安全上問題なので、dedicated serverを実行するための専用のユーザーを作成します。当コミュニティの場合は、個々のパブリックサーバー向けに1ユーザを追加してグループで纏めている運用をしています。
下記を実行すると、ホームディレクトリが/home/insurgency1のデフォルトユーザーグループがgameuserに設定されたユーザーinsurgency1が作成されます。
$ sudo adduser insurgency1 -d /home/insurgency1 -g gameuser
$ sudo passwd insurgency1
SteamCMDのインストール
dedicated serverのプログラムをsteamからダウンロードするに当たって、steamの機能をCLIで利用可能なsteamCMDを導入する必要があります。dedicated serverの導入時のみでなく、アップデートの際にも必要になりますので、導入後削除したりはしないでください。(今後も必要になります。)
$ mkdir /home/insurgency1/steam
$ cd /home/insurgency1/steam
$ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
$ tar axvf steamcmd_linux.tar.gz
$ rm steamcmd_linux.tar.gz
$ chmod 755 steamcmd.sh
$ ./steamcmd.sh
最後に./steamcmd.shを実行した際にSteamCMDのアップデート確認と最新版へのアップデートが実行されます。ログインが求められた場合はSteamのログインIDとパスワードを入力してください。
またSteamCMDは二段階認証にも対応しています。アカウントで二段階認証を有効にしている場合は、dedicated serverの導入時に二段階認証のキーが求められる場合があります。
Insurgency Sandstormインストール用のシェルスクリプト作成
Insurgency Sandstormの導入とアップデートをSteamCMD経由で行う為に、導入用のシェルスクリプトを作成します。
$ cd /home/insurgency1
$ vim sandstorm_updater.sh
sandstorm_updater.shは下記の内容で作成しました。
#!/bin/bash
/home/insurgency1/steam/steamcmd.sh +runscript /home/insurgency1/sandstorm_updater.txt
今回はsteamCMDのrunscript機能を利用して、実行用のスクリプトを用意しこれを実行するように指定します。スクリプトは下記のファイル名で、下記の内容で作成しています。
account_nameとpasswordをそれぞれInsurgency Sandstormを所有している自身のアカウントに読み替えて作成してください。
// Stop the script if any commands fail
@ShutdownOnFailedCommand 1
// Do not prompt for a password, use the one specified in the login command
@NoPromptForPassword 1
// Force installing windows binaries.(it's not necessary to set)
// @sSteamCmdForcePlatformType linux
// Login to the given steam account
login account_name password
// Set the directory where Sandstorm is/will be installed
force_install_dir /home/insurgency1
// Install or update the files for App ID 581330, for the Sandstorm server
app_update 581330
// Exit the Steam shell
quit
インストール
通常通り、シェルスクリプトを実行します。(二段階認証を有効にしている場合は、ここでキーを聞かれます。)
$ ./sandstorm_updater.sh
Insurgency Sandstormサーバー起動用のシェルスクリプトの作成
起動時に毎回引数を指定して起動するのが大変面倒な為、シェルスクリプトを書いて管理しています。
また下記の内容であれば、”-debug”オプションを指定しない場合標準出力の内容がlogsディレクトリ以下に保存される為、サーバー管理の都合上そのようにしています。
$ vim start_sandstorm.sh
port,queryport,maxplayers,basedir,logdir,hostname等のオプションは、各自の環境に読み替えて作成してください。
#!/bin/bash
while true; do
port=27102
queryport=27131
maxplayers=28
basedir=/home/insurgency1
logdir="logs"
hostname="Canned Catfoog Gaming Checkpoint"
if [ -d ${logdir} ]; then
echo "log directory is found. log will be saved on $(pwd)/$logdir"
else
echo "log directory is not found. creating log directory on $logdir"
mkdir ./logs
fi
cd Insurgency/Binaries/Linux/
echo "Starting Insurgency Sandstorm server on port $port"
echo "Current directory: $(pwd)"
if [ "$1" = "-debug" ]; then
./InsurgencyServer-Linux-Shipping Town?Scenario=Scenario_Town_Checkpoint_Security?MaxPlayers=$maxplayers -Port=$port -QueryPort=$queryport -hostname="$hostname"
else
./InsurgencyServer-Linux-Shipping Town?Scenario=Scenario_Town_Checkpoint_Security?MaxPlayers=$maxplayers -Port=$port -QueryPort=$queryport -hostname="$hostname" >> $basedir/$logdir/log`date +%Y%m%d%H%M`.txt 2>&1
fi
echo "Sandstorm server has stopped ..."
for (( i=3; i>0; i-- ))
do
echo "Restarting in $i"
sleep 1s
done
done
このまま起動した場合は、マップTownのSecurity側でゲームルールCheckpointのサーバーがport 27102で立ち上がります。
適宜ゲームルール、マップは置き換えて実行してください。現在実装されているゲームルールは下記になります。
Farmhouse
- Scenario_Farmhouse_Checkpoint_Insurgents
- Scenario_Farmhouse_Checkpoint_Security
- Scenario_Farmhouse_Firefight_East
- Scenario_Farmhouse_Firefight_West
- Scenario_Farmhouse_Push_Insurgents
- Scenario_Farmhouse_Push_Security
- Scenario_Farmhouse_Skirmish
Hideout (Town)
- Scenario_Town_Checkpoint_Insurgents
- Scenario_Town_Checkpoint_Security
- Scenario_Town_Firefight_East
- Scenario_Town_Firefight_West
- Scenario_Town_Push_Insurgents
- Scenario_Town_Push_Security
- Scenario_Town_Skirmish
Refinery (Oilfield)
- Scenario_Oilfield_Checkpoint_Insurgents
- Scenario_Oilfield_Checkpoint_Security
- Scenario_Oilfield_Firefight_West
- Scenario_Oilfield_Push_Insurgents
- Scenario_Oilfield_Push_Security
- Scenario_Oilfield_Skirmish
サーバー実行
下記をインストールディレクトリで実行するとサーバーが起動します。
UFWやfirewalld、SELinuxをEnabledに設定している場合は、DisabledあるいはPermissiveにするか、対応する設定を行ってください。
$ ./start_sandstorm.sh
screenの利用
このままではサーバーで実行した内容はサーバーから抜けると終了してしまう為、screenで実行することをお勧めします。
$ screen -S sandstorm1
$ cd /home/insurgency1
$ ./start_insurgency.sh
参考など
Insurgency: Sandstorm Community Server Discussion :: Steam コミュニティ
Insurgency: Sandstorm Server Admin Guide – Google ドキュメント
Insurgency:Sandstormの日本語でのサーバー構築情報が少ない中、こうして丁寧にご説明いただきありがとうございます。
私も、上記の例に倣いPvPサーバーの構築を目指しているんですが、Insurgency Sandstormサーバー起動用のシェルスクリプトを作成し、実行する段階で、bashより
「./start_sandstorm.sh: line 33: syntax error: unexpected end of file」とエラーが返させてしまいます。shell scriptの編集点としてはhostnameを変更しただけで、それ以外に特に変更および編集はしておりません。syntax errorなのでスクリプトの構文等が間違ってると推測されますが、未だ解決しておりません。
大変僭越ですが、当該問題の解決方法またはヒントなど教えていただければ幸いです。
駄文失礼しました。
ざっくりと確認した範囲ですが、line30に本来挿入するはずの”done”が記述されていない為発生していました。
該当箇所を修正しましたので、ご確認ください。