szkがVJやITや、趣味のゲームや自作PCのはなしをするところ。最近バイクをはじめた

Simutrans(OTRPv39)をubuntsuにヘッドレスで建てたら思ったより大変だった

はじめに

simutransのサーバを提供することになったのですが、とにかく不安定。
このままだと一生張り付いてないとあかんってなったので、制御しやすいLinux版に移行することにした・・・というはなし。

え?Simutransって何・・・?って?

・・・

今回構築するもの:Simutrans(OTRP版 v39)

補足:GUIなし

参考にしたサイト
公式フォーラム
Simutrans JAPAN Wiki
ArchLinuxでsimutransサーバを建てる

構成

OS

~# uname -v
#126-Ubuntu SMP Mon Jul 1 10:14:24 UTC 2024
root@hv-game-srv:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy

SimutransのSource取得

今回のつまづきポイントの1つ。ソースを取得するところ。

最新版のOTRPを導入したい場合、Windows版では1220版のSimutransを持ってきてExeを入れ替えるだけで完了するがLinux版ではビルドが必要だ。

この時ソースは公式ではなく、OTRPから直接取得する。
OTRPで配布しているSourceにはベースとなるSimutrans1220版も含まれているため、OTRPをLinuxへ導入したい場合はOTRPのGitから直接持ってこよう。

手順としては次でOKだ。

#wget https://github.com/teamhimeh/simutrans/archive/refs/tags/v39.zip

config.defaultの編集

Wikiに乗っている手順で基本的にはOKだ。
今回はサーバ専用(ヘッドレス構成)で行いたいので以下の記載さえあればいい。
ここで記載されている「BACKEND」はシステムの描写を行うエンジンの指定になる。
Wikiや古の手順ではゲームプレイすることが目的になっているため当然「GDI」や「SLD」といった指定があるが、今回は画面は不要。
この場合「posix」を選択する。
当然SLDのソースコードの取得も不要なので手順的にはかなり楽といえるな!

BACKEND := posix
OSTYPE := linux
OPTIMISE := 1
MULTI_THREAD := 1

※Wikiではcolor depthの設定が記載されていたがこれは現在不要のようだ。

必要なライブラリ

必要なライブラリも世代を超え少し変化している。
Wikiそのままでやったら普通に失敗したぞ。

現在の令和最新版情報はSimutrans公式ページに丁寧にディストリビューションごとに記載されている。
やはり公式、公式ページはすべてを解決する・・・!

また、OTRPをビルドする際は別途zstdが必要だ。
OTRP公式サイトだと「zstdをソースからmake installしてね」とあったが、ubuntsuの場合以下で解決できた。

# apt install zstd

うーん、やっぱりaptなんすねぇ。

SimutransOTRP v39のmakeは筆者の10CPU/16Gmem攻勢で大体10分程度かかる。
make -j 4で大体2分くらいってところだな!

makeでエラーが起きたとき

大体「ライブラリがない」か「config.defaultの表記が誤っているか」のどちらかだConfig.defaultの文章が増えるほど必要になるライブラリが増えると思ってもらっていいぞ。

ビルド完了後の処理

正直こっちのが時間がかかった。
Simutrans君のファイル読み込みに癖がありすぎるっぴ・・・

初めての人向けにお話しするとまず、ビルドされた「build/default」配下のものは好きな場所に移動していい。
また、nettoolsが必要な場合は「simutrans本体のビルド→nettoolsのビルド→build/default配下の移動」とした方が間違いがない。
え?そのまま使う?・・・そう。

んでもって、ビルドしても生成されないものがこちら

・saveファイル
・simuconf.tab
・langデータ
・pakデータ

この仕様に気が付かずにかなり時間を要した。
んでもって、起動しようとすると「langファイルがないよ」的なエラーが出る。

FATAL ERROR: simmain::main() - Unable to load any language files
*** PLEASE INSTALL PROPER BASE FILES ***

either run ./get_lang_files.sh

or

download a complete simutrans archive and put the text/ folder here.
Aborting program execution ...

