7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PocketMine-MPがraspberry piで動かないので、コンパイルしてみた

Posted at

初めに

子供が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のホームにある前提で書いてあります。パスは適宜自分の環境に直してください。

[pmmp.service]
[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サーバは、動かしてみると地形の生成など追いつかないところがありますが、常時動かしていても電気代が気にならないところが魅力です。ぜひ試してみてください。ただ、とりあえず動作する条件を出してみたというところなので、もし他に動作する条件等わかりましたら、お知らせください。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?