みちのいに!!

自分のメモと、他にもハマる人がいそうなことを書く

ArchLinuxでsimutransサーバを建てる 2016/02 120.1.3

simutransサーバーをマルチプレイ用に建てたかった 

またかよ

まあ 去年の記事、Archでsimutransサーバー - みちのいに!! の焼き直しだけど、新しい記事のほうが安心感あると思う。
ArchにかぎらずLinuxならだいたい同じ方法でできると思う。

まず無用なトラブルとかを避けるために、simutrans専用ユーザを作ってそれにログインする。

コンパイル

mkdir simutranstmp
cd simutranstmp
wget -O simutrans-src-120-1-3.zip https://sourceforge.net/projects/simutrans/files/simutrans/120-1-3/simutrans-src-120-1-3.zip/download
unzip simutrans-src-120-1-3.zip
chmod +x configure.sh
./configure.sh
make

configure.shするとconfig類は勝手に設定してくれる。GUIがあるサーバだったら明示的にconfig.defaultを書かないといけないのかもしれない。

設置

今回はバージョン別に管理したかった。

mkdir -p ~/simutrans_bin/120.1.3
cp sim ~/simutrans_bin/120.1.3
cp -r simutrans/* ~/simutrans_bin/120.1.3
cp get_pak.sh ~/simutrans_bin/120.1.3
cd ~/simutrans_bin/120.1.3
pak取得

このまま本体を実行するとエラーが出てくる。
120.1.3に同梱されているget_pak.shはpak64のバージョンがちょっと古いので、Windows版のpackset downloadでダウンロードしたものとバージョンが一致しない。

https://sourceforge.net/projects/simutrans/files/pak64/120-1/simupak64-120-1-2.zip

に55行目のリンクを書き換える。

pakを取得すると、 ~/simutrans_bin/simutrans/pak ができる。ここではうごかないのでsimと同階層に移す。

chmod +x get_pak.sh
./get_pak.sh
mv ~/simutrans_bin/simutrans/pak ~/simutrans_bin/120.1.3/pak

get_pak.sh、自分のディレクトリ名がsimutransであることを前提としているのかな。



言語ファイル取得

そして、こんなエラーも

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 ...

言語ファイルがちゃんと入ってないらしい。さらにそれを入れるシェルスクリプトも改行コードがCRLFになっててめんどくさい。

cp ~/simutranstmp/get_lang_files.sh ~/simutrans_bin/120.1.3/text/
cd ~/simutrans_bin/120.1.3/text/
chmod +x get_lang_files.sh
sed 's/\r//' -i get_lang_files.sh
./get_lang_files.sh

iptablesとかいじってSimutransで使用するポート(13353)を開いておく

~/simutrans/save/ に GUI環境なんかで同じpakで作ったセーブデータを設置(test.sveとする)
サーバーは自力でセーブファイルを作ることはしないらしい

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

これでアクセスできるか確認 とくにエラーらしいエラーを吐かなければOK


デーモン化

systemdだからこんなことしてるけど、それぞれの方法で

/home/simutrans/simutrans.sh

~/simutrans_bin/120.1.3/sim -server 13353 -server_name m77Server -objects pak -lang ja -nomidi -nosound -load test.sve

/usr/lib/systemd/system/simutransd.service

[Unit]
Description=Simutrans
[Service]
User=simutrans
ExecStart=/bin/sh /home/simutrans/simutrans.sh