srcds SteamCMD その他

さくらVPS(Linux)でのTF2サーバー(srcds)の建て方

2016/07/13

sakuravps_srcds_logo

自宅サーバーだと機器メンテナンスとか電気代とか気になります。また、Windowsで建ててると専用ツールでも作らないとサーバーの自動更新ができなかったりと不便です。
SourceEngine系のゲームサーバーは要求スペックがそれほどでもないので、今では当たり前のようにVPSで建ててるところが多いです。
とりあえず初心者向けにVPSでTF2サーバーを建てて管理するところまで今更だけど書いてみます。
応用すればL4D2とかCS:GOとか、他ゲーのサーバーも建てれるようになるでしょう。

1.さくらVPSを契約する

どこのVPSも契約するにはクレジットカードさえ持ってればよい
VISAデビットカードなら学生でも持てるので、それを使おう。
デビットだとお試し期間でも契約時に口座から即引き落とされるので注意。

2.VPSサーバーを起動する

契約すると、ほどなくしてメールが届きます。内容は
・IPアドレス
・rootユーザ&パスワード
・VPSコントロールパネルへのURL&パスワード
とかこんな感じだと思います。

おそらくコントロールパネルからVPS起動するのは
これが最初で最後だと思います。

コントロールパネルにログインすれば起動ボタンが一目で分かるので
適当に起動したら、コンパネは閉じて下さい。

3.VPSサーバーにSSHでログインする

VPSサーバーが完全に起動するまで数分待ってから
ターミナルソフト(サーバ操作ソフト)を使って、サーバーにログインしましょう。
※作業用PCがWindowsなら、個人的には「Tera Term」を使うのがオススメです。
20140623-1

ホストにIPアドレスをいれて、ポートを22にし、SSHに設定したらOKを押す。
20140623-2

こんな画面がでるので、メールに書いてある
rootとパスワードを入力してOKを押す。

20140623-3

こんな感じでログインできたらOKです。

4.いろいろと初期設定する

4.1. rootのパスワード変更
パスワードが初期値だと色々アレなので

1
passwd

と打ち
新しいパスワードを入力 → Enter
もう一度新しいパスワードを入力 → Enter
パスワードを入力しても画面に何も反映されませんが、ちゃんと入力できてます。
これでパスワードは変更できました。

4.2. 表示文字を日本語化

1
vi /etc/sysconfig/i18n

1
2
3
LANG="C"
↓ このように修正
LANG="ja_JP.UTF-8"

上記のように修正し、保存して閉じる
※viコマンドの使い方は viエディタの使い方 を参照のこと

4.3. yum update する

1
yum update

このコマンドで色々サーバーを更新できる。
OK? [y/N] というのが聞かれたら、全部yでOK。

4.4. srcds1ユーザー作成
srcdsのサーバーを操作するユーザーを作成する

1
useradd srcds1

でsrcds1ユーザーを作成

1
passwd srcds1

でsrcds1ユーザーのパスワードを設定

1
usermod -G wheel srcds1

でsrcds1ユーザーにsudoの実行権限を与える
次に

1
visudo

でsudoコマンドの設定テキストをviエディタで開き

1
2
3
# %wheel ALL=(ALL) ALL
↓ こう修正する
%wheel ALL=(ALL) ALL

上記のように修正し、保存して閉じる
また

1
vi /etc/pam.d/su

1
2
3
#auth required pam_wheel.so use_uid
↓ このように修正する
auth required pam_wheel.so use_uid

も上記のように修正し、保存して閉じる

5.SSHとファイアーウォールの設定

(3)で接続する時にデフォルトのTCPポート22を使ってSSHで接続しましたが
セキュリティ的に微妙な感じなのでSSHのポートを変更します。

1
vi /etc/ssh/sshd_config

でSSHの設定を開き

1
2
3
#Port 22
↓ このように修正
Port 61203

と修正し保存して閉じる、別に61203でなくてもよい。

1
/etc/init.d/sshd restart

最後にsshを再起動して終わり

次にファイアーウォールを設定する

1
vi /etc/sysconfig/iptables

