Hatena::ブログ(Diary)

かーねる・う゛いえむにっき このページをアンテナに追加 RSSフィード Twitter

2013-11-13

[][]mruby専用クラウドOS「μOSv」を作りました

追記:μOSvはOSv本家マージされました。

こちらのWikiの「OSvをビルドしてより多くのアプリを試す」以下を参照して下さい。



μOSvというものをgithubで公開したので、ここに簡単な説明を書いておきます。

実行イメージ動画

D

これは何?(OSvを知らない人向けの説明)

ローカルマシン上のKVMXenや一部のIaaSサービスVPSなどで走る、mrubyスクリプトを実行する事のみに特化されたOSです。

mrubyインタプリタの実行に汎用OS必要としないため、とても少ないメモリ使用量(今のところ90MB以上なら動く)・ディスクイメージサイズ(今のところ26MB)・とても速い起動時間(今のところ2秒くらい)で動作します。

mrubyなのでRubyで使えるAPIが全て使えるわけではありませんが、ネットワークアクセスを行う小さなアプリケーションであればLinux上で動作するRubyスクリプトを作るのに近いイメージで気軽にスクリプトを書くことが出来ます。

OSvというJavaアプリケーション専用のオープンソースなOSを改造して実装しています。

OSvを知っている人向けの説明

OSvのビルド設定を弄ってOpenJDKやJavaアプリケーションを取り外し、ZFS無効化し、代わりにmrubyを実行するようにしたものです。

実際にはOSvのforkではなく、OSvのビルドステージを改造するシェルスクリプトを配布しているものです(厳密には、"module support" patchが未マージなために本家のosvリポジトリを使用していませんが、マージされればこれは解消できます)。

オリジナルのOSvで使われているCRaSHシェルJava実装であるため、これは削除して代わりにmrubyで書いた小さなシェル実装しました(今のところlsとmrubyプログラム実行くらいしか出来ませんが)。

残念ながらssh/sftpには対応していませんが、代わりにユーザが書いたmrubyスクリプトディスクイメージに書き込む仕組みと、シェルからmrubyプログラムを実行する機能を備えています。

ビルド方法、実行方法など

githubのREADME.mdを読んで下さい。

現状ではμOSvの大本となっているOSvやmruby、各種mrbgemsも含めて何もかもが開発途上バージョンなため、ビルド失敗や実行時エラーなどが普通に起こるので、githubのissuesTwitterなどでガンガン報告して下さい。

Ubuntu 13.10+KVM以外の環境では全くテストされていないので、他の環境でも試して頂けると助かります(※ただし、KVMXen以外のVMMでは動きませんのでご了承下さい)。

μOSvのmrubyで使えるAPIは?

build_config.rbでconf.gemされているものだけが動作します。

このmrbgemsも入れてくれ、という要望githubのissuesに書くか、黙ってポーティングしてpull requestして下さい。

ライセンス

ごった煮なので流用しているコードによって複数の種類のライセンス適用されていますが、いわゆるオープンソースです。

GPLは混じっているかもしれません、そのうち整理しようと思います)

基本的にmruby関係はほぼMIT、OSv関係はほぼBSDLです。

productdependencieslicense
OSvFreeBSD, ZFS, Prex, MuslBSDL
FreeBSD-BSDL
ZFS(disabled)-CDDL
Prex-MIT
Musl-MIT, BSDL
mruby-MIT
mruby-dir-MIT
mruby-env-MIT
mruby-errno-MIT
mruby-ipaddr-MIT
mruby-mock-MIT
mruby-mtest-MIT
mruby-pack-MIT
mruby-process-MIT
mruby-regexp-pcre-MIT
mruby-require-MIT
mruby-simple-random-MIT
mruby-socket-MIT
mruby-tempfile-MIT
mruby-msgpack-MIT
mruby-uvlibuvMIT
libuv-MIT
mruby-httpmruby-uvMIT
mruby-json-MIT
mruby-msgpack-rpcmruby-socket,mruby-msgpackMIT
mruby-yamllibyamlMIT
libyaml-MIT
mruby-base64-MIT
mruby-md5-MIT
mruby-vedis-Sleepycat License
mruby-sleep-MIT
mruby-simplehttp-MIT
mruby-httprequest-MIT
mruby-aws-s3mruby-uv, mruby-http, mruby-digest, mruby-pack, mruby-simplehttp, mruby-httprequestMIT
mruby-cfunclibffiMIT
libffimruby-cfuncMIT
μOSv build scripts-MIT
mruby-eshellmruby-io,mruby-dir,mruby-ipaddrMIT

これらのコピーレフトなモジュールはデフォルト無効にされています。

productdependencieslicense
mruby-polarsslPolarSSLLGPLv3
PolarSSL-GPL/Commercial(Dual)
mruby-sha1-GPL

現状の問題点

  • mruby-libuvがまだ不安定でOSvへ移植したlibuvが未だ不安定なため、mruby-uvを使用するとOSvが落ちる事があります。
  • OSvに含まれていたZFSを外してしまったので、ramfsしか搭載していません。ファイルを書き込むことは可能ですが、再起動シャットダウンデータが失われます。ZFSを再び有効化するのは簡単ですが、大量のメモリを消費してしまうのでμOSvの用途に合いません。

kyabkyab 2013/11/14 18:12 リンクが切れているような、、、
https://github.com/syuu1228/osv-mruby/blob/master/build_config.rb:build_config.rb

takahashimtakahashim 2013/11/17 12:12 「ライセンス?」のところのSleepycat Licenseについて、これは見た目はBSDスタイルライセンスに似てますが、コピーレフト条項があります。 http://en.wikipedia.org/wiki/Sleepycat_License

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証