Source Dedicated Server (SRCDS)
Team Fortress 2 が play for free になったので、Ded鯖を立ててみることにしてみました。
昔 Quake 系はガンガン立てていたけれど、Source 系はさっぱりだし良い機会ということで。
Dedicated Server
ここでは主に PC ゲームの専用サーバ、俗にいうゲームサーバを指します。
主に家庭用ゲーム機ではプレイヤーの一人がホストとなってマルチゲームを行いますが、PCゲームの大半ではマルチプレイ専用のサーバを別途用意することが多いです。
環境
FreeBSD-7.1 (amd64)
SRCDS は FreeBSD 向けのバイナリはありませんが、Linux エミュレーションで FreeBSD でも動作します。
今回は OS 依存の部分はあまりないので、Linux でも同じ手法でできるはずです。
また、あんまりスペックは要求されないですが、回線は光必須と考えたほうが無難です。
上り回線が細い ADSL や安定しない CATV は諦めてください。
FreeBSD での Linux エミュレーション
方法は割愛。ports から fc10 を使っています。
カーネルモジュールを確認します。
azusa# kldstat | grep linux 7 1 0xffffffffb073f000 18a2c linux.ko
linprocfs を mount します。
azusa# cat /etc/fstab | grep linprocfs linprocfs /compat/linux/proc linprocfs rw 0 0
SRCDS
azusa# pwd /usr/ports/games/linux-steam azusa# make install clean (ライセンスの確認を行って問題なければ yes)
ただし、SRCDS は ports を使う恩恵があまりないので直接ダウンロードしてもいいかもしれません。
azusa# wget http://steampowered.com/download/hldsupdatetool.bin
SRCDS 実行ユーザの作成
これがポイント。実行ユーザのホームディレクトリに .steam ディレクトリが必要です。
そこそこ大きいファイルがダウンロードされるため、root ではなく専用のユーザを作成したほうが無難です。
(データファイルの保存場所が設定できないっぽい?)
ユーザを作成します。FreeBSD の場合。Linux は useradd コマンドを使ってください。
(pw に -m オプション付けずに面倒くさいことをやっているのはskel経由で生成されるファイルが邪魔だからだけです)
azusa# mkdir /home/steam azusa# pw useradd steam -d /home/steam azusa# chown steam:stream /home/steam
steam ユーザにスイッチして初期設定を行います。
steam 側のサーバの機嫌が悪い時には数回行う必要があります。
azusa# su - steam $ pwd /usr/home/steam $ mkdir .stream $ ./steam Checking bootstrapper version ... Getting version 44 of Steam HLDS Update Tool Downloading. . . . . . . . . . . .Steam Linux Client updated, please retry the command CAsyncIOManager: 0 threads terminating. 0 reads, 0 writes, 0 deferrals. CAsyncIOManager: 21 single object sleeps, 0 multi object sleeps CAsyncIOManager: 0 single object alertable sleeps, 0 multi object alertable sleeps
Team Fortress 2 サーバの構築
サーバに必要なファイルをダウンロードします。
CDNに乗っていないせいか結構時間がかかりますので、風呂にでも入って身を清めておきましょう。
オプション の -game で対象のゲームを指定します。今回は tf です。
$ ./steam -command update -game tf -dir . Checking bootstrapper version ... Updating Installation No installation record found at ./orangebox No installation record found at ./orangebox No installation record found at . No installation record found at . No installation record found at . No installation record found at ./orangebox Checking/Installing 'Team Fortress 2 Content' version 254 0.12% downloading ./orangebox/tf/bin/server.dll 0.29% downloading ./orangebox/tf/bin/server.dylib (このあと延々と)
サーバの cfg をいじります。
% cd orangebox/tf/cfg % vi server.cfg
Quake 系に近いので特に問題はないはずですが、マップを回すのは別ファイル (mapcycle.txt、maplist.txt)ぽい?
server cvar についてはググるとすぐ出てきます。
当たり前のことですが、テスト時には LAN モードにしてください。(sv_lan 1)
Team Fortress 2 サーバのテスト起動
コンソールから下記のコマンドで起動しみます。
azusa% orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort
他のマシンで Team Fortress2 を起動して開発者コンソールから
connect <サーバの IP アドレス>
と実行してサーバに接続できるかを確認してください。
Team Fortress 2 サーバの起動
毎回コマンド打つのも面倒なので、起動用スクリプトを用意します。
FreeBSD なら $LOCALBASE/etc/rc.d あたりに設置します。
(Linux でも動くように依存した処理はいれていません)
azusa# cat tf2server.sh #!/bin/sh BASEDIR=/home/steam USER=steam CONSOLE_LOG=$BASEDIR/console.log su "$USER" -c "exec $BASEDIR/orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort > $CONSOLE_LOG 2>&1" & exit
have fun :D