Raspberry PiでMinecraftサーバーをセットアップする方法

マインクラフトは、これまでに作られた中で最も人気のあるゲームの一つです。マルチプレイヤーゲームモードで友達と一緒に遊ぶことができます。Raspberry Pi 4がMinecraftのサーバーを動かすのに十分な性能を持っていることをご存知でしたか?この記事では、どのような異なるバリエーションが存在するのかという基本的な知識、Minecraftの歴史を少しだけ紹介し、Raspberry Piで自分のMinecraftサーバーをセットアップして運用する方法を紹介します。
マインクラフトサーバーの歴史
Minecraftサーバーについて語るには、Minecraftの2つの「大きな」フォークについて簡単に説明しなければなりません。
マインクラフトの生みの親であるMojang社は、もともとマインクラフトを Java.
余談ですが、Javaは移植性が高いと言われていますが("Write once and run anywhere")、このゲームはx86のネイティブライブラリに依存しています。つまり、Java版のMinecraftはRaspberry Piのような他のプラットフォームでは動かないということです。Raspberry PiはARMベースです(どのRaspberry Piを見るかによって、ARMv6 / ARMv7 / ARMv8)。
ラズパイベリーのジャワの説明
このJava Minecraftバージョンは、PC、Mac、Linux(x86)マシンで動作します。
そのため、Java版に対応したサーバーソフトもあります(選択肢の詳細は後述)。
ゼロから作られた第2のマインクラフトは、MCPE(Minecraft Pocket Edition)と呼ばれました。これはもともとAndroidで登場したもので、以下の言語で書かれていました。 C++.この版は、Windows 10、iOS、PlayStation 4、XBox、Nintendo Switchに移植されました。として知られるようになりました。 マインクラフトの岩盤版.(BedrockはC++で書かれたエンジンのこと)。現在は、クロスプラットフォームでのプレイを含むメインバージョンとなっています。
残念ながら、Bedrock版はJava版との互換性がありません。つまり、MacやLinuxのプレイヤーは、これを使ってクロスプラットフォームの遊びに参加することができないのです。
さらに重要なのは、独自のサーバーソフトウェアが必要なことですが、これについては以下で簡単に説明します。
Raspberry Pi OS 32bitへのSpigotのインストール
これでSpigotのインストールが完了します。ここでは、8GBのRaspberry Pi 4を使い、デフォルトの32ビットOSで始めます。
インストールの準備
ターミナルを開き、以下のコマンドを実行してください。
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
これにより、パッケージリストが更新され、git と OpenJDK 8 (Java Runtime Environment, JRE) がインストールされます。また、Spigotを構築するための新しいディレクトリを作成し、その中に変更します。
そして、最新の情報をダウンロードして SpigotMCウェブサイトのBuildTools.jar.を使用することができます。 wget のためのものです。
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
約4MBの迅速なダウンロードが可能です。
ビルド・スピゴット
それでは、ビルドを開始します。
java -jar BuildTools.jar
でビルドを開始しました。 13:00私のRaspberry Pi 4 8GBを使って、約1時間で終了しました。 13:15 - で、約1時間15分かかりました。以下は、最初に表示される出力のスクリーンショットです。

ビルドプロセスでは、Raspberry Piのマルチコアを使用します。

そして、最後にご覧いただく画面がこちら。