でファイアーウォールの設定ファイルを開き、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# sshで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 61203 -j ACCEPT
# srcdsで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27000:27100 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 27000:27100 -j ACCEPT
# ftpで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50000:50030 -j ACCEPT
# webminで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT
# httpで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
# mysqlで使うポート
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

よく分からなければ上記をコピペし、保存して閉じる

1
/etc/rc.d/init.d/iptables restart

最後にファイアーウォールを再起動して終わり

6.TF2サーバー(srcds)のインストール

(4)で作ったsrcds1ユーザーでログインし直してください。

TeraTermのSSHのポート指定が変わってることにも注意すること。(デフォなら61203)

まずサーバーに必要な環境を入手します

1
sudo yum install glibc.i686 libstdc++.i686

上記のパッケージインストールが終わったら

次にSteamCMDをダウンロードします。
SteamCMDとはsrcdsを取得するために必要なツールです。

1
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz -O ./steamcmd_linux.tar.gz

wgetコマンドでSteamCMDを入手してます。次に

1
tar xvfz ./steamcmd_linux.tar.gz

上記コマンドでSteamCMD圧縮ファイルを解凍

そして、SteamCMDを使ってtf2用のsrcdsを取得します

1
./steamcmd.sh +login anonymous +quit

と打ち、処理が終わるまで待って

1
./steamcmd.sh +login anonymous +force_install_dir ./server +app_update 232250 validate +quit

と打ち、TF2サーバーのファイルを取得します。
※+app_update 232250の数値を変えると、別ゲーのサーバーが取得されます。

サーバーファイル取得は結構時間がかかります。
早くて10分、遅くて30分~数時間程度になるので気長に待ちましょう。
途中でファイルの取得が失敗した場合は

1
./steamcmd.sh +login anonymous +force_install_dir ./server +app_update 232250 validate +quit

を100%になるまで繰り返しやってください。

・・・サーバーファイルの取得が終わったら、
現時点でTF2サーバーを建てれる環境は整いました。

7.サーバーを管理しやすくする

7.1. FTPサーバーを建てる
サーバーのファイルを管理しやすくするためFTPサーバーを建てます。
・参考サイト様
さくらのVPSを使ってみる【9】-vsftpdをインストールしてみる | 初心者プログラマー奮闘記

1
sudo yum -y install vsftpd

上記でvsftpsをインストールできる。

1
sudo vi /etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#匿名アクセス禁止
anonymous_enable=YES
  ↓
anonymous_enable=NO
#ファイルのパーミッションが644になってしまうので、グループ書き込み可の664にします
local_umask=022
  ↓
local_umask=002
#アスキーモード有効
#ascii_upload_enable=YES
#ascii_download_enable=YES
  ↓
ascii_upload_enable=YES
ascii_download_enable=YES
#シグニチャ隠蔽
#ftpd_banner=Welcome to blah FTP service.
  ↓
ftpd_banner=Welcome to blah FTP service.
#ホームディレクトリのみ参照するユーザー設定
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
  ↓
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#サブフォルダを含む一括アップロード・ダウンロードを許可
#ls_recurse_enable=YES
  ↓
ls_recurse_enable=YES
# 以下を末尾に追加
userlist_deny=NO
use_localtime=YES
pasv_min_port=50000
pasv_max_port=50030
chroot_local_user=YES

こんな感じにしてもらえればいいかと。
んでFTPの接続ユーザーにsrcds1を追加します。

1
sudo vi /etc/vsftpd/user_list

で開いたユーザーリストの末尾にsrcds1を追加しといてください。

1
sudo /etc/rc.d/init.d/vsftpd restart

最後にvsftpdを再起動して終わり、
FTP接続ソフト「FFFTP」とか使って、srcds1で接続してみましょう。

20140623-4

こんな感じで接続して、(6)で取得したサーバーファイルが見れればOK。
FFFTPからならファイルの削除や移動も楽チンですよ。

7.2. webminを入れる
webminは分かりやすいweb画面でサーバーを管理できるツールです。
別にいれなくてもいいので、下みながらやるとよいです。
さくらのVPS -webminのインストールと初期設定- | 時にはWEBの話っ!

いれるとメモリの使用量とか一目でわかるのでオススメ。
20140623-5

