SUMIKOの「ブロマガもまったりお送りしております?」

二日に一度ゲーム実況動画をあげています。ニコニコからはてなブログへ引っ越してきました。

【ConoHa】新しいサーバーを借りて、GMOD専用サーバーにする話 第2話

【ConoHa】VPNサーバー(CentOS)にGMODクライアントをインストールする話

f:id:xxSUMIKOxx:20210905170707j:plain

いよいよ、レンタルしたサーバーにGMODのクライアントをインストールします。

ただ、今回金銭面の問題で、以前にインストール済みのサーバーで設定を進めたため、「記憶をたどりつつ、解説サイトの翻訳をする」形で執筆しております。

そのため、実際と違う部分あるかもしれませんので、何かありましたら、コメントください。

 

なお、本記事は以下のサイトを参考にしています。

原文(英語)が読める方はこちらを参照した方が確実かもです。

docs.ttt2.neoxult.de

 

レンタルするサーバーのOSについて

まず、使用するOSについて前話では触れてなかったことについて補足。

ボクはCentOSしかわからないので、CentOSをつかっているんですが、バージョンについて一点。

CentOS9でインストールを試みた際、SteamCMDインストール時にエラーが出てました。ボクの操作ミスの可能性もありますが、CentOS7での運用を推奨します。実際、今回、GMODがうまく動いたのは、CentOS7だったし、ネット上の情報でも、大体の人はCentOS7でやってました。

 

ポート開放

まず、GMODで使うポートを開放します。結論から言うと、GMODで使用するポートは、起動コマンドによって自分で指定するため、どの番号でもかまいません。

ただし、デフォルトのポート番号が27015になっていますので、27015だとサーバーに入ってくる参加者がいちいちポート番号の指定しなくてもよいため、便利です。

(セキュリティ上の問題はわかりません。詳しい方いたらコメントください。)

 

ファイアウォールの設定を変更するには管理者権限が必要なので、suコマンドで管理者権限を得ます。(プロンプトが$から#に)

$su

Password:(パスワードを入力)

 

まずは、ファイアウォールを有効にします。(すでに有効にしている場合はこの操作は必要ありません。)

# systemctl start firewalld

 

次に、使用するポートを開放します。(デフォルトの27015を使っていますが変更してもかまいません)

# firewall-cmd --add-port=27015/tcp --permanent
# firewall-cmd --add-port=27015/udp --permanent

tcpだけでもいいかもしれませんが、一応udpも開いてます。)

 

あと、これはボクが保険的にやったことなのでもしかしたら不要かもしれませんが、HTTPとHTTPSも開放しました。

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

 

追加した設定を反映させるためにファイアウォールをリロードします。

#firewall-cmd --reload

 

設定内容を確認しましょう。

#firewall-cmd --list-all

 

「services:」のところに「http」「https

ports:」のところに開放したポート番号があることを確認してください。

 

補足:追加したポート番号を閉じたい場合

以下のコマンドで開放したポートを閉じることができます。

# firewall-cmd --remove-port=27015/tcp --permanent

ようするに、--addが--removeに代わっただけです。

 

