初めに
子供がJava版マインクラフトからマインクラフトBEに乗り換えてしばらく経ち、サーバを立ち上げてほしいと言ってきました。BE向けのサーバはPocketMine-MPというオープンソースなのですが、Raspberry Pi 4で動かすのに少々手間がかかったので、メモを作りました。
経緯
まず、PocketMine-MP公式ではLinuxがサポートされているといっております。そのなかのインストールページに従ってやっても、スクリプトが途中終了して動作しません。(curlもwgetも同じ結果。あたりまえですが・・・)動いたとのページも引っ掛かりますが、その状態からは何もできません。ちなみにPC-Linuxからはさくっと動きます。これは64bit linuxといえどもarmは対応していないとの結論に至りました。
次にラズパイ3で、MinecraftPEサーバ(arm64版Ubuntu 18.04 + DockerでPocketMine-MPを動かす)というページに行き当たり、dockerをインストールして、やってみました。すると見事起動しました。しかし、以下のようなメッセージがでて、マインクラフトBEからはログインできません。どうやらバージョンがobsoleteのようです。
[06:22:03] [Server thread/WARNING]: ----- PocketMine-MP Auto Updater -----
[06:22:03] [Server thread/WARNING]: Your version of PocketMine-MP is out of date. Version 3.12.0 was released on Fri Apr 17 05:46:48 2020
[06:22:03] [Server thread/WARNING]: Details: https://jenkins.pmmp.io/job/PocketMine-MP/1793/
[06:22:03] [Server thread/WARNING]: Download: https://jenkins.pmmp.io/job/PocketMine-MP/1793//artifact/PocketMine-MP.phar
[06:22:03] [Server thread/WARNING]: ----- -------------------------- -----
[06:26:57] [Server thread/INFO]: [/192.168.XX.XX:56079] が 互換性のないプロトコ ルバージョンです(390) によってログアウトされました
でも、PocketMine-MPが動作していた前歴があるということと、動作したイメージがつかめたので、自分でコンパイルできないかと調べるとgitにソース(?)があったので、なんとか動かしたという次第です。
前提システム
- Raspberry Pi 4 4GBモデル (rpi 3でも動作確認済)
- SDカード 32GB (16GBでもいいですが、OSに余裕持たせた)
- ubuntu server 20.04 64bit (18.04でも動作確認)
- 有線LAN (セットアップしていれば無線でもOKかと)
インストール
まず、前提となるのは、64bit linuxであることです。今のところ、64bitカーネルはubuntuとarch linux(rpi3のみ)しかありません。raspbianやarch linux(rpi4)は4GB RAMをサポートしていますが、カーネルは32bitのようです。PocketMine-MPは64bit前提なので、rpi4ではubuntu一択となっております。(2020/5/1現在)
まずは準備体操。
$ sudo apt update
$ sudo apt upgrade
以下のモジュールをインストールします。
$ sudo apt install git cmake pkg-config autoconf automake m4 bison libtool libtool-bin
gitから環境をクローンします。
$ git clone --recursive https://github.com/pmmp/PocketMine-MP.git
コンパイルするディレクトリに移って、以下のオプションでコンパイルします。少々時間がかかります。20分くらい。ちなみに-sオプションは本来必要ないと思われるのですが、オプションが無いとコンパイル済のlibzipライブラリが無いと言われ落ちます。直接の解決方法はわかりませんでした。rpi3で行う場合は、-j4ではなく-j2の方が安全かもしれません。
$ cd PocketMine-MP/build/php/
$ ./compile.sh -t aarch64 -l -s -j4
コンパイルが成功すると、最後に以下のメッセージが出ます。
[PHP] checking... compiling... installing... generating php.ini... done!
[INFO] Cleaning up... done!
[PocketMine] You should start the server now using "./start.sh".
[PocketMine] If it doesn't work, please send the "install.log" file to the Bug Tracker.
次に自分のcomposerを作ります。(ここは本当に必要か不明)
$ curl -sS https://getcomposer.org/installer | ./bin/php7/bin/php
$ composer.pharを実行
$ ./composer.phar install
インストーラを動かします。-uをつけないと、コンパイルした結果が上書きされます。必ずつけてください。
$ ./installer.sh -c -u
実行結果が以下のようになればOKです。特に最後のeverything done!が無ければ、インストールは失敗しています。
[*] Retrieving latest build data for channel "stable"
[*] Found PocketMine-MP 3.12.0 (build 1793) for Minecraft: PE v1.14.60 (PHP 7.3)
[*] This stable build was released on Sat Apr 18 02:46:48 JST 2020
[-] This channel should have a signature, none found
[*] Installing/updating PocketMine-MP on directory ./
[1/3] Cleaning...
[2/3] Downloading PocketMine-MP phar... done!
[3/3] Skipping PHP recompilation due to user request
[*] Everything done! Run ./start.sh to start PocketMine-MP
これで実行可能となりました。
以下で起動してください。
$ ./start.sh
初回起動時はいろいろ聞かれます。最初はjpnを選択して、ライセンスにはyを選択して、あとは自分の好みでカスタマイズしてください。それが終わると以下のようなログが出力されます。マインクラフトBEからサーバが見えるようになっているはずです。
終了はctrl-Cです。
[01:51:42] [Server thread/INFO]: Loading resource packs...
[01:51:42] [Server thread/INFO]: ワールド「world」を準備しています
[01:51:42] [Server thread/INFO]: GS4 ステータスリスナーを開始しています
[01:51:42] [Server thread/INFO]: Query ポートを 19132 に設定しています
[01:51:42] [Server thread/INFO]: Query は 0.0.0.0:19132 で動作しています
[01:51:42] [Server thread/INFO]: デフォルトのゲームタイプ:サバイバルモード
[01:51:42] [Server thread/INFO]: If you find this project useful, please consider donating to support development: https://patreon.com/pocketminemp
[01:51:42] [Server thread/INFO]: 完了(2.624 秒)!ヘルプについては「help」また は「?」を入力してください
ついでなので、サービス化して常駐します。
pmmp.serviceを作成します。ここでは、ユーザ名:pi、PocketMine-MPディレクトリは、piのホームにある前提で書いてあります。パスは適宜自分の環境に直してください。
[Unit]
Description=PocketMine-MP_server
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=/home/pi/pocketmine/PocketMine-MP/build/php/start.sh
Restart=on-failure
RestartSec=10
KillMode=process
WorkingDirectory=/home/pi/pocketmine/PocketMine-MP/build/php
[Install]
WantedBy=multi-user.target
以下を実行します。
$ sudo cp pmmp.service /etc/systemd/system/
$ sudo systemctl start pmmp
$ sudo systemctl status pmmp
$ sudo systemctl enable pmmp
statusのところで、サービスがactiveになっていることを確認してください。
最後に
raspberry piでのMinecraftBEサーバは、動かしてみると地形の生成など追いつかないところがありますが、常時動かしていても電気代が気にならないところが魅力です。ぜひ試してみてください。ただ、とりあえず動作する条件を出してみたというところなので、もし他に動作する条件等わかりましたら、お知らせください。