raspi:MineCraft Pi サバイバルモード

オリジナルのMineCraftには、4つのモードが搭載されています。

特徴 対応
サバイバルモード Playerは死にます
時間制限あり
動物やゾンビの出現
mod
以下転載:http://nonhide.blog.jp/archives/42415041.html
HPとアーマーは使えるようになります。
空は飛べません。
資源は自分で獲得しましょう。
作業台が作れ機能します。
かまども機能します。
矢じり・石炭・鉄までは確認済み。
レッドストーンも確認!けどアイテム化できず。(アイテム化の方法あるのでしたら教えて下さい。)
マルチプレイが出来ない。(相手のバージョンが違うといって怒られる。誰か解決方法知りませんか?)
敵出てきます。クモ・ゾンビ・弓矢兵・クリーパー確認。
武器で敵に攻撃できません。(方法がわからないだけかも。)
クモは倒せます。(高いところから体当たりで落としたら殺せた!)
クモから糸がアイテム化した。
ゾンビは倒せます。(日光の下で焼死します。)
夜にならないのでベットはあっても寝れません。
溺れます。
麦とサトウキビは育ちます。
金やダイヤはまだ未確認。出てくるのかな~?
ハサミ?で羊の毛は刈り取れます。(しかし二度と毛が生えてこないみたい)
火打ち石が作れますが、用途不明・・・だれか教えて!!
弓作れます。矢を引き絞れるけど、飛んでいかない。
クリエイティブモード Playerは死にません
無限の資源が使い放題
RasPi純正
アドベンチャーモード オリジナルゲームを作れる ×
スペクテイターモード モンスター目線
観察が目的
洞窟探しとワールド調査
×

RaspiにインストールされているMineCraftはクリエイティブモードのみプレイできる。
これをサバイバルモードでも対応できるようパッチを当ててみる。
OpenGLのライブラリのパスが切れているので、追記しないとダメかも

$ sudo apt-get install bsdiff
$ cd /opt/minecraft-pi
$ wget https://www.dropbox.com/s/iutdy9yrtg3cgic/survival.bsdiff
$ <del>wget https://dl.dropbox.com/s/dscw98vlki7rfsi/mcpifull.bsdiff</del>
$ bspatch minecraft-pi mcpipatched survival.bsdiff
$ <del>bspatch minecraft-pi mcpipatched mcpifull.bsdiff</del>
$ sudo chmod +x mcpipatched

起動方法

$ cd /opt/minecraft-pi
$ env LD_LIBRARY_PATH=/opt/minecraft-pi/lib/brcm/:LD_LIBRARY_PATH /opt/minecraft-pi/mcpipatched
$ ../mcpipatched

起動出来れば、毎回envセットするのが面倒なので、profileに書くか、別途スクリプトを用意します。

$ vi ~/bin/mi-surv.sh
cd /opt/minecraft-pi
env LD_LIBRARY_PATH=/opt/minecraft-pi/lib/brcm/:LD_LIBRARY_PATH /opt/minecraft-pi/mcpipatched
../mcpipatched
$ chmod 755 ~/bin/mu-surv.sh

完全版のインストール方法
https://www.raspberrypi.org/forums/viewtopic.php?f=78&t=137279
情報によると、OpenGLドライバ周りでエラーが出ているらしいです。2018/10/9未確認

raspi:MineCraft pi

raspiには、minecraft pi をいう機能制限版のMineCraftがインストールされています。されていなければ、インストールすることもできます。

$ sudo apt-get update
$ sudo apt-get install minecraft-pi

デスクトップの “Menu – Games” にMinecraft Piが入ってますので、起動してみます。

起動できれば、terminalからpython2を起動します。
コードは、全てpython2で実行します。

Hello worldをスクリーンに表示

from mcpi import minecraft
mc = minecraft.Minecraft.create()
mc.postToChat("Hello world")

自分がどこにいるか調べる

pos=mc.player.getPos()

テレポート
自分の位置の空中100のところにテレポート

x, y, z = mc.player.getPos()
mc.player.setPos(x, y+100, z)

ブロックを置く
自分が立っている場所の隣に石のブロックを置く
構文:mc.setBlock(x, y, z, id)
idは、空気:0 , 草:2 , 土:3
他にもidがあるのかな?