ここから先は管理者権限いらないんで、「exit」して一般ユーザーに戻っていいです。(#が$に)

 

SteamCMDのインストール

基本的にSteamのクライアントをインストールするためには「SteamCMD」というソフトを使います。

 

最初に、SteamCMDを入れるディレクトリ(今回はSteamとしました)を作ります。

$ mkdir Steam

 

カレントディレクトリをSteamに移動します。

$ cd Steam

 

SteamCMDをダウンロードし、解凍します。

$ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz

$ tar -xvzf steamcmd_linux.tar.gz

 

SteamCMDを起動するシェルスクリプト(Steamディレクトリ内にできる)を起動します。

$ ./steamcmd.sh

 

プロンプトが「Steam>」になれば成功です。

 

GMODとCS:Sのインストール

GMODのインストール

いよいよGmodクライアントをインストールします。

まず、anonymousでログインします。

Steam> login anonymous

 

つぎに、インストールするフォルダ(この場合、gmod_ds)を指定し、ダウンロード&インストールをします。

Steam> force_install_dir /home/Steam/gmod_ds/

Steam> app_update 4020 -validate

この4020っていうのが、GMODの番号と思っていてください。この番号がわかれば、他のSteamゲームもインストールできるので、この手順は覚えておくといいです。

 

ちなみに、この「app_update」コマンドは、クライアントをアップデートするのにも使えますので、覚えておいてください。

 

CS:Sのインストール

サーバーにCounter Strike:Sourceをインストールします。ボクはCS:Sを購入してるので問題ないですが、持ってないひとは購入してからの方がいいと思われます。(権利上のいかなる問題が発生しても当方は一切責任を持ちませんのであしからず)

store.steampowered.com

 

GMOD同様、CS:Sを指定したディレクトリ(今回はcss_ds)インストールします。CS:Sの番号は232330です。

Steam> force_install_dir /home/Steam/css_ds/
Steam> app_update 232330 -validate

 

SteamCMDを終了します。

Steam> quit

 

補足:

なお、この作業でSteamディレクトリ内にgmod_dsやcss_dsができない場合(ボクはできなかった記憶があります)、事前にSteamディレクトリ内にあらかじめgmod_ds、css_dsを作っておくといいかもしれません。

# cd ~/Steam

# mkdir gmod_ds

# mkdir css_ds

 

CS:Sをマウントする

テキストエディタvim)を使って、GMODの設定ファイルを設定します。

$ vim ~/Steam/gmod_ds/garrysmod/cfg/mount.cfg

 

以下のようなテキストが開かれると思います。

//
// Use this file to mount additional paths to the filesystem
// DO NOT add a slash to the end of the filename
//

"mountcfg"
{
//"cstrike" "C:\mycssserver\cstrike"
//"tf" "C:\mytf2server\tf"
}


"cstrike"の前の//を削除(コメントアウトを解除)し、パスを指定します。

その結果、次のようになると思います。

//
// Use this file to mount additional paths to the filesystem
// DO NOT add a slash to the end of the filename
//

"mountcfg"
{
"cstrike" "~/Steam/css_ds/cstrike"
//"tf" "C:\mytf2server\tf"
}

 

設定を保存して終了します。

: wq

 

補足:vimの使い方

文字を変更するときは「I」キーを押して「INSERTモード」にします。

INSERTモード終了は「ESC」キー

保存/終了するときは、「:」キーを押して、以下のコマンドを打ちます。

: q(終了)#quit

: wq(保存して終了)#write and quit

 

サーバー設定ファイルの変更

vimでサーバー設定ファイルを変更します。

$ vim ~/Steam/gmod_ds/garrysmod/cfg/server.cfg

 

以下のようなテキストを貼り付け(または入力)します。

hostname "My Garrysmod Server"
sv_password ""
sv_allowdownload 0
sv_allowupload 0
sv_timeout 60

log on
sv_logbans 1
sv_logecho 0
sv_logfile 1
sv_log_onefile 0

sv_minrate 0
sv_maxrate 20000
sv_maxupdaterate 66
sv_minupdaterate 10

//execute ban files
exec banned_ip.cfg
exec banned_user.cfg

 

貼り付けたら変更すべきは、hostname(GMODのリストに表示されるサーバー名)とsv_password(サーバーにログインするためのパスワード)です。

 

変更が終わったら、保存/終了します。

: wq

 

サーバーの起動

以下のコマンドでサーバーを起動します。この時、各種設定をパラメータとして渡します。

$ ~/Steam/gmod_ds/srcds_run -game garrysmod +gamemode terrortown +maxplayers 16 +map gm_flatgrass -port 27015

 

+gamemodeはゲームモードを指定します。

terrortownは「TTT(TTT2)」を表します。

+maxplayersはサーバーの最大参加人数を指定します。

+mapは起動するマップを指定します。

gm_flatgrassはttt用のマップではないので、TTTでは遊べません。(武器がでないです)

-portは使用するポート番号を指定します。(前述のポート開放を見て下さい)

 

コレクションを指定する

使用するアドオンがある場合には、起動コマンドにコレクションをしてすると楽です。

