LoginSignup
3
2

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 -
    #
    
    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
    #
    
    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
    初回起動時、いろいろ聞かれるので、うまく設定していく。

    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
    
    • または
    または、以下コピペして、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. 設定後の起動

    こぴぺ
    cd /home/pi/pocketmine
    ./start.sh -f src/pocketmine/PocketMine.php
    # ./start.sh 
    # Bluelightを使用する場合
    #./start.sh -f BlueLight-PHP7.phar
    #
    
  4. サービスとして登録する場合(電源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
    #
    
    サービス登録をやめるとき
    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_SSIDWIFI_PASS)をして、こぴぺ。

    コピペ。一回だけだよ
    # 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のインストール

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

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

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

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

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

  9. 192.168.42.1と入れる
    PiHole09.png

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

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

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

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

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

    PiHole17.png

  15. 再起動: 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みたいなの。セキュリティ無し。

    こぴぺ
    # メインページ
    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