CS2サーバーをLinuxでホストする
作成。
以下、スクラップ作成時の前提条件および背景。
- CS2は公式のLinuxサーバーが存在せず、Windowsにしか存在しない。
- CSGO時代のデファクトスタンダードとして君臨していたSourceModは、現時点で機能しない。
- 参考までに、CSGO時代はMetaModというプラグインが根幹に存在し、その上にSourceModが乗り、更にその上にSourcePawnという言語で記述されたプラグインが乗る形になっている
- MetaMod, SourceModはAlliedModdersというMod開発者コミュニティがメンテナンスしている。
- 余談だが、AlliedModdersがSource2Modの仕様策定に向けて動いている (Source2Mod)
- さらに、ResourceModという新規のModシステムもスタートしている模様(こちらはAlliedModders傘下ではない?)
- MetaModはCSGO時代のインストール方法では機能せず、古いMetaModのインストール方法で入れる必要がある。
- ちなみに、現時点ではプラグインのロードなど一部の機能などしか提供されていない。
- Limited Test期間中はValveが公式で提供するVScript(VDF/VST形式のプラグイン) を使ったプラグイン開発が主流だったが、テスト期間中にVScript機能ごと削除されたらしい。
- CS2でのZombieReloadedモードを再現するレポジトリをGitHub上に発見した- https://github.com/Source2ZE/ZombieReborn
- 以上の背景から、現時点でSource2/CS2上のサーバーに安定したプラグイン機構を提供するシステムは存在しないと考えられる。
- しかしながら、FACEIT、 PopFlash、PRACC、DATHOST など、サードパーティーにも関わらずプレイヤー向けにサーバーを提供しているプラットフォームは存在しているため、何かしらの方法で開発すること自体は可能だと思われる。
まずは、バニラ状態のCSサーバーを作成するところから調査を始める。
SteamCMDでCSGOのLinux版クライアント(サーバーではない) をインストールする必要がある。
以下スクラップの流れはおおまかには間違っていなかった模様
SteamCMD上で以下コマンドを実行し、CSGOのクライアントをインストールする。
force_install_dir /home/user1/cs2
login {steam username} > {steam password} > {2FA code}
app_update 730 validate
また、steamclientライブラリが必要になるため、SteamCMD中のライブラリを指すシンボリックリンクを作成する。
ln -sf /home/user1/.steam/steam/steamcmd/linux64/steamclient.so /home/user1/.steam/sdk64
CSGOと同じように、GSLTトークンを取得し、server.cfgに記載する。
わからない人は以下を参考に取得する。
sv_setsteamaccount "{token}"
以下のスクリプトで、cs2サーバーを起動する。
/home/user1/cs2/game/bin/linuxsteamrt64/cs2 -dedicated -usercon +game_type 0 +game_mode 1 +map de_dust2
ちなみに以上の手順は、reddit上の投稿をほぼそのまま引用している。
以下の手順を参考に、MetaMod:Sourceをインストールする。
gameinfo.gi ファイルを編集し、末尾のセクションに下記を追加する。
GameBin |gameinfo_path|addons/metamod/bin
既に夜3時のため、MetaModの動作確認及びSRCDS自体の動作確認は後日行うことにする。
MetaModの導入が可能であれば、SourceModを導入せずとも自力でのプラグイン開発が可能となる未来が見えそうだ。
明日以降の目標は、実際にCS2サーバーをホストし接続すること、そしてMetaModの動作を確認し、サンプルプラグインを導入または実際に開発・コンパイルしサーバーに導入することを目標とする。
ちなみにトップのコメントで「公式のWindowsサーバーは存在しない」と言い切ってしまったが、ここはちょっと調査不足かもしれない。
LT期間中は、Windowsクライアントに-dedicated 引数を追加することでサーバーの起動が可能だった。
まだちゃんと見れていないが、Steam上にちゃんとWindows向けサーバーは存在するかもしれないので、指摘などあれば随時受け付けます。
Dockerのイメージが出回り始めて、Linux向けのサポートがかなり安定してきたので、最近は以下のDockerコマンドで済ませている。
docker run -it --name=cs2-sharp --user=steam --env=DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true --env=STEAMUSER=anonymous --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=USER=steam --env=HOMEDIR=/home/steam --env=STEAMCMDDIR=/home/steam/steamcmd --env=STEAMAPPID=730 --env=STEAMAPP=cs2 --env=STEAMAPPDIR=/home/steam/cs2-dedicated --env=CS2_SERVERNAME=SPDG --env=CS2_PORT=27015 --env=CS2_MAXPLAYERS=10 --env=CS2_RCONPW=spdg --env=CS2_PW=spdg --env=CS2_MAPGROUP=mg_active --env=CS2_STARTMAP=de_dust2 --env=CS2_GAMETYPE=0 --env=CS2_GAMEMODE=1 --env=CS2_LAN=1 --volume=/home/flowing/cs2-data:/home/steam/cs2-dedicated/ --workdir=/home/steam -p 27015-27030:27015-27030/tcp -p 27015-27030:27015-27030/udp cm2network/cs2 ./entry.sh
これにて調査終了。