8.TF2サーバー(srcds)のdemon化と自動update

demon化しとけば、毎朝6時に再起動とか時間指定で色々できるようになる。
あとsrcdsのlinux版はwindows版と違って再起動すると自動でupdateしてくれたりする。
これがwindows版との決定的な差で、これだけでもlinuxに移る価値はあると思う。

まずはdemon化について
・参考サイト様
サーバーの建て方 – Counter-Strike: Global Offensive Wiki*

1
sudo yum install -y screen

screenのインストール。どういうもんかは↓を見ること
screenを初めて使うためのチュートリアル – UNIX的なアレ

srcds1のdemonを作成

1
sudo vi /etc/rc.d/init.d/srcds1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#! /bin/bash
#
# Start the Counter-Strike: Source dedicated server.
#
# AUTHORS :
#
# Julien Escario ( pandemik@azilog.net )
# &
# Cedric Rochat ( crochat@younics.org )
# &
# Cmdr._Firewalker ( cmdr._firewalker@web.de )
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# chkconfig: 2345 44 56
# Description: srcds
#
# ===========================================
#
# What you need:
#
# Linux 🙂
# awk
# screen
# the srcds_l & cstrike files (obtainable via steam)
#
# How to use:
#
# Edit the CS_USER-Var to the user running your cs-servers
# Edit the DIR-Var to fit your system (just contains the path to the dir that contains srcds_run)
# Edit the PARAMS-Var to fit your needs
# - standard is startup as internet server
# if you use multiple scripts on one system you should change the NAME-var (otherwise
#   all will be stopped if you run the script with "stop", and status will be useless)
#
# When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the
# scripts for starting the services) and set the execute permission.
# Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/S90srcds
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/K50srcds
# or use update-rc.d if you got a system using that tool (like Debian, see manpage)
#
# Or use it manually like:
# ./srcds start
# ./srcds stop
#
# To see the server-console start the script with the parameter "watch".
#
# DOC by jwm (jwm@counter-strike.de)
#
# 12/08/25
# chkconfig 対応 & 日本語訳
# by niu
# !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!!
# 実行するユーザー名8
CS_USER=srcds1
PATH=/bin:/usr/bin:/sbin:/usr/sbin
# DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/home/srcds1/server/
DAEMON=srcds_run
# LAN server:
# PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet server:
PARAMS="-game tf -secure -autoupdate -steam_dir /home/srcds1/ -steamcmd_script /home/srcds1/server/update.txt -port 27015 +sv_lan 0 +maxplayers 24 +randommap $CS_USER"
NAME=srcds1
DESC="srcds1"
# No edits (should be) necessary beyond this line
if [ ! -x `which awk` ]; then echo "このスクリプトにはawkが必要です"; exit 1; fi
if [ ! -x `which screen` ]; then echo "このスクリプトにはscreenが必要です"; exit 1; fi
if [ `whoami` = root ]
then
usagetype=root
else
usagetype=nonroot
fi
start() {
   if [ ! -d $DIR ]; then echo "ディレクトリが見つかりません: $DIR!";  exit 1; fi
   if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON が見つからないか実行出来ません。"; exit 1; fi
   if status; then echo " ... $DESC: $NAME は既に実行されています。"; exit 1; fi
   case "$usagetype" in
   root)
    su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS"
   ;;
   nonroot)
    cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS
   ;;
   esac
}
stop () {
   if ! status; then echo " ... $DESC $NAME が見つからないか、恐らく起動していません。"; exit 1; fi
   case "$usagetype" in
   root)
     su - $CS_USER -c "screen -S $NAME -X quit"
#    mp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
#    su - $CS_USER -c "screen -r $tmp -X quit"
   ;;
   nonroot)
#    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit
   ;;
   esac
}
status () {
   case "$usagetype" in
   root)
    su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   nonroot)
    screen -ls | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   esac
}
watch () {
   if ! status; then echo "$DESC $NAME が見つからないか、恐らく動作していません"; exit 1; fi
   case "$usagetype" in
   root)
    tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
    su - $CS_USER -c "screen -r $tmp"
   ;;
   nonroot)
    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
   ;;
   esac
}
case "$1" in
start)
  echo "起動中 $DESC: $NAME"
  start
  echo " ... 完了!"