GUI版だとぽちぽちっと終わるのだけどヘッドレスの場合はダウンロードしてきたSource群の中に「./get_lang_files.s」があるのでこいつを実行する必要がある。
ただし、こいつがまたやっかいで「/home/<user/simutrans」配下で起動することが前提になっているっぽい。
そのくせ落としてきたテキストファイルは「<simutransの実行ファイルディレクトリ>/text」に置く必要があるから厄介だ。
実行場所を変更したい場合は中身を編集すれば簡単に変更できた。

pakも同様にget_pak_file.shで拾えるが正直Windows版や直接拾ってきたものをSCPでアップロードした方が楽だと思う。

最終的にディレクトリ構成はこうなるはずだ。

・/home/user/simutrans(自動的に作成される。rootの場合は/root/simutrans
└map
└save ←実行時、セーブのロードはここからのみ行う
└screenshot
・<ビルドしたsimutransの実行ファイルのディレクトリ>
└sim*(実行ファイル)
└pak~/(Pakディレクトリは実行ファイルと同じ階層に置く)
└nettools
└simuconf.tab←どこかから移植する
└その他もろもろ

おそらく実行ファイルをユーザディレクトリ配下の「simutrans」に配置することを前提としているからだろうけど、ネットにそんな情報もなかったしこのあたりの仕様にかなり困った。
ちなみにhelpを見て気が付いた。最初から見ろよ(自戒

# ./sim -h

---------------------------------------
  Simutrans 122.0.1 Nightly
  released Jul 24 2024
  developed
  by the Simutrans team.

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

  Based on Simutrans 0.84.21.2
  by Hansjörg Malthaner et. al.
---------------------------------------
command line parameters available:
 -addons             loads also addons (with -objects)
 -async              asynchronous images, only for SDL
 -showoverlay        show warning of overlaid addons
 -borderless         emulate fullscreen as borderless window
 -use_hw             hardware double buffering, only for SDL
 -debug NUM          enables debugging (1..5)
 -easyserver         set up every for server (query own IP, port forwarding)
 -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 NAME          loads savegame with name 'NAME' from Simutrans 'save' directory
 -log                enables logging to file 'simu.log'
 -mute               mute all sounds
 -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
                     a server will pause if there are no clients
 -res N              starts in specified resolution:
                      1=640x480, 2=800x600, 3=1024x768, 4=1280x1024
 -scenario NAME      Load scenario NAME
 -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
 -autodpi            Automatic screen scaling for high DPI screens
 -screen_scale N     Manual screen scaling to N percent (0=off)
                     Ignored when -autodpi is specified
 -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
 -set_workdir WD     Use WD as directory containing all data.
 -singleuser         Save everything in data directory (portable version)
 -startyear N        start in year N
 -theme N            user directory containing theme files
 -threads N          use N threads if possible
 -timeline           enables timeline
 -use_workdir        use current dir as basedir
 -snapshot x,y,z,f   to make the snapshot like a commandline tool
                     (x,y,z) : center position, f : zoom_factor (from 0 to 9)

起動

起動はこれでいける。

/root/simutrans-otrp/sim -server 13353 -server_admin_pw <password> -objects <pakディレクトリ名> -lang ja  -load client1-network.sve

このとき「なんのエラーも標準出力も出てなかった」ら起動できてない。
この子起動しないとエラーもはけないらしいので起動後の確認はこちらで行う。

# ps -aux | grep simu
root        3238  9.8 28.3 954072 322832 pts/1   Sl   04:23  20:25 /root/simutrans-otrp/sim -server 13353 -server_admin_pw <password> -objects <pakディレクトリ名> -lang ja  -load client1-network.sve

起動するとSimutransなんちゃらほんちゃら!みたいなログが出るので目印にすればいいぞ。

ということでゲーム1本のインストールに意外と苦労したって話でした。

最後に

一緒にプレイしたい人はささつづ村役場Discordかszkに直リプくらさい。
以上です。

この記事を書いてる人→

szkのアバター

▼検索


▼カテゴリアーカイブ

▼人気記事

▼月別アーカイブ


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です