ejo090の日記

みなさんの数分を無駄にするように毎日がんばります。コメントあると中の人めっちゃ喜びます。

Twitterをやめたことについての記事はここです。よしなに。

Simutransを自鯖で構築してみる

こんばんは。

お久しぶりです。全く脈絡がないですがとりあえず更新です。



今日はSimutrans鯖を自分の鯖で構築してみます。


まずSimutransってなに

Simutrans(シムトランス)はフリーでオープンソースシミュレーションゲーム。Windows、BeOSLinux用に開発されている、各種交通機関を運営し安定した経営を目指すことを目標とする経営シミュレーションゲームである。

Simutrans - Wikipedia

というわけで、よくあるシムシティの交通寄りみたいな感じのゲームです。

公式サイトはこちら



まず

とりあえず鯖の現状は、HP ProLiant ML110 G7を買った時のまま使っている感じ。
Simutransの要求スペックよくわからんけどとりあえずメモリ2GBあるし大丈夫だろ()と安易に考えてたりするが大丈夫なのだろうか…。
OSは Debian GNU/Linux 6.0(squeeze) です。おいそこwheezyじゃないとかいうな。い、いつか移行するんだからっ

とりあえずこの方を参考にしながらやっていきます。

コードの用意
まず適当にユーザを作ってディレクトリを作っておく。

# adduser simutrans
# su sumutrans
$ mkdir NetSimutrans
$ cd NetSimutrans

手順としてはソースコード引っ張ってきてビルドすればいい、との話だったのでとりあえず引っ張ってきましょう。
svnで、との話でsvnだけかと思ったらgitにもミラーがあったのでgitから。(慣れてるので

Simutrans, gitのミラーはこちらです。

$ git clone https://github.com/aburch/simutrans
Cloning into simutrans...
remote: Counting objects: 53764, done.
remote: Compressing objects: 100% (13093/13093), done.
remote: Total 53764 (delta 44494), reused 49546 (delta 40549)
Receiving objects: 100% (53764/53764), 15.80 MiB | 1.39 MiB/s, done.
Resolving deltas: 100% (44494/44494), done.

とりあえずcloneしちゃってますが開発するわけじゃないし別にいいよね…。

これでコードの準備はできました(なにもしてない)。


みんなだいすきビルド

開発/ビルド方法 - Simutrans日本語化・解説
Simutrans wikiのほうにやりかたがまとめられているのでこれを読んでやっていきましょう。

config.defaultを適当なテキストエディタで開く(改行がLFなのでメモ帳は不可)。

との事なので作成していきましょう。
することというと

BACKEND = posix
COLOUR_DEPTH = 0
OSTYPE = linux
DEBUG = 1
OPTIMISE = 1

の各項のコメントアウトを外すことでしょうか。

$ cp config.template config.default
$ vim config.default

というわけで適当にテキストエディタで編集し、保存。


土下座しながらmake…したらg++がねぇよ!的なことを言われたので

$ aptitude install g++

してg++を入れていざmake…と思ったら今度は

besch/reader/image_reader.cc:14:18: warning: zlib.h: そのようなファイルやディレクトリはありません

だそうです。
これに関しては先ほどのgitのreadme.txtをみると

To compile you will need the following libraries:
libz (http://www.zlib.net/)
libpng (http://www.libpng.org/pub/png/) for makeobj
libbz2.lib (compile from source from http://www.bzip.org/downloads.html)

とのことなのでまずzlib.hとやらをなんとかしましょう。
くっついてるURLに飛んで、適当にtar.gzをwgetして、解凍。
解凍したフォルダで

# ./configure
~何らかの処理~
# make
~何らかの処理~
# make install
~何らかの処理~

してあげるとzlib.hがinclude出来るようになってる…はず…。

というわけでもう一度simutransフォルダにもどり、make…がまたエラー。

dataobj/loadsave.cc:19:19: warning: bzlib.h: そのようなファイルやディレクトリはありません

ん…?さっきzlib.h入れなかったか…?と思いよく見直すとbzlib.hですねこれ…。
紛らわしい…。
めんどくさいのでさっきのlibpngっていうのとlibbz2.libってのを両方ぶちこんでおきましょう。
これも同じく適当にwgetして解凍して./configureしてmakeしてmake installして…と。
終わらせまして3度目の正直というわけでmake…と、とおりました…!!!!
warningとかちらほらみえたけどなかったことにして先に進みましょう(((


起動

とりあえずpakをインストールしましょう。pak128で。
get_pak.shとかいうスプリクトが置いてあるのでそいつでpakをダウンロードしておきます。普通のpak128は6なので6と入力します。
そしてiを入力し、最後にインストールするかどうかのyを入力しておわり。

$ ./get_pak.sh
-- Choose at least one of these paks --
1) pak64-112-3
2) pak-german64-110-0c
3) pak64.japan-112-0
4) pakHAJO_0-102-2-2
5) pak96.comic-0.4.10-plus
6) pak128-2.3.0--112.2
7) PAK128.german_0.6_112.x
8) pak192comic-0.3-112-3up
9) pak32.comic_102-0
10) pak64.Contrast_910
11) PakHD_v04B_100-0
12) pak128.Britain.1.14-112-0
13) pak128.japan-110.0.1-version16-08-2011
14) pak64.scifi_112.x_v0.2
15) pak48-excentrique_v018
Which paks to install? (enter number or (i) to install or (x) to exit)6
adding pak128-2.3.0--112.2
Which paks to install? (enter number or (i) to install or (x) to exit)i
You will install now
6) pak128-2.3.0--112.2
Is this correct? (y/n)y

