LinuxでCS1.6鯖

(2012/05/27:追記) AMXX導入手順を別リンクに。


定期的にこんな記事を書いてごめんなさい!


EeePCを買ったはいいが、全く外に出ないので持ち運ばないことに気づく。
それに最近CS1.6の野鯖が少ないお・・・だったらEeePCをCSの鯖にしちゃうお!!


・・・というわけで作成したメモ書き。
CSスレに試験運用のために宣伝する書き込みもしましたが、
すぐJBSの代替鯖が出てきて、特に利用者も居なかったので、そのうち消えるでしょう。




Linuxでも安価に簡単にCS1.6鯖を立てられるので、どんどん鯖を立ててCSを遊んでほしいな、と思います。
今後、野鯖や試合用やネタでもCS鯖に関心を持ってくれれば、
ここを見て立ててくれる人がいるかもしれないので、残しておきます

ハードウェアの調達

多人数による負荷実験をしていませんが、CS1.6のサーバを立てるだけであればEeePCでもいけます。
使ったEeePCのスペックは、EeePC901X+メモリ2GB。
なので、市販の2万前後の安価な鯖でもメモリを1GB以上にすれば十分に動かせるでしょう。

OSのインストール

今回使うOSはLinux系のOSのubuntu server 9.10 32bit
http://www.ubuntu.com/getubuntu/download-server
9.10は不安定らしい・・・なんてこった。
Windowsはライセンス料の問題があるのでパス。


言語は日本語で必要最小限のものを入れておく。
LAMPなども追加できるが、WEB鯖は特に考えて無い。
もし、プレイデータを記録する場合は、LAMPを入れておくと少し楽かもしれないが、
ubuntuはそういうめんどくさい事を極力減らすために、
パッケージ導入と同時にファイアウォールのポート開放をやってくれる場合も多いので、
入れたけどしばらくの間使わない場合は、しっかりポートを閉じているか確認をしましょう。


今回は遠隔操作用にOpenSSHだけを入れておいた。

設定

大体はインストールの流れで設定できる。
ネットワークの設定での、プライベートIPはDHCPから取得せずに、ちゃんとプライベートIPを割り当てる。
DHCPから取得すると、起動のたびに違うプライベートIPが割り当てられる可能性があるので、
ポート開放の手間も増えるので、非常に効率が悪い。

操作

root権限が必要な場合はコマンドの前に "sudo 〜"とする。
後はlinux感覚で使える。

文字化け

apt-getとかしたときにコンソールにひし形の文字が出る場合は文字化けしている。
.bashrcのそれっぽいところに、条件をいくつか追加。

case "$TERM" in
	linux)
		LANG=C
		;;
	*)
		LANG=ja_JP.UTF-8
		;;
esac 

その後、

source ~/.bashrc

とすると、文字コードが切り替わって文字化けが直る。

不要なサービスを切る

パッケージにsysv-rc-confとchkconfigがあるのでお好みでどちらかを。
Bluetoothの機能を切る、といった使い方をする。
でも常駐しているサービスの中で何が不要なサービスかわからなかったので、特にいじらなかった。

ubuntuでのポート開放

ufwコマンドで開け閉めする。
簡単に使うコマンドだけ。

sudo ufw enable

ufwを有効(ファイアウォールを起動する。)

sudo ufw disable

ufwを無効(ファイアウォールを切る。)


簡単な文法だけ紹介。
allow/deny: 許可/拒否
tcp/udp: TCP/UDP

sudo ufw allow 80/tcp

あらゆるアクセスからTCP80番を開放。(WEB鯖が利用するデフォルトなポート)

sudo ufw allow 27015/udp

あらゆるアクセスからUDP27015番を開放。(CS1.6の鯖が利用するデフォルトなポート)


ufwコマンドには色んな文法があります。詳しくは調べてください。

セキュリティの意識

ここの項目は、十分意識しているから問題ない、とか、セキュリティなんか知るか、という人は特に気にしなくていいでしょう。


ファイアウォールはコンピュータ用語で防火壁を意味し、火が広がるのを防ぐ目的があります。
ここでの火というのは、不正アクセスなどを目的としているこちらが意図していないパケットを指します。
ファイアウォールを切るというのは、これを常に受け入れる状態になるわけで、非常に危険です。
ルータの機能でポートマッピング(≒ポート開放)をしている場合、
鯖に届くのはそのポートからのアクセスだけなので、外からの火に対しては少し安心できます。
しかし鯖の内部から火が起きることもあり、同じプライベートな領域にある他の鯖やクライアントに飛び火する事もあります。
それを防げるのはその鯖のファイアウォールだけです。


今回はCSの鯖だけを立てるので危険性は低いと見て、ファイアウォールを切りました。

CS1.6の鯖を立てる。

ここからがメイン。
大体コピペしていればほとんど進むようにできている予感・・・


HLDSの導入

cd ~
mkdir hlds
cd hlds
wget http://storefront.steampowered.com/download/hldsupdatetool.bin
chmod +x hldsupdatetool.bin
./hldsupdatetool.bin
./steam
./steam -command update -game cstrike -dir .

最初の./steamはsteamのアップデート確認。次の./steamコマンドでCSの鯖をインストールする。


HLDS動作確認。

./hlds_run -game cstrike +map de_dust2

