Wakotech Blog

ポエム

さくらVPS(CentOS 6.5/1GB)でTerrariaのマルチサーバーを立てるのにとても大変だったお話

ついこの間SteamでTerrariaがセールだったため、友人達と数人で購入しました。VPSを借りていますがサイト公開くらいにしか使っていなかったのでどうせならとマルチサーバーを立ててみることに。
最初はここを参考にしていたのですが、ここにあいてあるTDSMはバージョンの都合で対応してないようで……なのでtshockの最新版を探して直接wgetすることにしました。
色々探した結果英語ですがここが一番わかりやすかったです。が英語なので簡単に概要と手順を説明します。

今回マルチサーバーを立てるのにはTShockというものを使用します。TShockにはTerrariaServer.exeが標準で入っているのでそれを起動すればマルチサーバーが立ちます。
しかしCentOSでは.exeは起動しないので、monoというものが必要だそうです。monoでは.NET製のexeファイルを動かすことができるそうです(全てを動かせる訳ではないみたい?)。
上記のページの通りにコマンドを打てばmonoもTShockも入ります。権限がなかったため $ echo ':CLR:M::MZ::/usr/local/bin/mono:' > /proc/sys/fs/binfmt_misc/register は動かせなかったのですが、これは.exeをmonoに関連づけるものらしいので、TerrariaServer.exeを起動するときに毎回monoをかませば問題ありません。

マルチサーバーを立てようとする際にsudoでコマンドを叩いたのですが、sudoだとPATHを張ったはずのmonoコマンドが見つからない……と思って調べてみると、sudoでは元のユーザのPATHが引き継がれないそうです。なのでこちらを参考に$ sudo visudo コマンドで設定ファイルを書き換えましょう。
これでmonoは動いてマルチサーバーが起動します。新たにワールドを作る際はコマンドに従って作成、既存ワールドを使う場合はtcpコマンド等でアップロードし、/Terraria/Worlds以下に配置しましょう。
ワールドを選択すればロードがはじまってワールドが起動する……のですが、足場がロードされていないため落ち続けてしまいます(正確には少しずつロードされているようですが)。
「Help, my map does not show up! Players just fall endlessly!」の項にあるようにLD_LIBRARY_PATHを宣言しても動きませんでした。原因はさきほどのPATH同様LD_LIBRARY_PATHがsudoに渡されていなかったためでした。
こちらの場合はvisudoに追記してもだめなようなので、コマンドを実行する際にenv LD_LIBRARY_PATH=/opt/mono/libと指定するしかないようです。もしくは、aliasを書いておくか。
$ sudo env LD_LIBRARY_PATH=/opt/mono/lib mono TerrariaServer.exe
このコマンドで正しく動くようになります。

他にはtshockのwikiを参考にconfig.jsonを書き換えたりコマンドを打って設定できるようです。また、大きいワールドの場合ロード時間がだいぶかかってしまうので注意が必要です(自分の環境ではLargeで20分程かかりました)。
起動時こそCPU使用率が100%になりますが、起動してしまえばそこまででもないので、最安の1GBプランでもどうにかなりそうだといいです(メモリは結構食われていますが)。
身内向けという感じではありますが、興味のある方はIPアドレスをお伝えしますのでご連絡ください。