MakeCode for micro:bitをローカル環境で立ち上げる

micro:bitのソースを少しイジってみようと思い、pxt-microbitソースから環境を構築してみたのですが、思っていた以上に辛かったので書き留めました。

ラズパイにOSをインストール

こちらを参考に、RaspberryPi3にRaspbianをインストールします。

最新のRaspbianイメージ(2017-08-16-raspbian-stretch.img)では、途中のコンパイルでエラーになり回避できない(できなかった)ので、少し古いRaspbianイメージ(2017-07-05-raspbian-jessie.img)を使ってください。

uepon.hatenadiary.com

初期設定は、WiFi接続とSSHを有効化、タイムゾーン、キーボードを変更しました。

タイムゾーンAsia/Tokyo

キーボード … Japanese (PC-98xx Series)

pxt-microbitをソースから構築

こちらのgithub上のソースから構築した場合」を参考にしました。

takafuminaka.blogspot.jp

前準備

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade

Nodeをインストール

こちらにあるコマンドのとおり、Node.js 8をインストールします。

pi@raspberrypi:~ $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
pi@raspberrypi:~ $ sudo apt-get install -y nodejs

インストール後のバージョンはこちら。

pi@raspberrypi:~ $ node -v
> v8.4.0

yottaをインストール

こちらにあるコマンドのとおり、yottaをインストールします。

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get install python-setuptools cmake build-essential ninja-build python-dev libffi-dev libssl-dev && sudo easy_install pip
pi@raspberrypi:~ $ sudo pip install yotta

インストール後のバージョンはこちら。

pi@raspberrypi:~ $ yotta --version
> 0.18.2

toolchainをインストール

GNU ARM Embedded Toolchainをインストールします。

pi@raspberrypi:~ $ sudo apt-get install gcc-arm-none-eabi

インストール後のバージョンはこちら。

pi@raspberrypi:~ $ arm-none-eabi-gcc --version
> arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)

最新のRaspbianイメージ(2017-08-16-raspbian-stretch.img)だと、arm-none-eabi-gcc (15:4.9.3+svn231177-1) 4.9.3 20150529 (prerelease)がインストールされるのですが、4.9.3だと後にコンパイルエラーが発生しました。少し古いRaspbianイメージ(2017-07-05-raspbian-jessie.img)だと、arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)がインストールされて、コンパイルエラーが発生しませんでした。

追加でパッケージをインストール

npm installで発生するエラーを回避するために、不足しているパッケージをインストールします。

Package gnome-keyring-1 was not foundの対策

pi@raspberrypi:~/pxt-microbit $ sudo apt-get install libgnome-keyring-dev

libusb.h: No such file or directoryの対策

pi@raspberrypi:~/pxt-microbit $ sudo apt-get install libusb-1.0-0-dev

/bin/sh: 1: srec_cat: not foundの対策

pi@raspberrypi:~/pxt-microbit $ sudo apt-get install srecord

pxt

あとはこちらの手順とおり。

pxt-microbitソースをcloneして、

pi@raspberrypi:~ $ git clone https://github.com/Microsoft/pxt-microbit
pi@raspberrypi:~ $ cd pxt-microbit

PXT command line toolsをインストール。

pi@raspberrypi:~/pxt-microbit $ sudo npm install -g pxt

依存ファイルをインストール。

pi@raspberrypi:~/pxt-microbit $ npm install

hostnameのlocalhostIPアドレスに書き換えてから、

pi@raspberrypi:~/pxt-microbit $ vi ~/pxt-microbit/node_modules/pxt-core/built/server.js

pxt-microbitを起動します。

pi@raspberrypi:~/pxt-microbit $ pxt serve

最後に

最新のRaspbianイメージで構築できなかったのは心残り。

stretchにarm-none-eabi-gcc 4.8を入れるとか、pxt-microbitをarm-none-eabi-gcc 4.9でビルドできるようにするとか。

上記手順をAzure仮想マシンでも確認したところ、pxt serveまでは正常に動くことが確認できた。現時点のやり方としては問題なさそう。(Azure仮想マシンの受信規則を変更しなかったので、ブラウザからpxtエディタが動作するところまでは確認していません。えへ。)