ビルドが終了すると、完成したSpigotサーバの.jarファイルがどこに保存されたかがわかります。私の場合(spigot-1.16.4.jarをビルドしているので)、それは次の通りです。
/home/pi/spigot-build/./spigot-1.16.4.jar
残りのファイルはもう必要ありません。必要なのは最後のspigot-*.jarだけです。
新しいMinecraftサーバーをインストールする
Minecraft サーバーを /opt ディレクトリ階層にインストールすることをお勧めします。次のステップでそうして、.jar ファイルを次のようにリネームしましょう。 spigot.jar:
sudo mkdir /opt/spigot
sudo mv /home/pi/spigot-build/spigot-*.jar /opt/spigot/spigot.jar
sudo chown -R pi:pi /opt/spigot
最後のコマンドは、このディレクトリの所有者をユーザpiに変更します。これにより、新しいユーザを作成しなくても、必要な権限で簡単に始めることができるようになります。複数の人が使用するシステムでは、セキュリティや権限の管理を強化するために、独自のシステム・ユーザーを作成して、そのユーザーの下でspigotを実行することができます。
セキュリティ情報
これで、新しいMinecraftサーバーを起動して、2GBのRAMを割り当てられるようになりました。
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
32bit Raspberry PiのOSでspigotに2700M以上を割り当てると、サーバーが起動しなくなることがありました。
[47.195s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Server thread/ERROR]:予期しない例外が発生しました。
java.lang.OutOfMemoryError: ネイティブ・スレッドの作成ができない:メモリ不足、またはプロセス/リソースの制限に達した可能性がある。
at java.lang.Thread.start0(Native Method) ~[?:?]
at java.lang.Thread.start(Thread.java:803) ~[?:?]
at java.util.Timer.(Timer.java:177) ~[?:?]
at org.spigotmc.Metrics.start(Metrics.java:217) ~[spigot.jar:git-Spigot-a19903d-167ff59]を参照してください。
at org.spigotmc.SpigotConfig.registerCommands(SpigotConfig.java:91) ~[spigot.jar:git-Spigot-a19903d-167ff59]を参照してください。
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:149) ~[spigot.jar:git-Spigot-a19903d-167ff59]となっています。
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:809) ~[spigot.jar:git-Spigot-a19903d-167ff59].
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot.jar:git-Spigot-a19903d-167ff59]となります。
at java.lang.Thread.run(Thread.java:834) [?:?]
[07:57:48] [サーバーのスレッド/ERROR]:このクラッシュレポートは次の場所に保存されています。/opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [サーバスレッド/INFO]:サーバーを停止します。
[07:57:48] [サーバスレッド/INFO]:プレイヤーの保存
[07:57:49] [サーバスレッド/INFO]:ワールドの保存以下の通りです(エラー処理/メモリ不足)。 サーバーの起動に問題がなくても、メモリ不足のエラーでクラッシュすることがあります。そのために、私たちは安全性を重視しています。 最大2GB にしました。64ビットのOSでは、この値が高くなるので、Raspberry Pi 4 / 8 GBのRAMをより多く使うことができます。
32ビットのRaspberry Pi OSにおけるSpigotのメモリ制限について
これで、Spigotは2つの新しいファイル(eula.txt & server.properties)とディレクトリ(ログ).最初の実行時にエラーが表示されますが、これはEULAがまだ受け入れられていないためです。
ライブラリをロードしています、お待ちください...
[15:01:09] [main/ERROR]:ファイル(server.properties)からのプロパティの読み込みに失敗しました。
[15:01:09] [main/WARN]:eula.txtの読み込みに失敗しました。
[15:01:09] [main/INFO]:サーバーを実行するには、EULAに同意する必要があります。詳細はeula.txtをご覧ください。
eula.txtを見てみると、以下のようになっています。
#B以下の設定をTRUEに変更することで、あなたは当社のEULA(使用許諾契約書)に同意したことになります。https://account.mojang.com/documents/minecraft_eula).
#SSun Nov 22 15:01:09 CET 2020
eula=false
ぜひ、Mojang社のウェブサイトにアクセスして EULAを読む (end user license agreement)を、実際に受け入れる前に。
受け入れ方はこうだ。実行
nano /opt/spigot/eula.txt
そして、最後の行を次のように編集します。
eula=true
Ctrl + O(そしてEnter)で保存し、Ctrl + Xで終了します。
コマンドラインからのSpigotの起動
ここでもう一度、サーバーを起動するコマンドを実行してみてください。
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Spigot Minecraft サーバーが起動し、初期化されます。

この間、CPU負荷は全コアで100 %近くになります。

