2017年4月21日金曜日

Raspberry Pi で Minecraft サーバーを立てる方法


Raspberry Pi 3 でマインクラフトサーバーを構築してみました。

これまで自分の Mac をサーバーにして友人と Minecraft のマルチプレイをやっていましたが、「サーバーつけて〜」と連絡が来ても用事があって対応できないことがよくありました。お互い好きなタイミングで気軽にログインできればいいのですが、そのためだけにパソコンをつけっぱなしにするのもどうかと思いますし、Minecraft Realms のような有料サービスを使うほど頻繁にやってもいなかったので、サーバーを用意するのがなかなか難しかったわけです。

そんなことから、PC よりも気軽に起動させておけるサーバーがあると便利かなと思い、Raspberry Pi をマインクラフトサーバーにしてみました。

自分が行った手順をまとめて、Raspberry Pi でマイクラサーバーを立てる方法をご紹介します。

用意するもの


Raspberry Pi 3
マインクラフトサーバーを動作させる場合、ワールドの状態を処理するための CPU 性能が重要になります。Raspberry Pi 2 でも動作はするようですが、より性能の高い Raspberry Pi 3 を使った方が処理落ちは起きにくいと思います。負荷をかけ続けると熱で動作が不安定になる場合があるので、ヒートシンクファン付きケースを使うなど、ある程度の熱対策は行ってください。

Raspberry Pi 用の電源
2.5A 以上の安定した電源を用意します。2A の電源でも動作はしますが、電力不足によって処理速度が落とされてしまい、サーバーの動作が不安定になります。電源自体に問題がなくても USB ケーブルが原因で給電不足になる場合もあるため、電源関係はなるべく性能と品質の高いものを使ってください。本体の赤色 LED が点滅する場合は、何らかの要因で電力不足になっている状態なので注意が必要です。

microSD カード
セーブデータのサイズはワールド生成直後で 100MB 程度、行動範囲を広げても通常は数百 MB 程度で、それほど大きな容量は必要ありませんが、なるべく読み書き性能の高いものを使用してください(自分が使った中では A1 対応の microSD が最も安定していました。)。性能の低い microSD では遅延が頻繁に発生し、サーバーが落ちることも多いです。不良品に当たる可能性もあるので、実際に使用する前にベンチマークソフト等で動作を確認しておきましょう。

関連記事:
Raspberry Pi に最適な microSD カードは?【検証してみた】

LAN ケーブル
無線接続でもプレイはできますが、有線接続にした方が遅延が少なくなり、サーバーのパフォーマンスは良くなります。

Raspbian の環境を整える


まずは Raspbian Jessie with PIXEL をインストールして起動できる状態にしてください。以降の設定は Raspberry Pi にキーボードとマウスを接続し、ディスプレイに接続した状態で行います。

関連記事:
Raspberry Pi 3 に Raspbian Jessie with PIXEL をインストール

screen のインストール
screen コマンドはリモート接続で Minecraft サーバーを起動させる場合に必要になります。インストールするには以下のコマンドをターミナルから実行します。

sudo apt-get install screen

Raspberry Pi の設定の変更
普段、Raspberry Pi をサーバーとして使う場合は、電源とネット接続だけの、いわゆる「ヘッドレス」状態で運用することを想定しています。SSH を有効にして CLI(コマンドラインインターフェイス)で他の端末からリモートアクセス操作をするための設定を行います。

1. Raspberry Pi の設定を開き、「システム」タブの「ブート」の項目を「CLI 」に変更。


2. 「インターフェイス」タブの SSH を有効にする。


3. 「パフォーマンス」タブの GPU メモリを 16MB に変更。(サーバー運用ではグラフィックスを使わないので、GPU メモリは下限値の 16MB にしておきます。)


4. 「OK」をクリックして下のダイアログが表示されたら再起動する。


再起動すると文字がダーっと流れる CLI の起動画面になります。