;;
stop)
  echo "停止中 $DESC: $NAME"
  stop
  echo " ... 完了!"
;;
restart)
  echo "再起動中 $DESC: $NAME"
  status && stop
  start
  echo " ... 完了!"
;;
status)
  if status
  then echo "$DESC: $NAME は起動しています"
  else echo "$DESC: $NAME は停止しています"
  fi
;;
watch)
  watch
;;
*)
   echo "使い方: $0 {start|stop|status|restart|watch}\nwatch から戻る際は ctrl-a,d と入力して下さい"
   exit 1
   ;;
esac
exit 0

上記の内容でsrcds1のdemonを作成する。
重要なところは55、60、67、69~70行目の設定項目だけです。
特に67行目のサーバーの起動設定はちゃんと勉強しておくこと。
https://developer.valvesoftware.com/wiki/Command_Line_Options
↑とかに起動オプションがたくさん乗ってる。
ちなみに「-steamcmd_script /home/srcds1/server/update.txt」って部分は
サーバー再起動時の自動アップデートの設定ファイルの場所を記述してる。

んで、次に自動update用のupdate.txtを作成する
基本的にsrcds_runがあるディレクトリに作っとけばOK。

1
vi /home/srcds1/server/update.txt

update.txtの中身は

1
2
3
4
login anonymous
force_install_dir /home/srcds1/server/
app_update 232250
quit

これをコピペして、保存して閉じる。
これでサーバーを再起動するごとにTF2サーバーのアップデートをしてくれる。
別ゲーのサーバーならapp_update 232250の数値を変更すればOK。

最後にsrcds1のdemonに実行権限をつける

1
sudo chmod +x /etc/rc.d/init.d/srcds1

これでdemon化と自動updateの設定はおわり。

上記の設定により
TF2サーバー(srcds)の起動・停止・再起動は以下それぞれのコマンドを打つだけで可能になる

1
2
3
/etc/rc.d/init.d/srcds1 start
/etc/rc.d/init.d/srcds1 stop
/etc/rc.d/init.d/srcds1 restart

サーバーのコンソール画面をみたいなら

1
/etc/rc.d/init.d/srcds1 watch

で見れる。
http://wiki.teamfortress.com/wiki/List_of_useful_console_commands
このwatchの画面なら上記のTF2サーバーのコンソールコマンドを使える。勉強しとこう。

このwatchの画面から抜け出したい時は
「CTRL + A + D」を同時押しすればOKだ。

VPSサーバー自体を再起動したときに
自動でsrcds1のTF2サーバーを立ち上がるようにするには

1
chkconfig srcds1 on

と打つだけでOK。

毎朝6時にsrcds1のTF2サーバーを再起動をしたい場合は

1
sudo crontab -e
1
00 6 * * * /etc/rc.d/init.d/srcds1 restart

とすればよい。
crontabの書き方 — server-memo.net
詳しいcrontabの記述方法は↑のサイトを参照のこと。

ここまでで、ざっくりとだがサーバーファイル取得→サーバー起動まで全て解説できたと思います。
server.cfgとかプラグインとかはFTP使って後からアップロードすればいいだけです。

SourceModの導入は以下ページを参照のこと
(Windowsサーバーで解説してるけどLinux版を入れれば問題ない)
SourceMod – プラグイン作成方法

9.補足

一つのVPSサーバーに複数個TF2サーバー(srcds)を建てること前提に書いてみました。
サーバーを追加する場合は、srcds1、srcds2、srcds3と番号を増やして
上記で解説したのと同じことを繰り返しやるだけでいいと思います。

Linux自体も初心者という人も分かるように書いてみたつもりだけど。
これじゃ全然分からないだろう・・・orz
どの辺りから解説すればよいか混乱したため、中途半端なことになってますが気にしない。
興味がある人はなんとか頑張って建ててみてください・・・

webサーバーの建て方とか検索すれば腐るほど出てくるので割愛。
Apacheより、今流行りのNginxのほうがオススメ。

以上こんな感じ~

スポンサーリンク

-srcds, SteamCMD, その他
-, , , , , , ,