3
2

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.

らずぱい3で、MinecraftPEサーバ + Wifi-AP

Last updated at Posted at 2017-06-02

MinecraftPE-v1.1.0.PNG

# pmmp.ioのコードをgit cloneして使ってるので、うまいpharがでたら、記事をちょいと直します。

概要

  • Raspberry Pi 3に

    • Pocketmine-MPベースのMCPEサーバソフトを入れ、
    • 無線アクセスポイントにしてしまう
      => 直接、ラズパイにつなぐ
  • 無線アクセスポイントにするのに、pi-holeを使って、dhcpサーバをさせる
    => 広告除去付 Wifi-APになる!

  • もしかして、バッテリー駆動させれば、モバイルMCPE鯖になる???(未確認) ... ちゃんとシャットダウン処理しないと、データおかしくなるよな。

  • サイト

    • PMMP - Server software for Minecraft Pocket Edition written in PHP
    • BlueLightはMinecraft: Pocket Editionサーバーソフトウェアです
  • pmmp.ioは、最新のもの(1.6.2dev-110)で Minecraft: PE server version v1.1.0.55となったが、エラー([Server thread/CRITICAL]: InvalidArgumentException: "Inventory slot index "255" is out of range" (EXCEPTION) in "/src/pocketmine/inventory/PlayerInventory" at line 117)でログインできなかったりして、

  • BlueLight (v1.0.9)をインストールが、こっちもだめ、、

  • pmmp.ioのgithubのコードが修正されたので、これを使用する。

環境

  • サーバ
    • Raspberry Pi 3
    • Raspbian : 2017-04-10-raspbian-jessie-lite
    • Wifiはアクセスポイントに使うので、有線側がインターネットにアクセスできて(ファイルとかダウンロードする)、おうちのPCからsshログインできるようにしておこう.
  • クライアント
    • iOS: Minecraft Pocket Edition (通称:MCPE) v1.0.9
    • Windows 10: Minecraft: Windows 10 Edition

手順

下準備

  • いつも通りに、RaspbianイメージをSDに焼いて、sshファイルを作成し、ラズパイに挿して、起動。
  • sshでログインして、こぴぺとか多いので、設定すると、らくかも。(ToDo: 一発スクリプトをつくる...)

PocketMine-MP のインストール

  1. インストール

    コピペ

DIR_PMMP=/home/pi/pocketmine
mkdir -p $DIR_PMMP
cd $DIR_PMMP
sudo apt update && sudo apt install -y build-essential git autoconf libtool-bin && curl -sL https://get.pmmp.io | sed -e 's@BCM270[89]@BCM@' | bash -s -


    ```bash:pmmp.ioのコードをクローン
DIR_PMMP=/home/pi/pocketmine
if [ -d $HOME/PocketMine-MP/.git ] ; then sh -c 'cd $HOME/PocketMine-MP && git pull && git submodule update'; else sh -c 'cd $HOME && git clone https://github.com/pmmp/PocketMine-MP && cd $HOME/PocketMine-MP && git submodule update --init'; fi
cp -r $HOME/PocketMine-MP/src $DIR_PMMP
#
```bash:BlueLightをダウンロード

