Intel GalileoでErlang/OTPを動かす


はじめに

昨年末からRaspberryPiやBeableBoard-XMでErlang/OTPアプリを動かしているのですが、Intelから出たGalileo上で動いたら素敵だなーと思ったので、さっそくGalileoを秋月で購入。Erlang/OTPをビルド・インストールしてみました。
ちなみに、Galileoで動いたら何が素敵かというと、ボード一枚でアナログ6量が取れるからです。

Galileoファームウエアのアップデート

とりあえずGalileoのファームウエアをアップデートします。GalileoIDEを起動して、【ヘルプ】-> 【Firmware update】を実行。

開発環境を準備

makeなど、Erlang/OTPのビルドに必要なあれこれが入ったYocto LinuxSDKバージョンをダウンロードしてSDカードに保存します。

マイクロSDカードの準備

  • SDカードをFAT32でフォーマット(Macなら、SDカードを差してFinderのメニューから「移動」→「ユーティリティ」→「ディスクユーティリティ」を起動
  • SDカードを選んで、「消去」タブをクリック
  • フォーマットに「MS-DOS(FAT32)」を選択して、名前を「GALILEO」に設定
  • 消去を実行
  • 下記のリンクから「Clanton_Full_SDK.7z」をダウンロード、解凍。

http://ccc.ntu.edu.tw/index.php/news/40

  • 7zが無い場合は brewからインストール
$ brew install 7z

解凍

$ 7z x Clanton_Full_SDK.7z

できたClanton_Full_SDK/ ディレクトリと、さきほどフォーマットしたGALILEO( /Volumes/GALILEO/ )をrsyncで同期

 $ rsync -avz Clanton_Full_SDK/ /Volumes/GALILEO/

一旦、Galileoの電源を落として、さきほどのマイクロSDカードを差し込んで電源ON。
起動はけっこう時間がかかる。SDカード横のLEDが光ったり消えたりしてる間は起動中です。

起動したらSSHでログインする(ユーザーはroot, パスワードはなし)。

$ ssh root@192.168.3.3 #IPアドレスは環境による

Erlang/OTPのビルド済みバイナリ

次の章でソースからビルドする方法を書いてますが、ビルドしたパッケージを下記においておきます。
/usr/local/erlang/R16B03-1 にインストールした者を単にtarで固めたものなので解凍してパスを通せば動くと思います。

Erlang/OTP R16B03-1
https://googledrive.com/host/0BxkTrmjB9NZ1dkVxX3ViLUlORk0/R16B03-1.tar.bz2

あとrebarを使う場合はgitとcurlが必要です。curlは前章のLinuxイメージ入れてれば入っているのですが、どうもまともに動かなかったのでソースからコンパイルしました。
これらもgalileo上でコンパイルしたものを置いておきます。展開すればそのまま使えるはず。

cURL 7.35
https://googledrive.com/host/0BxkTrmjB9NZ1dkVxX3ViLUlORk0/curl-7.35.tar.bz2

  1. /usr/bin/curl* を全て/usr/local/curl/7.35/bin 以下からシンボリンックリンクで置き換え。
  2. /usr/include/curl に /usr/local/curl/7.35/include/curl からシンボリンックリンクで置き換え。
  3. /usr/lib/libcurl* を /usr/local/curl/7.35/lib/libcurl* からのシンボリックリンクで置き換え。
  4. /etc/pki に /usr/local/curl/7.35/etc/pki からのシンボリックリンクを貼る。

最後に ~/.gitconfigに以下を追加

[http]
sslCAinfo = /etc/pki/tls/certs/ca-bundle.crt

Git 1.9.0
https://googledrive.com/host/0BxkTrmjB9NZ1dkVxX3ViLUlORk0/git-1.9.0.tar.bz2

Erlang/OTPをソースからビルド・インストール

ここでは最新安定板のR16B03-1を入れる。

# mkdir src
# cd src
# wget http://download.basho.co.jp.cs-ap-e2.ycloud.jp/otp/download/otp_src_R16B03-1.tar.gz

解凍

# tar xvzf otp_src_R16B03-1.tar.gz

configure実行

# ./configure --prefix=/usr/local/erlang/R16B03-1 \
             --disable-threads --enable-smp-support --enable-kernel-poll \
             --disable-sctp --disable-hipe /
             --enable-m32-build --without-javac --with-ssl

ビルド、インストール

# make
# make install

めちゃくちゃ時間がかかります。数時間はかかるので寝る前にビルド開始して、起きた頃に結果を見た方がいいかも。

上記cnofigureオプションだと /usr/local/erlang/R16B03-1 に入ります。
従って

export PATH=/usr/local/erlang/R16B03-1/bin:${PATH}

すれば使えます。

$ erl
Erlang R16B03-1 (erts-5.10.4) [source] [async-threads:10] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> 1 + 1.
2
2> spawn(fun() -> io:format("spawn!") end).
spawn!<0.36.0>
3> 

とりあえずは普通に使えそうです。