Raspberry Pi で F# を動かすまで(まとめ)

手元にあるのが Raspberry Pi のメモリが 256MB タイプのためか F# をビルドするときに失敗します。が、別途の Debian でビルドした DLL を install することで回避しています。
手持ちの SD カードは 8GB です。

■下準備

画面は使わずにターミナルだけで作業をします。初期状態で ssh が使える状態になっているので、起動したときの IP だけわかれば OK。初回のみ HDMI でディスプレィをつなげて固定 IP にしておけばよいでしょう。DHCP でも自宅の場合はそう変わらないので、そのままでもいいかなと。

  1. Raspbian Debian Wheezy をインストール
  2. sudo respi-config して Expand Filesystem を実行。こうすると SD カード一杯まで容量を増やしていくれる。
  3. sudo passwd root でパスワードを設定しておく。
  4. adduser でユーザを作る。
  5. visudo で sudo できるようにしておく。
  6. sudo apt-get update する。
  7. sudo apt-get upgrade する。
  8. sudo apt-get install avahi-daemon する。ホスト名を公開するため。
  9. sudo apt-get install samba する。Windows からファイルを送るため

■ビルドの準備

Mono と F# を git から持ってきてビルドします。mono 自体は sudo apt-get mono-complete で持ってこれるのですが、何故か F# 3.1 で使おうとするこけます。また、Rasberry Pi のレポジトリには fsharp パッケージがないので、自前でビルドする必要があります。が、Raspberry Pi 上で F# のコードをビルドしようとすると、途中でテストのエラーでこけます。

という状態なので、Mono 3.2.8 + F# 3.1 の組み合わせの場合は、

  • Mono を Raspberry Pi でダウンロードしてビルド、インストール
  • F# を別の Debian でダウンロードしてビルド
  • 出来上がった F# を Raspberry Pi にコピーしてインストール

という手順になります。F# を別の環境で make install するので、ビルドするディレクトリ名は揃えたほうが無難です(異なる場合は、ln -s すれば ok)。可能ならば ARM 環境で Mono をビルドすればいいんでしょうが。Visual Studio を使えばできるかも。

■ビルドする

http://fsharp.org/use/linux/ にある Option 2: Build and install the F# 3.1 runtime, compiler and tools に従って Mono をビルドします。うちの環境では 12 時間以上かかりました。出来上がったバイナリは大事にとっておきましょう。

sudo make install すると無事 mono が使える状態になります。

image

お次は、F# をビルドするのですが、これは別の Debian でやります。git clone https://github.com/fsharp/fsharp  からダウンロードしてビルドします。これは普通の PC(私の場合は Hyper-V 上の Debian)なのであっという間です。ちなみに、Mono のビルドも結構なスピードで出来上がりますが、中身が ARM ではないので、Raspberry Pi にはコピーできません…と思うのですがどうなんでしょうね?私の場合は 12 時間かけて Raspberry Pi 上でビルドしたのですが。

できあがった F# のバイナリを tar で固めて、Raspberry Pi 上に持っていきます。そして sudo make install すれば、無事 F# が使えるようになります。

■F# を動かす

インタープリタは fsharpi です。コンパイラは fsharpc ですね。Scala の fsc とバッティングしたので名前が長くなっています。つーか、Scala 入れてないから、fsc で ln -s してもいいですね。

image

コマンドラインから fsharpi を打った後にしばらく待たされます。更に let a = … と打った後にしばらく待たされます。どうやら mono ががんばっている模様で、ある程度ライブラリのロードが終わったら早くなります。top でみると結構上に貼りついてしまうのでなかなか大変そうです。

image

ビルドした後は分からないのですが、センサー取り込みのような素早い処理には向かないけど、ロボット制御のようなコマンド送信には十分使えるかなと思っています。まあ、それで BrickPi を購入したわけですが。de:code で MS太田さんが .NET Micro Framework で EV3 を操作できたそうなので、MF のほうでも試してみたいですね。つーか、動くのか? F#
ちょっと古いですが、2010年ごろのブログに Managed、Native、.NET Framework? – デバイスとITの架け橋 – Site Home – MSDN Blogs の冒頭「参加されていたのは組込み業界の皆さんだったにも拘らず、F#を使っている方が何人かいらっしゃって」とあるので、制御系にはうけがいいかもしれません。コンピュテーション式なんてのは、DSL 的に有用ですからね。RSNP あたりでしたっけ?

そんな訳で、お次は BrickPi のセットアップです。

カテゴリー: F#, RaspberryPi パーマリンク