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のプレイヤーは、これを使ってクロスプラットフォームの遊びに参加することができないのです。

さらに重要なのは、独自のサーバーソフトウェアが必要なことですが、これについては以下で簡単に説明します。

[TBD: infographic] [TBD: infographic

[TBD: 異なるエディションのMinecraftサーバーの概要】。]

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分かかりました。以下は、最初に表示される出力のスクリーンショットです。

Spigot端子の出力を作り始める

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

Spigotビルドプロセスのhtop出力

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

Spigotのビルドが完了し、spigot-1.16.4.jarの準備が整いました。

ビルドが終了すると、完成したSpigotサーバの.jarファイルがどこに保存されたかがわかります。私の場合(spigot-1.16.4.jarをビルドしているので)、それは次の通りです。

/home/pi/spigot-build/./spigot-1.16.4.jar

残りのファイルはもう必要ありません。必要なのは最後のspigot-*.jarだけです。

新しいマインクラフトサーバーのインストール

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サーバーが起動し、初期化されます。

EULAに同意した後、Spigotが正常に起動する。

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

Spigotの初期化時のシステム負荷を示すhtop

スタート時には、いくつかの有用な情報が表示されます(ここから抜粋)。

[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分)。終了すると、プロンプトが表示されます。

サーバーとの対話に使用するプロンプト

スピゴットサーバーとのやりとり

タイプ

ヘルプ

このプロンプトで(なしで をクリックすると、可能なコマンドのリストが表示されます。

サーバーを操作するためのコマンドの一覧が表示されます。

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

リストには、最大20人のオンラインプレーヤーが存在しないことが示されています。

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

バージョンの出力です。このサーバーでは、CraftBukkitのバージョン git-Spigot-a19903d-167ff59 (MC: 1.16.4) (Implementing API version 1.16.4-R0.1-SNAPSHOT)が動作しています。最新のバージョンを実行している

追いつかない!?サーバーに負荷がかかっている?ワーニングが遅れている

ほとんどの場合、次のような出力が表示されます。

[08:06:11] [サーバスレッド/WARN]:追いつかない!?サーバーに負荷がかかっているのでしょうか?8444ms または 168 ticks 遅れています。

[TBD]

Raspberry Pi MinecraftサーバーのIPアドレスを調べる

あなたのRaspberry PiのIPアドレスがわからない場合は、単純に入力することで見つけることができます。

ip -4 addr show

これにより、以下のような出力が表示されます。

Raspberry Piでのip -4 addr show出力

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

IPアドレスを確認できる重要な部分

Minecraftサーバーへの接続

あなたは(もちろん🙂)Minecraftが必要です。 マインクラフト公式サイト.前述の通り、MinecraftのJavaバージョンが必要です。

Minecraft Java Editionをクリックします。

まだMinecraftをお持ちでない方で、購入する必要がある場合は、Mojangアカウントを設定する必要があります。購入すると、Windows、macOS、Linux、Arch Linux、Debian用のダウンロードリンクを含む領収書がメールで送られてきます(前述の通り、これらはx86システムでなければならないことに注意してください!)。

Windowsの場合は、例えばMinecraftInstaller.msiを入手します。

Minecraft Launcher セットアップウィザード

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

Minecraftのログイン画面

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

再生」をクリックすると、Minecraftはまず最新のリリース(私の場合は1.16.4)をダウンロードします。

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

ゲームのメイン画面では、シングルプレイ、マルチプレイ、Minecraft Realmsのいずれかを選択できます。

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

注意サードパーティのオンラインプレイ

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

Windowsファイアウォールのセキュリティプロンプト

Allow access here」(ドイツ語で「Zugriff zulassen」)をクリックします。

以下の画面が表示されます。

ローカルネットワーク上のゲームをスキャンする「Play Multiplayer

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

ダイレクト接続で、サーバーアドレスを入力し、サーバーに参加する機能を持つ

Minecraft は次のセッションのために IP アドレスを記憶し、自動的に提案します。

Join Server」をクリックします。接続され、短いロード画面が表示されます。

MinecraftがスピゴットのMinecraftサーバーに接続する

最後に、「ゲームメニュー」が表示されます。

ゲームメニュー

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

自分のRaspberry PiのMinecraftサーバーでMinecraftのマルチプレイができます。

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

F3を押すと、Minecraftの統計情報やデバッグ情報のオーバーレイが表示されます(F11を押すと全画面表示になります)。
サバイバルモードでしばらくゲームを放置していると、おそらく死んでしまいます。"buyzero was slain by Zombie "と表示され、Respawnするかタイトル画面に行くかの選択肢が表示されます。

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サービスの作成

TBD https://github.com/sindastra/systemd-minecraft

エラー処理

メモリ不足

Connection Lost, Internal Exception: java.io.IOException:Eine vorhandene Verbindung wurde vom Remotehost geschlossen(リモートホストが既存の接続を閉じた)

上のスクリーンショットは、あなたのサーバーに接続しているプレーヤーが見るエラーメッセージを示しており、サーバー側では、以下のようなログ出力が見られます。

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サーバーを運営し、友達と一緒に遊ぶことができるようになります。

参考文献・参考資料

"Minecraft "はMojang Synergies ABの商標です。
本サイトはMinecraftとは関係ありません

コメントを残す