$ ~/Steam/gmod_ds/srcds_run -game garrysmod +gamemode terrortown +maxplayers 16 +map ttt_lego -port 27015 +host_workshop_collection 2671741784

 

+host_workshop_collectionでコレクションをしてします。

※2671741784はボクらが公開しているTTT用のコレクションです。

Steam Workshop::【TTT2】ぎゃりーぱみゅぱみゅ公式レギュレーション

※ttt_legoはボクらがよく遊ぶマップです。

Steam Workshop::ttt_lego

 

スチームアカウントを指定する

これは必須どうかわかりませんが、Steamアカウントを紐づけることもできます。ボクは一応このステップをしましたが、省略してもいいかもです。

以下のサイトでゲームサーバーアカウントを作成します。

Steam Community :: Steam Game Server Account Management

 

起動コマンドに+sv_setsteamaccountで発行されたトークンを記載します。

$ ~/gmod_ds/srcds_run -game garrysmod +gamemode terrortown +maxplayers 16 +map ttt_lego -port 27015 +host_workshop_collection 2671741784 +sv_setsteamaccount 発行されたトーク

 

起動用のシェルスクリプトを自作する

起動コマンドをいちいち入力するのがめんどうなので、ボクはシェルスクリプトを自作しました。ただし、Linux初心者の作ですので、その点はあらかじめご了承ください。

 

まず、シェルスクリプトを作ります。

$ vim ./gmod.sh

以下のようなスクリプトを入力します。

#!/usr/bin/bash
echo "■□■□■□■□■□■□■□■□■□■□■□■□"
echo ""
echo "  ■■■  ■  ■■■ ■■■ ■ ■"
echo " ■    ■ ■ ■ ■ ■ ■ ■ ■"
echo " ■ ■■ ■ ■ ■■  ■■   ■"
echo " ■  ■ ■■■ ■ ■ ■ ■  ■"
echo "  ■■■ ■ ■ ■  ■ ■  ■  ■"
echo ""
echo " ■■■  ■  ■  ■ ■ ■ ■ ■2"
echo " ■ ■ ■ ■ ■■■■ ■ ■ ■ ■"
echo " ■■■ ■ ■ ■ ■ ■  ■  ■ ■"
echo " ■   ■■■ ■  ■  ■  ■ ■"
echo " ■   ■ ■ ■   ■  ■   ■ "
echo ""
echo "     GARRY PAMYU PAMYU SERVER "
echo "      SINCE 2022 FEBRUARY"
echo ""
echo "■□■□■□■□■□■□■□■□■□■□■□■□"
echo ""

#gamemode
#terrortown:TTT

gmd=terrortown

#maxplayers

mpl=30

#workshop

wsh=2671741784

#default map

dmp=ttt_lego


