Linuxでの『Starbound』サーバ構築法


既報のとおり、『Starbound』のベータテストが開始され、筆者も『さくらのVPS 1G』を使用し、Cent OS6.4 でサーバを立ててみました。構築時にいくつか「ハマりどころ」があったため、本稿ではそちらの解消法をメインに、いくつかの tips をしるしておきます。「ぐぐっても出てこねえ!」状態になってしまっている諸氏の助けになれば幸いです。

本稿の内容についてですが、『Starbound』は現在ベータテスト中であり、サーバプログラムによるなんらかの不具合に遭遇する可能性も十分にあります。バージョンは「Irritated Koala」ですが、詳細なバージョン情報が表示されていないため、「2013年12月8日に提供されていたバージョン」とします。また、「インターネット上に公開されるサーバ構築」の特性上、そのリスクや影響をある程度自力でコントロールできる範囲でご利用ください。

先駆者『Terraria』のサーバは、公式には Windows 版のみ提供されていました。Linux で利用するには、 .NET Framework を Linux 上で動作させる『Mono』を利用するか、非公式の『TShock』を利用する必要がありました。しかし『Starbound』では、Linux 版の提供とともにサーバプログラムも Linux に対応しており、『SteamCMD』によるサーバの提供が可能となり、常時稼働させるさいの負担が軽くなりました。「Linux を触ったことがないけどサーバを立ててみよう!」といった方にはまったくおすすめできませんが、できることが広がるのはいいことです。

 

『SteamCMD』の導入

まずは『SteamCMD』のセットアップを行います。ディレクトリは任意の場所で OK です。root よりは作業用のユーザーを作成したほうがよいでしょう。そのあたりのコマンドや設定については割愛します。

mkdir Steam
cd Steam
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

解凍したら『SteamCMD』を起動します。なお、サーバプログラムのダウンロードには『Starbound』を購入したアカウントでログインする必要があります。この段階で glibc や libstdc でエラーが出た場合は、yum などでインストールを行ってください。

./steamcmd.sh +login anonymous +quit

Connecting anonymously to Steam Public…Success. と表示され、コンソールに戻ったら正常に動作しています。初回は『SteamCMD』がアップデートされるため、少し時間がかかります。

 

『Starbound』のダウンロード

次は『Starbound』のダウンロードを行います。購入したアカウントでログインする必要があるため、PC などで Steam を立ち上げていたら一度終了します。

./steamcmd.sh +login (Steamアカウント名) +force_install_dir (SteamCMDのディレクトリ)/starbound +app_update 211820 validate +quit

接続時にパスワードを聞かれるため入力します。初回ログイン時はコードでの認証が必要となるため、「Your Steam account: Access from new computer」のメールに記載されているコードを入力します。次回以降は必要ありません。ダウンロードには少し時間がかかるため、ゆっくり待ちましょう。ダウンロードが終了すると自動でコンソールに戻ります。

 

サーバの起動

サーバの起動を行います。正常起動しても大量の Warn が出ますが、気にせずいきましょう。後述しますが、x64 環境であるにもかかわらず x86 で実行しているのは楽をするためです。

cd (SteamCMDのディレクトリ)/starbound/linux32
./launch_starbound_server.sh

ライブラリが不足している場合、root になり yum でインストールし再挑戦します。ひととおりインストールが終わると、CentOS の方は下記のエラーになると思います。

./starbound_server: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./starbound_server)
./starbound_server: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by ./starbound_server)
./starbound_server: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./starbound_server)

これを解決する方法はふたつ、ひとつはどこかから新しいバージョンの libstdc を持ってくる、もうひとつは gcc をソースからインストールすることです。後者が本来は正しいのですが、少々ハードルが高いため今回は前者を選択します。新しいバージョンの libstdc は『SteamCMD』の linux32 ディレクトリに入っているため、これをコピーします。x64 の libstdc は含まれていないようです。 /usr/lib/libstdc++.so.6 は libstdc++.so.6.0.13 などのシンボリックリンクになっていると思いますので、念のため確認します。

ls -la /usr/lib

libstdc++.so.6 -> libstdc++.so.6.0.13 のようになっていたら、libstdc++.so.6 を削除して置きかえます。シンボリックリンクになっていない場合、過去に何かした覚えがないか胸に手をあてて考えましょう。

rm /usr/lib/libstdc++.so.6
cp /root/steam/linux32/libstdc++.so.6 /usr/lib

これで上記エラーは出なくなります。Warn などが大量に流れますので、起動したらいったん Ctrl+C で止めて設定ファイルを確認しましょう。「(SteamCMDのディレクトリ)/starbound/assets/default_configuration.config」でポートの変更やパスワードの設定を行います。"gamePort" がポート、"serverPasswords" がパスワードです。tcpwrapper や iptables を構築している場合は適宜許可をします。tcpwrapperには下記のように追記しましょう。

starbound_server : all

これで公開の準備は完了です。接続テストをおこない、問題がなければ OK でしょう。クライアントとサーバのバージョンが違うと接続できません。Yasuda がプレイ中に Dimitri がログインしようとしたらエラーで接続できず、すわ不具合かと思ったらアップデートされていた……という事件があったため、急にログインできなくなった場合はアップデートがないかどうかをチェックしましょう。

サーバプログラムのアップデートは『Starbound』のダウンロードの項目で使用したコマンドで可能です。そのまま実行すると設定ファイルごと上書きされますが、ベータテストであることを考慮すると、設定内容をメモしておいて上書きしたほうがトラブルは少なくなります。

 

サーバの動作と今後の展開

動作の快適さですが、『さくらのVPS 1G』では3人入るとラグくなる体たらくです。具体的には「すべての動作がスローになって人類を超越した時間感覚を体験」「三歩歩いて一歩戻る」です。また、チャンクの生成が間に合っていないケースが多々有りました。その後 Yasuda のマシン(Core i7 4000番台、Windows)でサーバを稼働させてみたところ、そのような問題はみられませんでした。

とはいえサーバプログラムの動作自体は問題なく、いきなり落ちたりログインできなくなることもありませんでした。ラグであらぬところから殴られて死ぬこともなかったため、同期などのベースの部分はしっかりできているのではないでしょうか。

公式フォーラムをざっと見てみたところ、こちらのスレッドでスペックの情報がされております。サーバスペックで悩みのあるかたは、ぜひご参照ください。「Linux x64 環境で3人目から重くなる」との不穏な post もあるため、筆者のサーバが「悪いなのび太、このサーバ二人用だから」状態なのは、『さくらのVPS 1G』の問題ではない可能性もあります。そういった部分もまたベータテストです。楽しんでいきましょう。