rasberry pi 4に統合版(bedrock) minecraftサーバーを作る方法

はじめに

raspberry pi 4で統合版のサーバーを作る場合は非公式サーバーがおすすめです!

公式サーバーは重すぎて使い物になりません!

raspberry pi で実用的なサーバーを立てたいことが目的な方は目次から非公式サーバーに飛んでください。

公式サーバー

環境設定

下記のコマンドを実行し、公式版サーバーの実行環境を用意します。

wget https://raw.githubusercontent.com/penM000/qemu-binfmt-setup/main/qemu-binfmt-setup.sh
chmod +x ./qemu-binfmt-setup.sh
./qemu-binfmt-setup.sh
rm ./qemu-binfmt-setup.sh
wget http://ftp.jp.debian.org/debian/pool/main/q/qemu/qemu-user-static_6.0+dfsg-2exp_arm64.deb
sudo dpkg -i qemu-user-static_6.0+dfsg-2exp_arm64.deb
rm qemu-user-static_6.0+dfsg-2exp_arm64.deb
sudo dpkg --add-architecture amd64
sudo apt update
sudo apt install libc6:amd64 zlib1g:amd64 libstdc++6:amd64 -y
wget http://ftp.jp.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1d-0+deb10u6_amd64.deb
dpkg-deb -x libssl1.1_1.1.1d-0+deb10u6_amd64.deb temp
rm libssl1.1_1.1.1d-0+deb10u6_amd64.deb
sudo mv ./temp/usr/lib/x86_64-linux-gnu/* /usr/lib/x86_64-linux-gnu/
rm -r temp

統合版minecraftサーバーのダウンロード

Bedrock サーバー ダウンロードページからダウンロードリンクをコピーします。

コピーしたダウンロードリンクを元に下記のように展開します。

pi@raspberrypi:~ $ mkdir minecraft
pi@raspberrypi:~ $ cd minecraft
pi@raspberrypi:~ $ curl -L -o server.zip https://minecraft.azureedge.net/bin-linux/bedrock-server-1.17.10.04.zip
pi@raspberrypi:~/minecraft $ unzip server.zip
pi@raspberrypi:~/minecraft $ ls -la
合計 250212
drwxr-xr-x  6 pi pi      4096  8月  2 13:37 .
drwxr-xr-x 17 pi pi      4096  8月  2 13:37 ..
-rwxrwxr-x  1 pi pi  78024344  6月 22 09:12 bedrock_server
-rw-rw-r--  1 pi pi     23109  6月 22 09:01 bedrock_server_how_to.html
-rwxrwxr-x  1 pi pi 118101680  6月 22 09:12 bedrock_server_symbols.debug
drwxrwxr-x 17 pi pi      4096  6月 22 09:12 behavior_packs
drwxrwxr-x  9 pi pi      4096  6月 22 09:12 definitions
-rw-rw-r--  1 pi pi         3  6月 22 09:01 permissions.json
-rw-rw-r--  1 pi pi       580  6月 22 09:01 release-notes.txt
drwxrwxr-x  4 pi pi      4096  6月 22 09:12 resource_packs
-rw-rw-r--  1 pi pi      4873  6月 22 09:01 server.properties
-rw-r--r--  1 pi pi  60012827  8月  2 13:37 server.zip
drwxrwxr-x 14 pi pi      4096  6月 22 09:12 structures
-rw-rw-r--  1 pi pi         3  6月 22 09:01 whitelist.json

サーバーを開始するには下記のコマンドを実行します。

pi@raspberrypi:~/minecraft $ LD_LIBRARY_PATH=. ./bedrock_server
NO LOG FILE! - setting up server logging...
[2021-08-02 15:32:20 INFO] Starting Server
[2021-08-02 15:32:20 INFO] Version 1.17.10.04
[2021-08-02 15:32:20 INFO] Session ID bc62787a-2661-4166-a424-788e677b8088
[2021-08-02 15:32:20 INFO] Level Name: Bedrock level
[2021-08-02 15:32:20 INFO] Game mode: 0 Survival
[2021-08-02 15:32:20 INFO] Difficulty: 1 EASY
[INFO] opening worlds/Bedrock level/db
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=34
[INFO] IPv4 supported, port: 19132
[INFO] IPv6 supported, port: 19133
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unknown host QEMU_IFLA type: 50
Unknown host QEMU_IFLA type: 51
Unknown host QEMU_IFLA type: 54
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=20
Unsupported setsockopt level=41 optname=34
[INFO] IPv4 supported, port: 58319
[INFO] IPv6 supported, port: 36653
[INFO] Server started.

Server startedと表示されたらサーバーに参加することができます。

raspberry pi のipアドレスを入力し接続を行います。

サーバー実行中の負荷

サーバー実行中の負荷は下記のようになっています。

全体的に負荷が高く複数人でプレイするには向きません。

今後公式がarm版のバイナリを公開してくれることを期待します。

新規ワールド作成時

top - 14:22:38 up  4:30,  4 users,  load average: 1.96, 0.65, 0.26
Tasks: 171 total,   1 running, 170 sleeping,   0 stopped,   0 zombie
%Cpu(s): 88.0 us,  0.4 sy,  0.0 ni, 11.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7813.0 total,   5787.4 free,    449.3 used,   1576.4 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.   7209.1 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                          
 4290 pi        20   0 2270060 284004  62316 S 353.8   3.5   3:42.90 bedrock_server                                                                                   
 4338 pi        20   0    7356   3336   2628 R   0.3   0.0   0:00.35 top                                                                                              
    1 root      20   0  166396   9624   6932 S   0.0   0.1   0:05.90 systemd                                                                                          
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd 

ゲームプレイ中

top - 14:28:42 up  4:36,  4 users,  load average: 3.06, 2.50, 1.26
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s): 97.7 us,  0.6 sy,  0.0 ni,  1.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7813.0 total,   5752.9 free,    479.9 used,   1580.2 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.   7178.5 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                          
 4290 pi        20   0 2270060 314872  62572 S 392.7   3.9  23:57.39 bedrock_server                                                                                   
 4338 pi        20   0    7356   3336   2628 R   0.3   0.0   0:01.85 top                                                                                              
    1 root      20   0  166396   9624   6932 S   0.0   0.1   0:05.90 systemd                                                                                          
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd

非公式サーバー

公式サーバーではx86版(intel/amd)しかなくraspberry pi では動作はするがかなり負荷が高い状況であることがわかりました。

そこで、非公式のJAVAで動作するサーバーを試します。

今回は更新がされている「CloudburstMC/Nukkit」を利用します。

環境設定

javaの実行環境が必要なので下記のコマンドを実行してください。

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt install openjdk-11-jre -y

Nukkitのビルド

非公式サーバーのプログラムを作成します。

下記のコマンドを実行します。

しばらく時間がかかります。

pi@raspberrypi:~ $ git clone https://github.com/CloudburstMC/Nukkit
pi@raspberrypi:~ $ cd Nukkit
pi@raspberrypi:~/Nukkit $ git submodule update --init
pi@raspberrypi:~/Nukkit $ chmod +x mvnw
pi@raspberrypi:~/Nukkit $ ./mvnw clean package

正常に終了すると下記のように「BUILD SUCCESS」と表示されます。

[INFO] Dependency-reduced POM written at: /home/pi/Nukkit/dependency-reduced-pom.xml
[INFO] Dependency-reduced POM written at: /home/pi/Nukkit/dependency-reduced-pom.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  05:44 min
[INFO] Finished at: 2021-08-02T15:48:18+09:00
[INFO] ------------------------------------------------------------------------

Nukkitの起動

先程作成したNukkitをminecraftにコピーします。

pi@raspberrypi:~/Nukkit $ mkdir -p ~/minecraft
pi@raspberrypi:~/Nukkit $ cp target/nukkit-1.0-SNAPSHOT.jar ~/minecraft/
pi@raspberrypi:~/Nukkit $ cd ~/minecraft/

下記のコマンドでNukkitを起動します。初回起動時に言語を聞かれるので「jpn」と入力しEnterを押してください。

pi@raspberrypi:~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
pi@raspberrypi:~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
15:53:46 [INFO ] Welcome! Please choose a language first!
15:53:46 [INFO ] eng => English
15:53:46 [INFO ] chs => 中文(简体)
15:53:46 [INFO ] cht => 中文(繁體)
15:53:46 [INFO ] jpn => 日本語
15:53:46 [INFO ] rus => Pyccĸий
15:53:46 [INFO ] spa => Español
15:53:46 [INFO ] pol => Polish
15:53:46 [INFO ] bra => Português-Brasil
15:53:46 [INFO ] kor => 한국어
15:53:46 [INFO ] ukr => Українська
15:53:46 [INFO ] deu => Deutsch
15:53:46 [INFO ] ltu => Lietuviškai
15:53:46 [INFO ] idn => Indonesia
15:53:46 [INFO ] cze => Czech
15:53:46 [INFO ] tur => Turkish
15:53:46 [INFO ] fin => Suomi
> jpn
15:55:05 [INFO ] Loading nukkit.yml ...
15:55:05 [INFO ] Loading server.properties ...
15:55:05 [INFO ] 日本語 (jpn) を言語に選択しました
15:55:05 [INFO ] Minecraft: BEサーバー(v1.17.10に対応)を起動しています
15:55:05 [INFO ] Selected Zlib Provider: 2 (cn.nukkit.utils.ZlibThreadLocal)
15:55:05 [INFO ] 0.0.0.0:19132上でサーバーを開始しています
15:55:05 [INFO ] このサーバーはNukkitのバージョンgit-35ef92e「」(API 1.0.13)で動作しています
15:55:05 [INFO ] NukkitはLGPLライセンスに基づき配布されています
15:55:06 [INFO ] Loading runtime items...
15:55:08 [INFO ] Loading recipes...
15:55:09 [INFO ] Loaded 1509 recipes.
15:55:09 [INFO ] Successfully loaded 0 resource packs
15:55:10 [WARN ] ワールド "world" が見つかりません
15:55:10 [INFO ] ワールド "world" を読み込んでいます
15:55:10 [INFO ] Preparing start region for level "world"
15:55:10 [WARN ] ワールド "nether" が見つかりません
15:55:10 [INFO ] No level called "nether" found, creating default nether level.
15:55:10 [INFO ] ワールド "nether" を読み込んでいます
15:55:10 [INFO ] Preparing start region for level "nether"
15:55:10 [INFO ] GS4ステータス リスナーを開始
15:55:10 [INFO ] クエリポートを設定: 19132
15:55:10 [INFO ] クエリーは 0.0.0.0:19132 で動作しています
15:55:10 [INFO ] デフォルトゲームタイプ: サバイバルモード
15:55:10 [INFO ] 起動完了(83.834秒)! "help"または"?"でヘルプを表示

ゲームプレイ中の負荷

ワールド生成・ゲームプレイ中とともにかなり負荷が低いことがわかります。

何もしていないときではCPU使用室は20%です!(4コアなので最大400%)

メモリ使用量も800MB程度なので、2GBモデルでも動作しそうです。

top - 15:57:59 up  6:05,  4 users,  load average: 0.78, 0.55, 0.51
Tasks: 169 total,   1 running, 168 sleeping,   0 stopped,   0 zombie
%Cpu(s): 16.5 us,  1.0 sy,  0.0 ni, 82.5 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7813.0 total,   5546.5 free,    628.0 used,   1638.5 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.   7030.4 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                          
 7085 pi        20   0 7998816 432668  18180 S  69.2   5.4   1:41.53 java                                                                                             
 6820 pi        20   0    7248   3360   2664 R   0.7   0.0   0:06.29 top                                                                                              
    1 root      20   0  166396   9624   6932 S   0.0   0.1   0:05.99 systemd                                                                                          
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.06 kthreadd    

まとめ

公式サーバーと非公式サーバーをraspberry pi4で動作させましたが、圧倒的に非公式サーバーの方がおすすめです。

4人程度のマルチプレイでは問題なくプレイできると思います。

今後公式がarm版のプログラムを公開すれば話が変わってきますが、それまでは非公式サーバーの方が良いでしょう。

というか、全てにおいてnukkitで良いのではないだろうか?