しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Raspberry Pi 2 を買ったので Mono 3.12.0 を自前でビルドして ASP.NET 5 を動かしてみた

今後は Windows 10 for IoT が無償提供されるという話もあり、ハードウェア周りをちょっと触ってみたかったので Raspberry Pi 2 を Pimoroni で買ってみました。

Raspberry Pi 2 with Pibow Case - Pimoroni

f:id:shiba-yan:20150214010907p:plain

Raspberry Pi 2 本体とケースで £42 ですが、これに送料が £6 追加されるので合計で £48 になりました。

残念ながら現時点で 1 ポンド 183 円という円安のため、日本で Raspberry Pi 2 を買うよりもそこそこ割高になってしまいましたが、ケースのクオリティには満足しています。

f:id:shiba-yan:20150214010743j:plain

組み立ては説明書とか無かったので戸惑いましたが、何とかなりました。

Mono 3.12.0 をインストールする

OS には Debian ベースの Raspbian を選んだので、Mono は古いバージョンなら apt-get install mono-complete で割とあっさりとインストール出来ます。新しいバージョンはソースからビルドするしかなさそうなので、Mono 公式のドキュメントを読んでビルドしました。

Compiling Mono on Linux | Mono

Debian 向けに書かれている情報なら Raspbian でも同じように出来るのが楽です。今回は最新の Mono 3.12.0 をビルドしてみたところ 3 時間ぐらいかかりました。

f:id:shiba-yan:20150214025102p:plain

コンパイルを並列で行えば、もうちょっと速く処理できたかもしれないです。

XRE をインストール

これで Mono に関しては問題が無いはずなので、XRE をインストールします。

curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh

これを実行すると kvm コマンドが使えるようになるので、kvm upgrade を実行して最新の XRE をインストールします。インストール後は kpm や k コマンドが使えるようになっています。

f:id:shiba-yan:20150214025248p:plain

サンプルコードとして aspnet/Home · GitHub を clone して sample 内にある HelloMvc を動かしてみます。project.json で参照しているバージョンが古いので beta2 か * に変更します。

f:id:shiba-yan:20150214040242p:plain

その修正後に kpm restore を実行してパッケージの復元を行います。そして kpm restore で失敗する場合は SSL 周りが原因なので、以下の Issue を参考にコマンドを叩き込みます。

kpm restore fails on Linux · Issue #197 · aspnet/Home · GitHub

sudo certmgr -ssl -m https://go.microsoft.com
sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
sudo certmgr -ssl -m https://nuget.org

mozroots --import --sync

kpm restore が成功したら、後は Kestrel を実行するために必要な libuv をインストールします。

git clone https://github.com/libuv/libuv.git
cd libuv
./autogen.sh
./configure
make
sudo make install
sudo ldconfig

これで Kestrel が動作するようになるので k kestrel コマンドを実行します。

f:id:shiba-yan:20150214040724p:plain

Started が表示されたら無事にサーバーが起動した証拠です。ブラウザから http://{Raspberry Pi の IP アドレス}:5004/ にアクセスすると ASP.NET 5 のページが表示されるはずです。

f:id:shiba-yan:20150214040925p:plain

まだ MusicStore などの複雑なアプリは実行できませんでしたが、超小型の ASP.NET 5 サーバーが手に入りました。検証環境としては十分だと思いました。