2014年12月3日水曜日

Ruby on OSv

これはOSv Advent Calender 2+1日目の記事です.
グアムのハワイのワイキキビーチで書き上げたからまだ12/2という"てい"でよろしくおねがいします.



OSvのCRuby移植担当してたoruminです.
OSv1日目の記事@syuu1228さんが説明されていた通り,現在OSvで
複数の言語ランタイム/アプライアンスが動作します.

CRubyも移植は一応の完成を見ることができ,動作させる事が可能です.
今回は動作方法について書きます.

じゅんび

まずはリポジトリのcloneから.
$ git clone http://github.com/cloudius-systems/osv.git osv
その後,忘れずsubmoduleをinit & updateしましょう
$ cd osv && git submodule --init update
ビルドのためには,いくつかパッケージが必要です.
https://github.com/cloudius-systems/osv/blob/master/README.md
に必要なパッケージはFedora,Debian,Archについて記述されています.

しかし,Fedora20を用意できるのであれば,osvのディレクトリで,
$ sudo ./script/setup.py
と実行すれば必要なパッケージを全て準備してくれます.

ビルド 

ビルドは単純です.
$ make -j`nprocs` image=ruby-example
このようにしたら,あとはビルドが終わるまで待機です.
なお,rubyのビルド中にエラーで失敗する時は,-jフラグを外してもう一度やってみてください.
まだrubyとosv kernelの並列ビルドがうまくいかない時があるようです(すみません)

実行

次のスクリプトでOSvは実行できます
$ ./script/run.py
どうでしょうか? うまくいけば
OSv v0.16-814d434
eth0: 192.168.1.89
Hello, world!
のように表示されます.
また,
$ ./script/run.py -e "/ruby.so /irb"
のように起動引数を手動で設定すれば,irbが実行できたりします.
apps/ruby-example/sample-codes/に,このビルドされたイメージファイルで他に
実行できるサンプルのrubyスクリプトもあるので,適当に指定してみたりして試してみてください.