コンソールに流れる文章は英語なので、エラー内容などは気合で読む。
一部のファイルが不足している、と言われる場合もあるが、問題ない部分もあるので、詳しい人に相談する。


正常に起動したら、クライアント側でCSを起動し、
connect 192.168.xxx.xxx
としてconnectできるか確認。


connectできたらお気に入りのserver.cfgに書き換えるなりする。
参考程度に、僕の鯖で使っていたserver.cfgを公開。
http://hlds.rying.net/arc/server.cfg

MetaMODとAMXXの導入

cstrikeのモジュールを含めていなかったのと、後日書き直したため、そちらを参照してください
Linux版HLDSのAMXXの導入を自力でやりたい人向け - 日々量産


AMXXのプラグインの設定。
大体の設定ファイル以下の場所にある。

cd ~/hlds/cstrike/addons/amxmodx/configs

各ファイルの詳しい説明は、以下に解説されている。(AMX向けなので一部ファイル名が異なる)
http://halflife.luina.net/com_amx_configuration.html


野鯖にしたい場合は、amx_votekick, amx_votebanをできるようにしておきたい。
amxx.cfgの以下を変更すると、voteコマンドを一般ユーザにも使えるようになる。

//amx_default_access "z"
amx_default_access "j"

abcdefghijklmnopqrstuまでのアクセスレベルがあり、それぞれで許容されるコマンドが異なる。
その中のjはamxx_adminvoteで使われるアクセスレベルでもあり、上の設定ではjを初期アクセスレベルとする。
複数指定できるが、よく理解してから指定すること。


また、amx_vote〜系のコマンドでkickされないことがある。
それは、誰かがamx_votecancelというコマンドを打っている為で、
現在vote中の内容をキャンセルするというコマンドである。
これはvoteの対象でも使えるため、このコマンドを知っている場合、投票数が達していてもkickやbanがされない事態が起きる。
また、このコマンドのアクセスレベルも"j"なので、アクセスレベルの書き換えで使えなくすることはできない。
これだけ使えなくする手っ取り早い方法に、adminvote.smaのソースコードを書き換える方法がある。
デフォルトプラグインソースコードは以下の場所にある。

cd ~/hlds/cstrike/addons/amxmodx/scripting

adminvote.smaの

register_concmd("amx_cancelvote", "cmdCancelVote", ADMIN_VOTE, "- cancels last vote")

この箇所をコメントアウト

// register_concmd("amx_cancelvote", "cmdCancelVote", ADMIN_VOTE, "- cancels last vote")

ソースコードコンパイルと、プラグインファイルの移動(上書き)

./amxxpc adminvote.sma
mv adminvote.amxx ../plugins/

人が居ない時の鯖の負荷が気になる

以前sys_ticrateが高くなるとCPU負荷が増大するのが気になって、
人が居ないときぐらいはCPU負荷を軽減するのを目的にしたオートローダーなプラグインを作ったんだけども、
それをを参考にしてくれたJBS-5管理人のmetaさんが改善版を作ってくれたので流用。感謝。
http://metasta.blog88.fc2.com/blog-entry-4.html
ファイルが異なる事以外はやることは上と同じ。
もちろんconfigs/plugins.iniに使用するプラグインを追加することを忘れずに。

投げ物無限プラグイン

練習用に投げ物を投げまくりたい。そんなプラグイン
ダメージを与えたときにその情報が出るオマケ付き。


AMXの時に使っていたプラグインをAMXX向けに少しいじってコンパイルしてそのまま使ったら、
不具合が出たので、自分の環境で不具合が出ないように手直ししたものを乗せておきます。
http://hlds.rying.net/arc/amx_resource.sma
コンパイル手順は上と同じ。
使い方はコンソールで
amx_resource
amx_unresource
とすると、プラグインのon/offができます。


AMXで良く使われているamx_resourceプラグインとの相違点としては、
投げ物は最初に買わないといけないのと、体力が10000でなく1000になっているのと、お金は有限という点です。
また、投げたときに1個づつ補給されるのではなく、装備したときに毎回投げ物が1000個になるようにリセットされます。
カチャカチャと拾った音がしなくなるので少しいいと思います。
もしこれに不満があれば、他のを探してください。

BOT関連は未実装

PODBOTも設定以外はAMXXとほとんど同じ手順で導入できる。
addonsに入れて、metamodに読み込むプラグインとしてPDBOTプラグインを定義する。
今回はやっていないので、書かないけど。

起動コマンド

色々あるけどよくわからぬ。要検証。


FPS値だけをたたき出したいのであれば、以下の方法で900〜1000あたりは出るはず。
server.cfgのsys_ticrateを1100以上にして、
起動コマンドに -sys_ticrate 1000 -pingboost 3 を追加


お友達と2人でしか検証してないけども、
上の設定と-pingboost 2のみでは、体感的な違和感を感じるのは間違いない。
上の設定のほうがいい感じだったので、上の設定を使ってます。


起動コマンドを何もつけないとサーバのFPS値は低いのでちょっと不安定ですが、負荷は一番低い。
-pingboostの値と、sys_ticrateの値が大きくなるほど、安定感が増して、CPU負荷が一番大きくなる。
また、-pingboost 3の時に、-sys_ticrate 1000 をつけないと、おかしくなった。
練習目的であれば起動コマンドにこだわらなくてもいいかも。