x, y, z = mc.player.getPos()
mc.setBlock(x+1, y, z, 1)

変数としてのブロック
idを変数に格納して利用できる

dart=block.DART.id
mc.setBlock(x, y, z, dart)

idがわかっている場合
dart=3
mc.setBlock(x, y, z, dart)

特殊なブロック
色を付けることが出来る特殊なブロックがある。例えば、”wool”
これは、追加のプロパティをもっています。
設定するには、4つ目のパタメータを使う。
0:白 . 1:オレンジ . 2:マゼンダ , 3:ライトブルー , 4:黄色

wool=35
mc.setBlock(x, y, z, wool,1)

複数のブロックを置く
setBlockで1つのブロックを置くのと同じように、setBlocksで複数置くことが出来る

stone=1
x, y, z = mc.player.getPos()
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, stone)

これらを利用して、命令を組み合わせると、自分が歩いたところにブロックを置くことも出来る。

from mcpi import minecraft
from time import sleep

mc = minecraft.Minecraft.create()

flower = 38

while True:
    x, y, z = mc.player.getPos()
    mc.setBlock(x, y, z, flower)
    sleep(0.1)

while True: を利用したので、永遠に花を置いていきます。Pythonウインドウで”Ctrl + c”を押すと止められます。

ある特定のブロックの歩いている時だけ、花を落とすには、
getBlockを使い、ブロックの種類を判定しながら、ブロックを配置する命令を記述します。

x, y, z = mc.player.getPos()  # プレイヤーの位置 (x, y, z)
this_block = mc.getBlock(x, y, z)  # ブロックのID
print(this_block)
while True:
    x, y, z = mc.player.getPos()
    block_beneath = mc.getBlock(x, y-1, z)
    print(block_beneath)
grass = 2
flower = 38

while True:
    x, y, z = mc.player.getPos()  # プレイヤーの位置 (x, y, z)
    block_beneath = mc.getBlock(x, y-1, z)  # ブロックのID

    if block_beneath == grass:
        mc.setBlock(x, y, z, flower)
    sleep(0.1)

自分が立っているところが草じゃ無ければ、草に変えるには、このよう変更すればいい。

while True:
    x, y, z = mc.player.getPos()  # プレイヤーの位置 (x, y, z)
    block_beneath = mc.getBlock(x, y-1, z)  # ブロックのID

    if block_beneath == grass:
        mc.setBlock(x, y, z, flower)
    sleep(0.1)

TNTブロック
TNTブロックを置くには、このようにすればよいが、爆発しません。

tnt = 46
mc.setBlock(x, y, z, tnt)

爆発するブロックを置くには、tntのあとに、” ,1″を付けます。

tnt = 46
mc.setBlock(x, y, z, tnt, 1)

TNTブロックのビルを作って爆発させてみる。

tnt = 46
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, tnt, 1)

基礎的なことは、この程度です。
ブロックの種類や色など他にも色々あるようですから、詳しくは、APIリファレンスを見よう。

raspi:certbot – nginx

Let’s encryptを使い証明書を取得します。

apache2でもnginxでも証明書を作成する手順は変わらない。

photo.viasv.comの名前解決が出来るよう、DNSを設定しnslookupなどで解決できているか確認します。

確認出来れば、作業を開始する。

最初に、photo.viasv.comを公開するディレクトリを作成

mkdir /var/www/html/photo
chown www-data:www-data /var/www/html/photo

ls -la /var/www/html/
total 48
drwxr-xr-x 5 root     www-data  4096 Oct  9 08:59 .
drwxr-xr-x 3 root     root      4096 Sep 27 14:30 ..
drwxr-xr-x 2 www-data www-data  4096 Oct  9 08:59 photo

nginxのVirtualHostの設定を行い、https://photo.viasv.com/を表示出来るか確認する。最初は、sslの設定はコメントアウトしておく。

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name photo.viasv.com;

        root /var/www/html/photo;