BlueLightもダウンロード (Build#770は、v1.0.9)

curl -L -O http://jenkins.haniokasai.com/job/BlueLight-PMMP/770/artifact/artifacts/BlueLight-PHP7.phar

最新ビルドは

curl -L -O http://jenkins.haniokasai.com/job/BlueLight-PMMP/lastSuccessfulBuild/artifact/artifacts/BlueLight-PHP7.phar



2. 初回起動: `./start.sh`
初回起動時、いろいろ聞かれるので、うまく設定していく。 

    ```bash
DIR_PMMP=/home/pi/pocketmine
cd $DIR_PMMP
# git cloneしたヤツを使う
./start.sh -f src/pocketmine/PocketMine.php
# 普通の PocketMine-MP.phar使用時は、
# ./start.sh 
# Bluelightを使用する場合
# ./start.sh -f BlueLight-PHP7.phar
- または

```bash:または、以下コピペして、30秒くらいしたら、Ctrl-Cを押して抜ける.19132の次の行の0を1にすると、クリエイティブモード

./start.sh -f src/pocketmine/PocketMine.php << EOF
jpn
y
n
Minecraft: PE Server
19132
0
20
y
OPeratorPlayerName
n
n
n

EOF

3. 設定後の起動

    ```bash:こぴぺ
cd /home/pi/pocketmine
./start.sh -f src/pocketmine/PocketMine.php
# ./start.sh 
# Bluelightを使用する場合
# ./start.sh -f BlueLight-PHP7.phar
#
  1. サービスとして登録する場合(電源ONで自動起動. サーバのコンソールは使えない)

    以下コピペ
    DIR_PMMP=/home/pi/pocketmine
    PMMP_EXEC=src/pocketmine/PocketMine.php
    #PMMP_EXEC=PocketMine-MP.phar
    #PMMP_EXEC=BlueLight-PHP7.phar
    cat << EOF | sudo tee /etc/systemd/system/pocketmine.service
    [Unit]
    Description=PocketMine-MP MCPE Server
    
    [Service]
    User=pi
    # ExecStart=$DIR_PMMP/start.sh 1>/dev/null 2>&1
    # BlueLightを使うときはこっち.
    ExecStart=${DIR_PMMP}/start.sh -f ${DIR_PMMP}/${PMMP_EXEC} 1>/dev/null 2>&1
    WorkingDirectory=/home/pi
    Restart=always
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    sudo systemctl enable pocketmine
    sudo systemctl status pocketmine
    sudo systemctl daemon-reload
    sudo systemctl restart pocketmine
    sudo systemctl status pocketmine
    


	```bash:サービス登録をやめるとき
	sudo systemctl status pocketmine
	sudo systemctl stop pocketmine
	sudo systemctl disable pocketmine
	sudo systemctl status pocketmine
#

Wifi-AP + DHCPサーバ(Pi-hole使用)

コレにそって設定する。

  1. hostapdをインストール

sudo su -c 'apt update && apt upgrade -y && apt install hostapd -y'



2. wlan0 を固定IPに (192.168.42.1)、 hostapd と ip-forwarding 設定をして、再起動。
SSIDとPassphraseの設定(`WIFI_SSID`と`WIFI_PASS`)をして、こぴぺ。

	```bash:コピペ。一回だけだよ
	# SSIDとPassphraseの設定
	WIFI_SSID=Pi3-AP
	WIFI_PASS=raspberry
	###
	# Make sure hostapd is installed :)
	# sudo apt install hostapd -y 

	###
	# Unmanage: wlan0 by DHCPCD
	echo denyinterfaces wlan0 | sudo tee -a /etc/dhcpcd.conf

	###
	# Modify: /etc/network/interfaces
	sudo sed -i \
	-e 's/allow-hotplug wlan0/#allow-hotplug wlan0/g' \
	-e 's/iface wlan0 inet manual/#iface wlan0 inet manual/g' \
	-e 's@    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf@#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf@'  \
	/etc/network/interfaces

	cat <<EOF | sudo tee -a /etc/network/interfaces
	#
	# wlan0 - static IP 
	allow-hotplug wlan0 
	iface wlan0 inet static 
		address 192.168.42.1
		netmask 255.255.255.0
		network 192.168.42.0
		broadcast 192.168.42.255
	EOF


	###
	# Create: /etc/hostapd/hostapd.conf
	#  ssid/wpa_passphrase = Pi3-AP/raspberry
	#  you may modify them.
	cat <<EOF | sudo tee /etc/hostapd/hostapd.conf
	interface=wlan0
	driver=nl80211
	#driver=rtl871xdrv
	hw_mode=g
	channel=6
	ieee80211n=1
	wmm_enabled=1
	ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
	macaddr_acl=0
	auth_algs=1
	ignore_broadcast_ssid=0
	wpa=2
	wpa_key_mgmt=WPA-PSK
	rsn_pairwise=CCMP
	ssid=${WIFI_SSID}
	wpa_passphrase=${WIFI_PASS}
	EOF

	##
	# Edit: /etc/default/hostapd
	echo DAEMON_CONF=\"/etc/hostapd/hostapd.conf\" | sudo tee -a /etc/default/hostapd

	##
	# Setting: IP Forward
	sudo sed -i -e 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g'  /etc/sysctl.conf
	#
	sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
	sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
	sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
	sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
	#
	echo 'iptables-restore < /etc/iptables.ipv4.nat' | sudo tee /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat

	##
	# Reboot! 
	sudo reboot
	## 
	```
3. [pi-hole](https://pi-hole.net/)のインストール

    ```bash:こぴぺ。待つと、設定の画面が出てくる。
curl -L https://install.pi-hole.net | bash
  1. [Enter] => [Enter] => [Enter] => ↓矢印キー => スペースキー => [Tab] => [Enter] と押して、(*) wlan0 availableを選択
    PiHole04.png

  2. 適当なDNSプロバイダーを選んで、OK
    PiHole05.png

  3. IPv6のチェックをはずして、OK
    PiHole06.png

  4. 有線側の設定がでてくるので、<No>を選ぶ。
    PiHole07.png

  5. 192.168.42.1/24 といれる
    PiHole08.png

  6. 192.168.42.1と入れる
    PiHole09.png

  7. 確認したら、<Yes>
    PiHole10.png

  8. あとは、<Ok> => <Ok> => <Ok> と進める。

  9. コマンドプロンプトに戻ってきたら、pihole -a -p とやって、パスワードを設定する。
    PiHole15.png

  10. 有線経由で、ラズパイにアクセスする。ブラウザを開いて、http://<らずぱいのIPアドレス>/admin/settings.phpにアクセスする、パスワード聞かれるので、さっきのを入れる。
    PiHole16.png

  11. 開いたら、Pi-Hole DHCP Serverのとこで、 [v] DHCP server Enabled にチェックを入れて、[Save]を押す。

    PiHole17.png

  12. 再起動: sudo reboot

接続

  1. 再起動後、スマホなどのWifiへ接続する設定で、SSIDが見えるはず、なのでつなぐ。(例: SSID:Pi3-AP / パスワード:raspberry)
  2. PocketMine-MPが自動起動するようになってなければ、手動で、起動させる。
  3. Minecraft起動して、Friendsのとこから、LAN Gamesのとこに、サーバが出てくるはず
    MinecraftPE-v1.1.0.PNG

メンテナンス (TODO: そのうち...)

  1. pi-holeのアップデート
  2. PocketMine-MPのアップデート

トラブル??

  1. なんかおかしい

    1. クライアントのバージョンが上がると、おかしくなった
      =>今回も、記事を書いてる最中、おかしくなりました..(v1.0.9 => v1.1.0)
    2. サーバのバージョンが上がると、おかしくなった
      =>今回も、記事を書いてる最中、おかしk...

    => 自動起動をやめて、コンソール開いて、そこから、サーバを起動させると、いろいろメッセージがみれるかと...

  2. pluginがバージョンチェックではじかれる..

    • gitでクローンしたのを使ってるなら、version checkを無効に...(ぉ. いいのか?!
    src/pocketmine/plugin/PluginManager.php
    $ diff -uprN src/pocketmine/plugin/PluginManager.php{.org,}
    --- src/pocketmine/plugin/PluginManager.php.org	2017-06-01 19:35:42.594662156 -0700
    +++ src/pocketmine/plugin/PluginManager.php	2017-06-01 23:06:13.641016261 -0700
    @@ -246,7 +246,7 @@ class PluginManager{
    								break;
    							}
     
    -							if($compatible === false){
    +							if(0 && $compatible === false){
    								$this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [$name, "%pocketmine.plugin.incompatibleAPI"]));
    								continue;
    							}
    $ 
    

その他

  1. ピストンブロックとか、使えないよね。

  2. (メモ)swap消して、/var/log/あたりをtmpfsにしてる場合

    cronを使って、起動時にlighttpdのフォルダ作成

$ sudo crontab -l | grep reboot
@reboot /home/pi/atstartup.sh
$ cat /home/pi/atstartup.sh

!/bin/bash

mkdir /var/log/lighttpd
chown www-data:www-data /var/log/lighttpd


3. (メモ) shutdown/rebootさせるURLみたいなの。セキュリティ無し。

	```bash:こぴぺ
	# メインページ
	echo '<html><a href="shutdown-h.php">Shutdown</a><br><br><br><a href="shutdown-r.php">Reboot</a></html>' | sudo tee /var/www/html/shutdown.html
	# shutdown スクリプト
	echo "<?php system('sudo /sbin/shutdown -h now'); ?>" | sudo tee /var/www/html/shutdown-h.php
	echo "<?php system('sudo /sbin/shutdown -r now'); ?>" | sudo tee /var/www/html/shutdown-r.php
	#
	# www-dataにsudo shutdownを使えるようにする
	echo 'www-data ALL = NOPASSWD: /sbin/shutdown' | sudo tee /etc/sudoers.d/www-shutdown
	# 
	```
	- wifi-APに接続してるなら、`http://192.168.42.1/shutdown.html` にアクセス
3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?