この記事(?)はSimutrans Advent Calendar 2025 - Adventarの18日目の記事です。
Simutrans-ExtendedのマルチプレイサーバーをDockerを使って簡単に構築できるようにするための設定ファイル群です。
- command-line-server-build(GUI無し)バージョンのSimutrans-Extendedに対応
- オートセーブ・毎時/毎日セーブに対応
- 毎時セーブは直近24時間分、毎日セーブは無制限に保存されます
(あくまでSimutrans-Extended向けに作成していますが、修正を加えればStandard版やOTRP版でも動作すると思います)
この設定ファイル群はななさば1期で使用していた設定をベースにしています。
以下のソフトウェアがインストールされている必要があります。OSはLinuxを想定しています。WindowsやMacで動くかは未確認です。
- Docker
- Docker Compose
- このリポジトリをクローンするか、緑の「Code」ボタンを押して
Download ZIPでダウンロードし、解凍して下さい。 - このフォルダを使ってサーバーを立てるので、適当に良さそうな場所に配置して下さい。フォルダ名は変更しても構いません。
- このフォルダに
volume-binフォルダとvolume-nettoolフォルダを作成して下さい。 - https://bridgewater-brunel.me.uk/downloads/nightly/packages/ から
Simutrans-Extended-Complete.zipをダウンロードして解凍し、volume-binフォルダに配置して下さい。- この最新版の本体をベースに参加者向けの配布用クライアントを作成します。
- 使用しないpaksetなどの不要なファイルを削除しても構いません。
- https://bridgewater-brunel.me.uk/downloads/nightly/linux-x64/ から
nettoolをダウンロードしてvolume-nettoolフォルダに配置して下さい。 volume-nettool/nettoolに実行権限を付与して下さい。コマンドラインでchmod u+x volume-nettool/nettoolを実行してください。- 正しく配置できているかチェックして下さい。
README.mdがあるフォルダにvolume-binフォルダがあり、その中にsimutrans-extendedという実行ファイルがあればOKです。README.mdがあるフォルダにvolume-nettoolフォルダがあり、その中にnettoolという実行ファイルがあればOKです。
simuconf.tabの設定のsingleuser_installが0になっていることを確認して下さい。- ダウンロードしてそのままの場合は0になっていますが、他の場所からコピーしてきた場合は1になっている可能性があります。0に変更して下さい。
最新のNightlyバージョンではなく、事前に用意した特定のバージョンを使いたい場合は適宜4.の手順を変更して下さい。なお、nettoolはどのバージョンでもほとんど変わらないので、最新版を使っても問題ありません。
Simutrans-Extendedには安定版が存在しません。そのため、Nightlyビルドを頻繁に更新することは避けた方が良いでしょう。大きな変更が取り込まれてしばらくの間はNightlyビルドが不安定になることがあります。
セーブデータをあらかじめ生成しておく必要があります。同じ本体を使ってセーブデータを生成した場合は2.aを、異なるバージョンの本体を使ってセーブデータを生成した場合は2.bを参照して下さい。
ちなみに、サーバーに接続したときのクライアント側のマップ位置は、セーブデータを生成したときのセーブ位置になります。
- このフォルダに
volume-saveフォルダとvolume-save/saveフォルダを作成して下さい。mkdir -p volume-save/saveで一気に作成できます。
- 事前に作成したセーブデータを
volume-save/server13353-network.sveというファイル名でコピーして下さい。
- このフォルダに
volume-saveフォルダとvolume-save/saveフォルダを作成して下さい。mkdir -p volume-save/saveで一気に作成できます。
- 事前に作成したセーブデータを
volume-save/save/first.sveというファイル名でコピーして下さい。 sudo docker compose up firstを実行して、ログが止まるまで待ちます。このとき、実行を中断しないで下さい。- 同じバージョンの本体を手元の端末で起動し、サーバーに接続して下さい。
- ロードが終わり、ゲーム内時間が進み始めたら、セーブデータが変換され、適切な位置に保存されました。自身の端末の本体を閉じ、
sudo docker compose up firstで動かしたコンテナをCtrl+Cで停止して下さい。 - 後始末として、
sudo docker compose down firstを実行してコンテナを削除して下さい。
GUIのない軽量な本体でサーバーを構築する場合(おすすめ)は3.aを、GUI付きの本体でサーバーを構築する場合は3.bを、VNCを使ってサーバー自体を操作する場合は3.cを参照して下さい。
- https://bridgewater-brunel.me.uk/downloads/nightly/linux-x64/command-line-server-build/ からGUI無し版の
simutrans-extendedをダウンロードし、volume-binフォルダにheadless-serverという名前で配置して下さい。 volume-bin/headless-serverに実行権限を付与して下さい。コマンドラインでchmod u+x volume-bin/headless-serverを実行してください。.envファイルを開き、nettool用のパスワードを設定して下さい。sudo docker compose up -d server-headless backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。
.envファイルを開き、nettool用のパスワードを設定して下さい。sudo docker compose up -d server-general backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。
.envファイルを開き、nettool用のパスワードを設定して下さい。sudo docker compose up -d server-vnc backupを実行してサーバーとバックアップコンテナの両方を起動して下さい。- VNCクライアントを使ってサーバーに接続して下さい。サーバーと同じマシンであれば、
localhost(ポートはデフォルトと同じ5900番)に接続すれば良いです。別のマシンから接続する場合は、サーバーのホスト名またはIPアドレスを指定して下さい。
volume-save/server13353-network.sveに最新のセーブデータがあります。
GUI無し版でサーバーを立てると、クライアントの処理が置いてけぼりになることがあります。GUI無しの本体では、描画処理が存在しない分サーバーの処理が高速になります。その結果、クライアント側の処理が追いつかず、ユーザーの操作が反映されるまでに数十秒かかりプレイ不可能になることがあります(なりました)。
この問題を解決するために、server-headlessの設定ではCPU使用率を70%に制限しています。これにより、クライアント側の処理が追いつきやすくなります。ただし、サーバーの処理が遅くなるため、サーバー側での時間進行が遅くなります。
この値は弊鯖での経験に基づいて設定していますが、環境によっては調整が必要かもしれません。docker-compose.ymlのserver-headlessセクションのcpusの値を変更して試してみて下さい。
sudo docker compose logs -fn 100で最新100行のログをリアルタイムで確認できます。
- 手元の端末でSimmutrans-Extendedのクライアントを立ち上げ、サーバーに接続して下さい。この接続時の操作でセーブが行われます。
sudo docker compose downですべてのコンテナを停止します。再度立ち上げる際にはbackupコンテナも一緒に立ち上げて下さい。
backup/backup-hourly.shでhost.docker.internalを使っている部分を使用するサービス名に変更し、docker-compose.ymlのbackupセクションのextra_hostsを削除して下さい。
# libminiupnpc.17が必要なので、誤魔化す
RUN ln -s /usr/lib/x86_64-linux-gnu/libminiupnpc.so.18 /usr/lib/x86_64-linux-gnu/libminiupnpc.so.17 && \
ldconfig動いてるからヨシッ!
- Simutrans OTRPのHeadlessサーバーを建てるのに苦労した話 #game - Qiita
- OTRPバージョンでGUI込みでのサーバー構築方法が解説されています。
- How to set-up (or compile) a Linux headless Simutrans server?
- Standard版などでGUI無しのバイナリをコンパイルする方法が解説されています。
本日の11時に、私を一番近くで育ててくれた祖母が長い眠りにつきました。祖母に感謝を込めてこの記事を捧げます。