#        ssl_certificate /etc/letsencrypt/live/photo.viasv.com/fullchain.pem;
#        ssl_certificate_key /etc/letsencrypt/live/photo.viasv.com/privkey.pem;
#       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        index index.html index.htm index.php index.nginx-debian.html;

        location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        include         fastcgi_params;
        }

        location / {
                try_files $uri $uri/ =404;
        }
}

nginxの設定が終われば、再起動する。

$ sudo service nginx restart

きちんと、表示出来れば、certbotを使い、証明書を取得する。

certbot certonly --webroot -w /var/www/html/photo -d photo.viasv.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Obtaining a new certificate
An unexpected error occurred:
There were too many requests of a given type :: Error creating new authz :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/
Please see the logfiles in /var/log/letsencrypt for more details.
root@ras:/var/www/html/photo/.well-known# certbot certonly --webroot -w /var/www/html/photo -d photo.viasv.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for photo.viasv.com
Using the webroot path /var/www/html/photo for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0002_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0002_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/photo.viasv.com/fullchain.pem. Your cert will
   expire on 2019-01-07. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

証明書を確認する。

$ ls /etc/letsencrypt/live/photo.viasv.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

証明書がきちんと出来ていることを確認出来れば、nginxの設定でsslのコメントを外し、nginxを再起動する。

cert.pem 証明書
privkey.pem 秘密鍵
chain.pem 中間証明書
fullchain.pem 証明書+中間証明書(結合したもの)

raspi:nginx

apacheを使ってhttpsを設定・運用していたが、なにか設定を触った時に、http+let’s encryptで使っている鍵が合わないと表示されapacheが起動しなくなっていた。certbotで鍵を作り替えたり、apacheの設定を見直してみたが、原因わからず、結局web serverをapache2からnginxに切り替えることにした。

apache2の自動起動を止める。

# systemctl disable apache2

nginxをinstall

$ sudo apt-get install nginx

設定する。
sslはcertbotで作成済みなので、流用する。

vi /etc/nginx/sites-enabled/default
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name domain_name;
        root /var/www/html;
        ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
        index index.html index.htm index.php index.nginx-debian.html;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        include         fastcgi_params;
        }

        location / {
                try_files $uri $uri/ =404;
        }
}

nginxを再起動

$ sudo service nginx restart

raspi:rpi-update

raspberry piのFirmwareを最新版に更新してみます。

現状の確認後、aptを使ってシステムを更新します。

$ uname -a

Linux ras2 4.14.70-v7+ #1144 SMP Tue Sep 18 17:34:46 BST 2018 armv7l GNU/Linux

$ sudo apt-get update

