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