CLI の画面

起動して文字入力可能な状態になったら「startx」と入力、実行してデスクトップを表示します。

Minecraft サーバーのインストール


1. 下記サイトから「minecraft_server.バージョン.jar」ファイルをダウンロードする。

PC/Mac用のサーバーをダウンロードする | Minecraft
https://minecraft.net/ja-jp/download/server


*以降はバージョン 1.11.2 の前提で説明します。今後バージョンアップがあった場合はバージョンナンバー部分を適宜置き換えて作業を行ってください。

2. ファイルマネージャを開き、/home/pi に minecraft フォルダを作成する。

ファイルマネージャでの操作でフォルダを作成するか、ターミナルから下記のコマンドでフォルダ作成を行います。

sudo mkdir /home/pi/minecraft

3. 「minecraft」フォルダに先ほどダウンロードした「minecraft_server.1.11.2.jar」ファイルをコピーする。

ブラウザからダウンロードした場合、Download フォルダにファイルがあるはずです。ファイルマネージャのウインドウを二つ開いて minecraft フォルダにドラッグ&ドロップで OK です。


4. ターミナルを開き、以下のコマンドを実行して Minecraft サーバーを起動する。

cd /home/pi/minecraft
java -jar minecraft_server.1.11.2.jar nogui

Minecraft サーバーの初回起動時には必ず途中で停止しますが、それで正常です。


5. minecraft フォルダに以下のフォルダ・ファイルが生成されているのを確認する。


6. eula.txt をダブルクリックしてテキストエディタで開き、「eula=false」を「eula=true」に書き換えて保存する。

これでマインクラフトサーバーの起動準備ができた状態になります。

Minecraft サーバー起動用シェルスクリプトの作成


サーバー起動のために毎回長いコマンドを打ち込むのも面倒なので、起動用のシェルスクリプトを作成します。

1. /home/pi フォルダに新規の空のファイルを「startmc.sh」として作成する。

2. 「startmc.sh」を右クリックしてコンテキストメニューを表示させ、「Text Editor」をクリックして開き、以下のスクリプトを入力して保存する。

#!/bin/bash
if screen -ls | grep -sq "minecraft" ; then
  echo "A Minecraft server is already running"
else
  cd /home/pi/minecraft
  screen -dmS minecraft java -server -Xmx832M -Xms832M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -jar minecraft_server.1.11.2.jar nogui
fi

このスクリプトは、screen コマンドでセッション名「minecraft」を作成し、そのセッションでマインクラフトサーバーを起動します。screen のセッションでサーバーを起動させておけば、SSH の接続を切っても実行中のサーバーが停止せず、動作した状態が維持されます。

起動オプションの説明
-server
プログラム実行速度が最大になるように設計されているサーバーVMで起動します。

-Xmx832M -Xms832M
マインクラフトサーバー用に 832MB のメモリーを割り当てます。
Raspbian 起動直後の空きメモリーが 882MB だったので、システム用に 50MB くらい残しておけばいいかな?と適当に決めた数字です。本当に最適かどうかは分からないので、問題があれば適宜変更してください。数字を大きくしすぎるとシステムが不安定になるかもしれないのでご注意を。

-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
専門的なことはよく分かりませんが、メモリの使い方を最適化することでシステムが停止する時間を極力減らすためのオプションのようです。

3. 「startmc.sh」ファイルを右クリックしてコンテキストメニューの「ファイルのプロパティ」をクリックし、パーミッションタブの実行を「すべて」に変更する。


*この設定は以下のコマンドでも行えます。
sudo chmod +x /home/pi/startmc.sh

これで設定は完了です。
設定が終了したら Raspbian を再起動してください。

マインクラフトサーバーの起動方法


Raspbian が CLI で起動した状態で以下を実行します。

./startmc.sh

