試験公開鯖運用のためのメモ。試行錯誤中につき無保証。

環境

Ubuntu Linux server 12.04 or later

準備

依存ツール・ライブラリの導入

# apt-get install git build-essential flex bison libsdl-dev libsdl-image1.2-dev libncursesw5-dev

↓必須ではないが何度もビルドする際にビルドが速くなるらしい

# apt-get install ccache binutils-gold

pyenvでpython 2.7.6~をインストールした後、

% pip install tornado==3.2.2

を行う。 (※tornado 4.x系だとタイルが表示されない症状があったため3.x系最新を入れる)

現在anyenv + python 2.7.12で運用中。

GCCのバージョン

最新trunkではg++ 4.8以上を要求されるようです。g++ --version して4.6とかだったら以下のサイトを参考にインストール。(再ログイン必要かも)

add-apt-repositoryがない場合はpython-software-propertiesパッケージで導入。

GCC4.8系を追加で入れたのにビルドエラーが出る

以下のようにしてシンボリックリンクを4.8系に更新する。

% sudo su -
# cd /usr/bin
# ARCH=$(cc -dumpmachine)
# ln -fs gcc-4.8 $ARCH-gcc
# ln -fs g++-4.8 $ARCH-g++

ソースコードリポジトリを持ってくる

% git clone --recursive https://github.com/crawl/crawl.git

デフォルトではディレクトリ名がcrawlになるので変えたい場合は

% git clone --recursive https://github.com/crawl/crawl.git (目的のディレクトリ名)

gitoriousのリポジトリはもはや更新されていません。既存のリポジトリがある場合は移行しましょう。

(Git管理下のディレクトリに入ってから)
% git remote set-url origin https://github.com/crawl/crawl.git

Webtile版

編集

source/AppHdr.hのDGAMELAUNCH定義を有効化

   // #define DGAMELAUNCH
       ↓
   #define DGAMELAUNCH

同じくDGL_MACRO_ABSOLUTE_PATH定義をコメントアウト

   #define DGL_MACRO_ABSOLUTE_PATH
       ↓
   // #define DGL_MACRO_ABSOLUTE_PATH

webserver/config.pyを編集してプレイ状況表示用のファイルmilestonesのパスを変更

milestone_file = "./saves/milestones"

crawl-ref/source以下にrcsディレクトリを置く。別の場所からシンボリックリンクを張ってもよい。

mkdir /path/to/crawl/crawl-ref/source/rcs

コンパイル

% cd crawl-ref/source
% make WEBTILES=y SAVEDIR=saves

マルチコアなPCの場合-jオプションで並列コンパイルによる高速化を期待できる。
論理コア数は/proc/cpuinfo参照。大体コア数の2倍が目安らしい?*1

再ビルド時にはmake cleanしてからのビルドを推奨する。タイル周りの変更があった場合、タイルが化けるおそれがある。

本体を何かしらいじってデバッグする際には make debugが役立つ。→DCSS/デバッグガイド

ゲームサーバーの起動

% python webserver/server.py

各種独自設定

試験鯖独自拡張分のコードはgithubに公開してるので適宜見てください

手動dump出力の際にチャットに出るURLの設定

webserver/config.pyのmorgue_url設定を書き換える。

("dcss-web-trunk", dict(
    name = "DCSS trunk",
    (中略)
    morgue_url = "http://lazy-life.ddo.jp:8080/morgue/%n/",
    #デフォルトはNone(出力しない), %nにはプレイヤー名が挿入される

ログ出力

webserver/config.pyのlogging_config['filename']をコメント解除し、必要なら適宜ファイルパスを変更します。

logging_config = {
#    "filename": "webtiles.log",
    ↓
    "filename": "webtiles.log",

ログは自動的にログローテーションされ、デフォルトでは10メガバイト×5ファイルです。

ローテーションでの最大ファイル数は以下のように設定を追加することで変更できます。

logging_config = {
    "filename": "webtile.log",
    "level": logging.INFO,
    "backup_count": 100, # ←ここを追加
    "format": "%(asctime)s %(levelname)s: %(message)s"
}

scores/logfiles

過去のスコアはビルド時に指定されたセーブデータディレクトリにscores*2という名前で各種情報が保存され、ランキング表示等のタイミングで適宜参照されます。
scoresファイルの内容(抜粋)

v=0.15-a0:vlong=0.15-a0-1379-g772b624:lv=0.1:tiles=1:name=dplusplus:race=Demons
pawn:cls=Fire Elementalist:char=DsFE:xl=27:sk=Stealth:sklev=23:title=Impercepti
ble:place=D::$:br=D:lvl=0:absdepth=1:hp=203:mhp=203:mmhp=223:str=17:int=21:dex=
17:ac=41:ev=23:sh=9:god=Ashenzari:start=20140515150443S:dur=52909:turn=120614:a
ut=1170730:urune=4:nrune=4:kills=3750:fifteenskills=Fighting,Short Blades,Dodgi
ng,Stealth,Spellcasting,Fire Magic:status=deflect missiles:gold=1640:goldfound=
12050:goldspent=10410:sc=1848548:ktyp=winning:dam=-9999:sdam=0:tdam=0:piety=156
:end=20140520154553S:map=ncdulo_wetmaze:tmsg=escaped with the Orb:vmsg=escaped 
with the Orb and 4 runes!

scores*の方はランキング画面などを実装する際に有用ですが、最大SCORE_FILE_ENTRIES*3件までしか保存しないため注意です。
全スコアを参照したい場合はlogfileというファイルに上記と同じ形式で記載されています。ただし、こちらはスコア順に並べられてはいません。

また、endで指定してあるdump日付は月の項がなぜか1-12でなく0-11になっているのでそのままではdumpのファイル名に使用できません(dumpのファイル名の月部分は1-12)。注意すること。

ttyrecs

webserver/config.pyで指定したディレクトリにゲーム中のコマンド記録が保存されます。

games = OrderedDict([
    ("dcss-git", dict(
(中略)
        ttyrec_path = "./rcs/ttyrecs/%n",

生成される*.ttyrecファイルはけっこうなファイルサイズがあり、プレイ回数に応じてどんどん増えていくため、レンタルサーバなどディスク容量が潤沢でない環境だとなんらかの対策を打つ必要があります。

watch {
    /path/to/ttyrecs {
        recurse = true
        *.ttyrec {
            handler = tar jchf %d/%f.bz2 %d/%f && rm %d/%f
        }
    }
}

関連リンク


*1 最近のCPUではコア数と同じにした方がよいとの話も。とにかくコア数以下は非効率
*2 sprintのスコアはscores-sprint-****の形で別ファイル
*3 デフォルトで1000

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS