DCSS/インストールガイド

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

環境

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系最新を入れる)

現在pyenv + python 2.7.6で運用中。
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
  • port8080でサーバーが動く。変更したい場合はwebserver/config.pyを編集
    bind_port = 8080 #ここを書き換え
  • 設定ファイルはcrawl-ref/setting/init.txtからコピーされるのでデフォルト設定を変更したい場合はそれを編集
    • travel_delay等

各種独自設定

試験鯖独自拡張分のコードは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ファイルはけっこうなファイルサイズがあり、プレイ回数に応じてどんどん増えていくため、レンタルサーバなどディスク容量が潤沢でない環境だとなんらかの対策を打つ必要があります。

  • 保存しない
    • 保存する必要が無ければ問題は解決です。出力先に/dev/nullを指定すれば多分大丈夫。
  • 圧縮する(現運用はこちら)
    • 定期的にbzip2で圧縮すれば1/10程度になるのでディスク容量の節約になります。rcs/running/ 以下のttyrecファイルは現在進行中のプレイなので除外しつつ、定期的に自動圧縮するといいでしょう。
      • fsniperというツールがあり、設定ファイルで指定したディレクトリ以下にファイルが生成されたのを検知してスクリプトを走らせることができます。現在こちらで自動圧縮しています。
      • Ubuntuならaptからインストールできます。~/.config/fsniper/configに以下を記述してfsniper --daemonでデーモンとして動かします。
watch {
    /path/to/ttyrecs {
        recurse = true
        *.ttyrec {
            handler = tar jchf %d/%f.bz2 %d/%f && rm %d/%f
        }
    }
}
  • %%でフルパスが取れるとか書いてありますがスラッシュがなぜか余計に付いてたりするので%d(ディレクトリ名に置換), %f(ファイル名に置換)で代用しています。
  • 部分バックアップはしたいが大量の*.ttyrec.bz2はフルバックアップ時だけでいいという時のために、rcs/ttyrecsディレクトリは別のところに置いてシンボリックリンクを張るのがよさげ。

関連リンク


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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-04 (土) 21:21:40 (37d)