スタート時には、いくつかの有用な情報が表示されます(ここから抜粋)。
[15:09:05] [サーバスレッド/INFO]:マインクラフト・サーバー・バージョン1.16.4の起動
[15:09:06] [サーバーのスレッド/INFO]:デフォルトのゲームタイプ。サバイバル
[15:09:09] [サーバスレッド/INFO]:Minecraft サーバーを *:25565 で開始します。
上で引用した最後の行は、Minecraft サーバーが Raspberry Pi 上のすべての IP アドレスにバインドされていることを示しています。 ポート25565 これらのIPアドレスに
このスタートアップは 190.812 s (私のRaspbery Pi 4 / 8GBの純正品では約3分)。終了すると、プロンプトが表示されます。

スピゴット・サーバーとの対話
タイプ
help
このプロンプトで(なしで をクリックすると、可能なコマンドのリストが表示されます。

例えば、次のようなコマンドで リストをクリックすると、オンラインになっているプレイヤーの数が表示されます。

コマンドの使用 バージョンをクリックすると、現在のサーバのバージョンと、より新しいサーバが利用可能かどうかを確認できます。なお、サーバーを更新するには、spigot.jarを再構築する必要があります。

追いつけない!サーバーが過負荷?警告の背後にあるランニング
ほとんどの場合、次のような出力が表示されます。
[08:06:11] [サーバスレッド/WARN]:追いつかない!?サーバーに負荷がかかっているのでしょうか?8444ms または 168 ticks 遅れています。
Raspberry Pi MinecraftサーバーのIPアドレスを調べる
あなたのRaspberry PiのIPアドレスがわからない場合は、単純に入力することで見つけることができます。
ip -4 addr show
これにより、以下のような出力が表示されます。

Raspberry PiのLANであるeth0エントリ(私の場合は2)を探します。IPアドレスは、inetの後、スラッシュの前のビットです。私の場合は 192.168.1.235 :

Minecraftサーバーへの接続
あなたは(もちろん🙂)Minecraftが必要です。 マインクラフト公式サイト.前述の通り、MinecraftのJavaバージョンが必要です。
まだMinecraftをお持ちでない方で、購入する必要がある場合は、Mojangアカウントを設定する必要があります。購入すると、Windows、macOS、Linux、Arch Linux、Debian用のダウンロードリンクを含む領収書がメールで送られてきます(前述の通り、これらはx86システムでなければならないことに注意してください!)。
Windowsの場合は、例えばMinecraftInstaller.msiを入手します。

Minecraftを起動すると、ログイン画面が表示されます。

ログインすると概要画面が表示され、再生ボタンが表示されます。

ダウンロードが完了すると、ゲームのメイン画面が表示されます。

ここで「マルチプレイ」をクリックします。サードパーティ製のオンラインプレイに関する警告が表示されます。 進む ここで(オプション:ボックスにチェックを入れることもできます この画面を二度と見せない).

これで、Windows(Windowsでプレイしている場合)のセキュリティプロンプトが表示されます。

Allow access here」(ドイツ語で「Zugriff zulassen」)をクリックします。
以下の画面が表示されます。

すぐに始められるように、「Direct Connection」をクリックし、ここにサーバーのIPアドレスを入力します(IPアドレスの調べ方は上記を参照)。

Minecraft は次のセッションのために IP アドレスを記憶し、自動的に提案します。
Join Server」をクリックします。接続され、短いロード画面が表示されます。
ip -4 addr show
最後に、「ゲームメニュー」が表示されます。

Back to Game」をクリックすると、新しいMinecraftサーバーでのプレイが始まります。

プレイ中にF3を押すと、情報のオーバーレイが表示され、本当にSpigotサーバーに接続されているかどうかや、Minecraftのバージョンを確認することができます。


Raspberry PiのMinecraftサーバーでの出力
接続が完了すると、Minecraftサーバーにいくつかの追加出力があります。
[15:53:32] [User Authenticator #1/INFO]:プレイヤーbuyzeroのUUIDはe76a3199-3ed0-4064-8086-d9f565235f71です。
[15:53:33] [サーバーのスレッド/INFO]: buyzero[/192.168.1.202:51388] log in with entity id 435 at ([world]25.5, 64.0, 137.5)
コマンドは リスト と表示され、1人のユーザーがログインしていることがわかります。
[15:57:05] [サーバスレッド/INFO]:最大20人のプレイヤーのうち1人がオンラインになっています:Buyzero
また、自分の選手に関わるイベントも表示されます。
[16:04:24] [サーバーのスレッド/INFO]: buyzeroはゾンビに殺されました。
コマンドの使用 op buyzero の場合、ユーザーbuyzeroをサーバー運用者にすることができます(ユーザー名は適切に置き換えてください)。
op buyzero [08:09:18] [サーバスレッド/INFO]:buyzeroをサーバー運用者に
噴出した水を止めるMinecraftサーバー
あなたのMinecraftサーバーのプロンプトにいる場合、次のように入力します。 ストップ と入力し、Enterキーを押します。これで、サーバーが停止し、世界が保存されて、コマンドラインプロンプトに戻ります。
ストップ
[08:36:57] [サーバスレッド/INFO]:サーバーを停止します。
[08:36:57] [サーバスレッド/INFO]:サーバーを停止します。
[08:36:57] [サーバスレッド/INFO]:プレイヤーの保存
[08:36:57] [Server thread/INFO]: buyzero lost connection:サーバー終了
[08:36:57] [サーバーのスレッド/INFO]: buyzeroがゲームを終了しました。
[08:36:57] [サーバスレッド/INFO]:ワールドの保存
[08:36:57] [サーバーのスレッド/INFO]:レベル「ServerLevel[world]'/minecraft:overworld」のチャンクを保存しています。
[08:37:02] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (world) です。すべてのチャンクが保存されました
[08:37:02] [サーバスレッド/INFO]:レベル'ServerLevel[world_nether]'/minecraft:the_nether用のチャンクを保存しています。
[08:37:05] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (DIM-1) です。すべてのチャンクが保存されました
[08:37:05] [サーバーのスレッド/INFO]:レベル「ServerLevel[world_the_end]'/minecraft:the_end」のチャンクを保存しています。
[08:37:10] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (DIM1) です。すべてのチャンクが保存されました
[08:37:10] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (world) です。すべてのチャンクが保存されました
[08:37:10] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (DIM-1) です。すべてのチャンクが保存されました
[08:37:10] [サーバスレッド/INFO]:ThreadedAnvilChunkStorage (DIM1) です。すべてのチャンクが保存されました
ユーザーには以下の画面が表示されます。

systemdサービスの作成
https://github.com/sindastra/systemd-minecraft
エラー処理
メモリ不足

上のスクリーンショットは、あなたのサーバーに接続しているプレーヤーが見るエラーメッセージを示しており、サーバー側では、以下のようなログ出力が見られます。
Java Runtime Environmentを続行するためのメモリが不足しています。
ネイティブメモリの割り当て(malloc)で、Chunk::newへの1438248バイトの割り当てに失敗しました。
より詳細な情報を含むエラーレポートファイルは以下のように保存されます。
/opt/spigot/hs_err_pid1531.log
コンパイラのリプレイデータは以下のように保存されます。
/opt/spigot/replay_pid1531.log
このような場合は、メモリの設定を調整する必要があります。のとおりです。 この記事のおすすめポイントの場合、Raspberry Pi で利用可能なシステムメモリよりも 1000 MB から 1500 MB 低いはずです。32bit OS の場合、プロセスは合計で 4GB 弱の RAM しか扱えないことを考慮して、32bit Raspberry Pi であっても、Minecraft サーバーに与える合計量は 2500MB ~ 2000MB 未満にして安全側にしましょう (2GB)。
結論
このガイドに従えば、Raspberry PiのMinecraftサーバーを運営し、友達と一緒に遊ぶことができるようになります。
参考文献・参考資料
- マインクラフトサーバーの歴史(主にBukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (Minecraft Java Edition サーバーコミュニティ)
- スピゴット インストールガイド (Spigotmc.org)
[Raspberry Piをウェブサーバー、ファイルサーバー、プリントサーバー、メディアサーバー、マインクラフトサーバー、IoT [...] として使うことができます。]