LinuxでNetSimutrans用のサーバーを構築する

Simutransでマルチプレイするために、サーバーを構築する方法です。
今回はConohaVPS上でUbuntu 16.04を使いました。

広告




構築方法

作業用ユーザーの作成

作業用のユーザーを作成します。rootで作業をするのはよろしくないらしい。
今回はsimuという名前のユーザーを作り、管理者権限を付与しました。

adduser simu
gpasswd -a simu sudo

作成したらsimuでログインできるか、管理者権限を取得できるかを確認します。
以降の作業は作業用ユーザーで行います。

Simutransのダウンロード

作業用ディレクトリ「tmp」を作成。

mkdir tmp

Simutransのソースコードをダウンロードします。現時点(2017年3月)での最新版は120.2.1でした。

wget https://sourceforge.net/projects/simutrans/files/simutrans/120-2-1/simutrans-src-120-2-1.zip/download

ダウンロードした、download という名前のzipファイルを解凍します。

unzip download

unzipしようとしたら The program 'unzip' is currently not installed. You can install it by typing: sudo apt install unzip と言われてしまいました。
ConohaVPS上のUbuntuには、デフォルトでunzipが入っていないので、unzipのインストールを行います。

sudo apt-get install unzip

インストールが終わったらzipファイルを解凍します。

ビルド

Linuxサーバー上で動かすためにビルドを行います。
tmpディレクトリに移動します。

cd tmp

config.default を開き、下記の項目を設定します。

BACKEND = posix
COLOUR_DEPTH = 0
OSTYPE = linux

configure.sh に実行権限をつけ実行します。

chmod +x configure.sh
./configure.sh

configure.sh: error: no acceptable C compiler found in $PATH と言われるので、Cコンパイラをインストールします。

sudo apt-get install gcc

今度は configure.sh: error: C++ preprocessor "/lib/cpp" fails sanity check と言われるのでg++をインストールします。

sudo apt-get install g++

このままmakeすると、 descriptor/reader/image_reader.cc:12:18: fatal error: zlib.h: No such file or directory
#include <zlib.h>
といわれるので zlib1g-dev をインストールします。

sudo apt-get install zlib1g-dev

また dataobj/loadsave.cc:20:19: fatal error: bzlib.h: No such file or directory
#include <bzlib.h>
も言われるので、 libbz2-dev をインストールします。

sudo apt-get install libbz2-dev

インストールが終わったらビルドします。

make

get_pak.shの作成

他のサイトには get_pak.sh を実行すると書いてありますが、自分の環境ではなぜか生成されてなかったので、下記のgithubからファイルを持ってきます。
https://github.com/aburch/simutrans/blob/master/get_pak.sh
get_pak.sh はtmpディレクトリの中に設置します。
あとは、 get_pak.sh に実行権限を付け実行し必要なpakファイルをダウンロードします。

chmod +x get_pak.sh
./get_pak.sh

get_lang_files.shの作成

get_lang_files.sh も作成します。下記サイトからファイルを持ってきて、tmpディレクトリ内に設置します。
https://github.com/aburch/simutrans/blob/master/get_lang_files.sh
get_lang_files.sh を実行します。

chmod +x get_lang_files.sh
./get_lang_files.sh

初期マップの設置

サーバーは自力でマップの生成を行ってくれないので、クライアント側で用意したファイルをサーバーのsaveディレクトリに保存します。

ファイルの設置など

私はhome階層のSimutransフォルダとtmpフォルダ内のSimutransフォルダとsimファイルを統合しました。

動作確認

サーバーモードで起動できるか確認します。

./sim -server -objects pak -load save.sve

運用開始

正常に起動できたら、運用を開始します。

cd
./simutrans/sim -server 13353 -objects pak -lang ja -nomidi -nosound -load server13353-network.sve

※ロードするセーブファイルに初期マップを指定してしまうと、サーバー側のSimutransを再起動した際にこれまでのデータが消えてしまうらしいので気を付けましょう。
ネットワーク対戦を開始すると作成される、 server13353-network.sve (13353の部分はポート番号?)が最新のマップデータだと思われます。

systemdに登録する

このままだと、SSH接続を切るたびにSimutransが終了してしまうのでデーモン化します。
Simutransを起動するためのスクリプトを書きます。

cd
vim start.sh
</code>
start.shの中身は下記の通りです。
<code>
~/simutrans/sim -server 13353 -server_name hassakuServer -objects pak -lang ja -nomidi -nosound -load ../server13353-network.sve

次に /etc/systemd/system/ へ移動し、 sim.service というファイルを作成します。

cd /etc/systemd/system/
vim sim.service

sim.service の中身は下記の通り

[Unit]
Description=Simutrans
[Service]
User=simu
ExecStart=/bin/bash /home/simu/start.sh

これでSimutransを起動するときは下記のコマンドを入力するだけで済むようになりました。

sudo systemctl start sim

参考サイト

広告