実行しても何も表示は出ませんが、screen のセッションでサーバーが起動しています。十数秒で起動が完了し、マルチプレイからログインできる状態になります。(最初の起動ではワールドの生成が行われるので 1 〜 2 分ほどかかりますが、次回以降は 15 秒程度で起動します。)

以下のコマンドを実行するとサーバーの稼働状態を見ることができます。

screen -r

マイクラサーバーの稼働状態の画面

サーバーを停止する場合は以下の手順です。

上の画像のようにマインクラフトサーバーの稼働状況が表示された状態で、
stop」と入力してエンターキーを押します。

サーバーが停止し、screen のセッションも閉じられます。

停止するとこのような表示になります。

サーバーを停止させず動作確認するだけの場合は、ショートカットキー (CTRL + A) + D (デタッチ)で screen のセッションを離れることができます。

サーバー運用について
サーバーの設定には Raspbian のデスクトップ環境などを使用しましたが、サーバー運用は基本的に Rspberry Pi をディスプレイには接続せず、電源と LAN だけを差した状態で別端末から SSH 接続をしてコマンド操作を行った方が簡単です。

SSH 接続に使う端末はパソコンでもスマホでもタブレットでも OK です。Windows では「Tera Term」、Mac では「ターミナル」、Android では「JuiceSSH」、iOS では「Termius」などのアプリを使ってください。

iOS 版 Termius のマイクラサーバー稼働状況の表示

Raspberry Pi に接続したキーボードから操作するのと同じ様に、SSH 接続をした端末からコマンドを実行できます。

サーバーの動作感は


Raspberry Pi 3 のサーバーで実際にプレイしてみると、二人でログインして採掘したり建築をしたりする程度ならほぼ問題ありませんでした。設置場所の関係から有線ではなく無線接続の状態でテストを行いましたが、たまに遅延が起きることはあるものの、普通に遊べるレベルでした。有線であればもっと安定していると思います。

しかし冒険に出かけて新しいチャンクが表示される時など、負荷が高くなるような場面ではサーバーが落ちることもありました。テスト時はサーバーの設定を変えずデフォルトの状態で行いましたが、やはりそのままの設定では Raspberry Pi の処理能力では厳しいようなので、設定ファイル server.properties の中の view-distance (描画距離)の値を減らすなど、負荷軽減のための微調整はした方が良さそうです。

公式のバニラサーバーの他に Spigot も動作しました。こちらは少ししかテストしていませんが、Spigot ではログにエラーがほとんど出ず遅延も少なめで、バニラサーバーよりも多少負荷に強い感じがします。ただ、部分的にブロックが表示されなくなるバグも起きたため、やや不安定なところもあるのかなという印象です(使用したセーブデータが 1.9 の頃から使っているものだったので、その影響もあるかもしれません)。しかし動作の安定性を重視するなら Spigot を使うのもありだと思います。

*追記 (2017/08/10)
公式サーバーはバージョン 1.12 からファイルサイズが大きくなりました(10MB → 30MB に増加)。どのような変更があったのか詳細は分かりませんが、以前のバージョンよりも Raspberry Pi での安定性が向上しているように感じます。サーバーがクラッシュして再起動が必要になることが少なくなりました。

まとめ


Raspberry Pi をマインクラフトサーバーにする方法は大体こんな感じです。より安定させるには少し設定などを検討する必要がありそうですが、それなりに実用的なサーバーを作ることができました。

もちろん PC 上で動かしたサーバーの安定性には勝てませんが、ちょっとしたマイクラ専用のサーバーが欲しいなという場合は、省エネで場所も取らない Raspberry Pi を使ってサーバーを作ってみるのもいいと思います。

Linux の知識が多少ある人であれば、おそらく設定や運用はそれほど難しくありません。「そんなに詳しくないよ」という方でも、基本的なコマンドの使い方を少し勉強すれば、きっとなんとかなると思います、たぶん(^^;

興味のある方はぜひやってみてください。