ダウンロードが始まり、あとはまつだけ。

さて、これでpakがダウンロードできまして、実行ファイルらへんに移しておきましょう。

$ mkdir build/default/pak
$ cp -r pak128 build/default/pak/

ようやく起動できます。
先ほどビルドしたものは ./build/default に入ってます。
起動のオプションってどうすれバインダー…ということで
./sim -helpして確認。

---------------------------------------
  Simutrans 112.4 Nightly
  released Oct 30 2013
  developed
  by the Simutrans team.

  Send feedback and questions to:
  <markus@pristovsek.de>

  Based on Simutrans 0.84.21.2
  by Hansj・g Malthaner et. al.
---------------------------------------
command line parameters available:
 -addons             loads also addons (with -objects)
 -async              asynchronous images, only for SDL
 -use_hw             hardware double buffering, only for SDL
 -debug NUM          enables debugging (1..5)
 -freeplay           play with endless money
 -fullscreen         starts simutrans in fullscreen mode
 -fps COUNT          framerate (from 5 to 100)
 -h | -help | --help displays this help
 -lang CODE          starts with specified language
 -load FILE[.sve]    loads game in file 'save/FILE.sve'
 -log                enables logging to file 'simu.log'
 -noaddons           does not load any addon (default)
 -nomidi             turns off background music
 -nosound            turns off ambient sounds
 -objects DIR_NAME/  load the pakset in specified directory
 -pause              starts game with paused after loading
 -res N              starts in specified resolution:
                      1=640x480, 2=800x600, 3=1024x768, 4=1280x1024
 -screensize WxH     set screensize to width W and height H
 -server [PORT]      starts program as server (for network game)
                     without port specified uses 13353
 -announce           Enable server announcements
 -server_dns FQDN/IP FQDN or IP address of server for announcements
 -server_name NAME   Name of server for announcements
 -server_admin_pw PW password for server administration
 -singleuser         Save everything in program directory (portable version)
 -sizes              Show current size of some structures
 -startyear N        start in year N
 -theme N            user directory containing theme files
 -timeline           enables timeline
 -times              does some simple profiling
 -until MONTH        quits when MONTH = (month*12+year-1) starts
 -use_workdir        use current dir as basedir

とりあえず、サーバで起動してみましょう。

$ ./sim -server 13353 -server_name ejoSvr -lang ja -log -debug 3 -nomidi -nosound -objects pak/pak128/

…と実行したら言語ファイルがねぇぞ!ってことで怒られました。
そういえばさっきmakeしたsimutransフォルダに get_lang_files.sh とかあったな…って思って実行して。
それでまた上のように起動しようとしたらまただめ…
んでよく見るとmakeしたsimutransフォルダ内にまたsimutransフォルダができている。そこの中身を確認すると、言語ファイルの入ってるtextフォルダが。
とりあえずめんどくさいのでcp -r * ../build/default/ とかしてそのフォルダの中身を全部移しました(いけないことかなω・

というわけでもういちど…おおおっきどうしt……ってエラー……

ERROR: modal_dialogue():        called without a display driver => nothing will be shown!
For help with this error or to file a bug report please see the Simutrans forum:
http://forum.simutrans.com
Message: karte_t::destroy():    destroying world
Message: karte_t::destroy():    label clear
Message: karte_t::destroy():    convois destroyed
Message: karte_t::destroy():    stops destroyed
Message: karte_t::rem_stadt():  森島
Message: karte_t::rem_stadt():  delete
Message: karte_t::destroy():    towns destroyed
Message: karte_t::destroy():    sync list cleared
Message: karte_t::destroy():    planquadrat destroyed
Message: karte_t::destroy():    player destroyed
Message: karte_t::destroy():    factories destroyed
Message: karte_t::destroy():    attraction list destroyed
Message: karte_t::destroy():    world destroyed
World destroyed.

ああ…このエラーは先で参考にしていたsiba018氏と同じエラーですかね…。森島ってなんだよ…。


現状ここで起動出来ない状態で詰みました。どうしましょうか、うーん…。
ここまでやってきてアレですがnoguiモード的なのはないのかしら…ω・
エラーを見る限りディスプレイに映し出そうとしちゃってそこでエラーハイてからdestroyしまくってるし辛い。

とりあえず今日はこのへんで。