if [ $# -eq 0 ]; then
        sudo ~/Steam/gmod_ds/srcds_run -game garrysmod +gamemode $gmd -console -port 27015 +maxplayers $mpl +map $dmp +host_workshop_collection $wsh +sv_setsteamaccount スチームから発行されたトーク

else
        echo "map:$1"
        sudo ~/Steam/gmod_ds/srcds_run -game garrysmod +gamemode $gmd -console -port 27015 +maxplayers $mpl +map $1 +host_workshop_collection $wsh +sv_setsteamaccount  スチームから発行されたトーク

fi

 

※echo部分はフレーバーです。意味はまったくありません。

f:id:xxSUMIKOxx:20220306122654p:plain

こういうの好きなんですよ

※前半部分のデフォルト設定で細かな設定を入力します。

※./gmod.shでデフォルトの設定での起動。

※./gmod.shのあとにスペースとマップ名を指定すると、マップのみ変更して起動します。

シェルスクリプトは権限がないと動かないので以下のコマンドで権限を変更します。

$ chmod 755 gmod.sh

 

シェルスクリプトについては以下のサイトで勉強しました。

qiita.com

 

クライアントアップデート用のシェルスクリプト自作

同じく、クライアントを最新版にアップデートするやつです。

chmodも忘れずに。

!/usr/bin/bash
echo "gmod update..."
sudo ~/Steam/steamcmd.sh +login anonymous +force_install_dir ./gmod_ds +app_update 4020 validate +quit
echo "CS:S update..."
sudo ~/Steam/steamcmd.sh +login anonymous +force_install_dir ./css_ds +app_update 232330 validate +quit

 

サーバー設定を変更するシェルスクリプト

もはや怠惰の極み。パスを打つのもめんどくさい方向け。

#!/usr/bin/bash
vim ~/Steam/gmod_ds/garrysmod/cfg/server.cfg

 

GMODからマルチサーバーに入ってみる。

お気に入りに登録する

f:id:xxSUMIKOxx:20220306122005j:plain

マルチプレイヤーゲームを探す

f:id:xxSUMIKOxx:20220306122050j:plain

従来のブラウザ

f:id:xxSUMIKOxx:20220306122113j:plain

サーバーを追加

f:id:xxSUMIKOxx:20220306122128j:plain

IPアドレス:ポート番号

※「このアドレスをお気に入りに追加」を押します。

※ポート番号は27015の場合は省略してかまいません。

 

f:id:xxSUMIKOxx:20220306122307j:plain

以後、サーバーがお気に入りに表示されるようになります。

f:id:xxSUMIKOxx:20220306122519p:plain

パスワードを入力してから「サーバーに接続する」を押します。

f:id:xxSUMIKOxx:20220306123243j:plain

ようこそ、私たちのサーバーへ!

f:id:xxSUMIKOxx:20220306123331j:plain

ごゆっくり遊んでください!

 

細かな役職の設定をする

基本的にF1キーで出てくる設定画面で各種設定はできる。

f:id:xxSUMIKOxx:20220306123419j:plain

f:id:xxSUMIKOxx:20220306123426j:plain

F1→役職設定で比率などは設定可能

ただし、ULXコマンドを必要とする細かな設定(サイドキックディーグルの有無とか、ライカンスロープの能力とか)はサーバー側からコマンドを入力する必要があります。

 

通常のF10で出てくるコンソールからではなく、サーバーから手打ちしてやります。(ボクの場合だとTera-Termを使っているのでそっちから手打ちします。)

 

いかがだったでしょうか。

何分、Linux初心者かつ記憶を頼りに執筆してるので間違いあるかもしれません。

もしなにかありましたらコメントください。

なお、コメントは毎日チェックしてるわけではないので、お急ぎの方はTwitterからご連絡ください。

 

twitter.com

 

豆知識:Linuxのパスについてあれこれ

ほぼ自分のための備忘録ですが、Linux初心者の方のために。

個人的見解含むため、間違ってたらごめん。

./

カレントディレクトリ※内のファイルにアクセスするときのおまじない。

..

cd ..みたいにして使う。一つ上のディレクトリに行く。

~/

ホームディレクトリをあらわすおまじない。絶対パス大好きマンである筆者はよく使う。

 

※カレントディレクト

現在選択されているディレクトリ。相対パスで入力する場合には、このカレントディレクトリを起点に考える。cdコマンドで指定する。

 

豆知識:プロンプト

$とか#とかは、コンソール上のプロンプトを示しているので、入力する必要はないです。

$は一般ユーザー

#は管理者ユーザー

その他、SteamCMD使用時はSteam>って出る。

 

豆知識:ゲームモード名とマップ名

f:id:xxSUMIKOxx:20220325203510p:plain

通常起動して、コンソール(F10)から緑のブロックを探す

起動コマンドで使うゲームモード名とマップ名は、ワークショップで表示されている名前と若干違います。

 

調べるには、ゲームモードを選んで「新しいゲームを開始」から、調べたいマップを選んで、通常通りゲームを起動します。(シングルプレイヤーでもマルチプレイヤーでもなんでもいいです)

 

コンソール(F10)を開いて、緑色の文字列のブロックを探します。

Garry's Mod
asset://garrysmod/materials/vgui/ttt/loadingscreen/loading.vtf
terrortown       #ゲームモード名
ttt_waterworld     #マップ名
16           #最大プレイヤー数
76561198174104613   #SteamのID番号

 

この値を、起動コマンドにいれてやります。