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で良いのではないだろうか?
ディスカッション
コメント一覧
$ LD_LIBRARY_PATH=. ./bedrock_server
を実行すると、
-bash: ./bedrock_server: cannot execute binary file: Exec format error
というエラーが出ます。
マイクラの統合版サーバーはARMプロセッサアーキテクチャをサポートしていないようです
なので、ラズパイでは実行できないようです。