DCSS/インストールガイド のバックアップ(No.6) |
|
試験公開鯖運用のためのメモ。試行錯誤中につき無保証。
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系最新を入れる)
最近はビルドの際にpyyamlが必要なのでこちらもインストールしておく。
% pip install pyyaml
現在anyenv + python 2.7.12で運用中。
最新trunkではg++ 4.8以上を要求されるようです。g++ --version して4.6とかだったら以下のサイトを参考にインストール。(再ログイン必要かも)
add-apt-repositoryがない場合はpython-software-propertiesパッケージで導入。
以下のようにしてシンボリックリンクを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
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
bind_port = 8080 #ここを書き換え
古いバージョンではサブモジュールのURL指定がgitoriousのままになっています。
.gitmodulesを編集してgitorious.org→github.comに全置換した後で、
% git submodule update --init
でサブモジュールを取得しましょう。
Perl 5.26に上がっている影響でcrawl-ref/source/util/gen-mi-enumの実行の際にエラーが出ます。
{の直前に\を入れてエスケープしましょう。
- s/^enum monster_info_flags\n{\n//m && s/^\s*NUM_MB_FLAGS.*//ms + s/^enum monster_info_flags\n\{\n//m && s/^\s*NUM_MB_FLAGS.*//ms
試験鯖独自拡張分のコードはgithubに公開してるので適宜見てください
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*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)。注意すること。
webserver/config.pyで指定したディレクトリにゲーム中のコマンド記録が保存されます。
games = OrderedDict([ ("dcss-git", dict( (中略) ttyrec_path = "./rcs/ttyrecs/%n",
生成される*.ttyrecファイルはけっこうなファイルサイズがあり、プレイ回数に応じてどんどん増えていくため、レンタルサーバなどディスク容量が潤沢でない環境だとなんらかの対策を打つ必要があります。
diff --git a/crawl-ref/source/webserver/process_handler.py b/crawl-ref/source/webserver/process_handler.py index 739d64a007..8b20d67d3a 100644 --- a/crawl-ref/source/webserver/process_handler.py +++ b/crawl-ref/source/webserver/process_handler.py @@ -795,6 +795,13 @@ class CrawlProcessHandler(CrawlProcessHandlerBase): self.handle_process_end() + if os.path.exists(self.ttyrec_filename): + try: + subprocess.Popen(["bzip2", self.ttyrec_filename]) + self.logger.info("Compressed %s", self.ttyrec_filename) + except OSError as e: + self.logger.exception(e) + def _on_socket_close(self): self.conn = None self.stop()