[sudo] kaz のパスワード:
ヒット:1 http://archive.raspberrypi.org/debian stretch InRelease
取得:2 http://raspbian.raspberrypi.org/raspbian stretch InRelease [15.0 kB]
15.0 kB を 2秒 で取得しました (5,685 B/s)
パッケージリストを読み込んでいます… 完了
$ sudo apt-get upgrade
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
アップグレードパッケージを検出しています… 完了
以下のパッケージはアップグレードされます:
libfm-data libfm-extra4 libfm-gtk-data libfm-gtk4 libfm-modules libfm4 python-unicornhathd
python3-unicornhathd
アップグレード: 8 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
592 kB のアーカイブを取得する必要があります。
この操作後に追加で 15.4 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://archive.raspberrypi.org/debian stretch/ui armhf libfm-data all 1.2.5-1+rpi6 [234 kB]
取得:2 http://archive.raspberrypi.org/debian stretch/ui armhf libfm-extra4 armhf 1.2.5-1+rpi6 [29.4 kB]
取得:3 http://archive.raspberrypi.org/debian stretch/ui armhf libfm-gtk-data all 1.2.5-1+rpi6 [34.1 kB]
取得:4 http://archive.raspberrypi.org/debian stretch/ui armhf libfm-gtk4 armhf 1.2.5-1+rpi6 [134 kB]
取得:5 http://archive.raspberrypi.org/debian stretch/ui armhf libfm4 armhf 1.2.5-1+rpi6 [101 kB]
取得:6 http://archive.raspberrypi.org/debian stretch/ui armhf libfm-modules armhf 1.2.5-1+rpi6 [45.9 kB]
取得:7 http://archive.raspberrypi.org/debian stretch/main armhf python-unicornhathd all 0.0.4 [6,428 B]
取得:8 http://archive.raspberrypi.org/debian stretch/main armhf python3-unicornhathd all 0.0.4 [6,504 B]
592 kB を 2秒 で取得しました (291 kB/s)
changelog を読んでいます… 完了
(データベースを読み込んでいます … 現在 117874 個のファイルとディレクトリがインストールされています。)
…/0-libfm-data_1.2.5-1+rpi6_all.deb を展開する準備をしています …
libfm-data (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/1-libfm-extra4_1.2.5-1+rpi6_armhf.deb を展開する準備をしています …
libfm-extra4:armhf (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/2-libfm-gtk-data_1.2.5-1+rpi6_all.deb を展開する準備をしています …
libfm-gtk-data (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/3-libfm-gtk4_1.2.5-1+rpi6_armhf.deb を展開する準備をしています …
libfm-gtk4:armhf (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/4-libfm4_1.2.5-1+rpi6_armhf.deb を展開する準備をしています …
libfm4:armhf (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/5-libfm-modules_1.2.5-1+rpi6_armhf.deb を展開する準備をしています …
libfm-modules:armhf (1.2.5-1+rpi6) で (1.2.5-1+rpi5 に) 上書き展開しています …
…/6-python-unicornhathd_0.0.4_all.deb を展開する準備をしています …
python-unicornhathd (0.0.4) で (0.0.3 に) 上書き展開しています …
…/7-python3-unicornhathd_0.0.4_all.deb を展開する準備をしています …
python3-unicornhathd (0.0.4) で (0.0.3 に) 上書き展開しています …
python3-unicornhathd (0.0.4) を設定しています …
libfm-data (1.2.5-1+rpi6) を設定しています …
libfm-extra4:armhf (1.2.5-1+rpi6) を設定しています …
libc-bin (2.24-11+deb9u3) のトリガを処理しています …
python-unicornhathd (0.0.4) を設定しています …
libfm-gtk-data (1.2.5-1+rpi6) を設定しています …
shared-mime-info (1.8-1+deb9u1) のトリガを処理しています …
libfm4:armhf (1.2.5-1+rpi6) を設定しています …
libfm-gtk4:armhf (1.2.5-1+rpi6) を設定しています …
libfm-modules:armhf (1.2.5-1+rpi6) を設定しています …
libc-bin (2.24-11+deb9u3) のトリガを処理しています …

$ sudo apt-get dist-upgrade

パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
アップグレードパッケージを検出しています… 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

次に、rpi-updateを行います。

$ sudo rpi-update

*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Performing self-update
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13545 100 13545 0 0 30329 0 –:–:– –:–:– –:–:– 30369
*** Relaunching after update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** We’re running for the first time
*** Backing up files (this will take a few minutes)
*** Backing up firmware
*** Backing up modules 4.14.70-v7+
#############################################################
This update bumps to rpi-4.14.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=197689
##############################################################
*** Downloading specific firmware revision (this will take a few minutes)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 168 0 168 0 0 187 0 –:–:– –:–:– –:–:– 188
100 56.1M 100 56.1M 0 0 2740k 0 0:00:20 0:00:20 –:–:– 2060k
*** Updating firmware
*** Updating kernel modules
*** depmod 4.14.73+
*** depmod 4.14.73-v7+
*** Updating VideoCore libraries
*** Using HardFP libraries
*** Updating SDK
*** Running ldconfig
*** Storing current firmware revision
*** Deleting downloaded files
*** Syncing changes to disk
*** If no errors appeared, your firmware was successfully updated to 9f230923e419d942cf02fe936ea4fd186d3a21fa
*** A reboot is needed to activate the new firmware

うまくいったようで、再起動すると、New Firmwareで起動します。

再起動後、確認

Linux ras2 4.14.73-v7+ #1148 SMP Mon Oct 1 16:57:50 BST 2018 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

(旧)Linux ras2 4.14.70-v7+ #1144 SMP Tue Sep 18 17:34:46 BST 2018 armv7l GNU/Linux

(新)Linux ras2 4.14.73-v7+ #1148 SMP Mon Oct 1 16:57:50 BST 2018 armv7l GNU/Linux

kernelが変わっています。