mruby専用クラウドOS「μOSv」を作りました
追記:μOSvはOSv本家にマージされました。
こちらのWikiの「OSvをビルドしてより多くのアプリを試す」以下を参照して下さい。
μOSvというものをgithubで公開したので、ここに簡単な説明を書いておきます。
実行イメージ動画:
これは何?(OSvを知らない人向けの説明)
ローカルマシン上のKVM・Xenや一部の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のissuesやTwitterなどでガンガン報告して下さい。
Ubuntu 13.10+KVM以外の環境では全くテストされていないので、他の環境でも試して頂けると助かります(※ただし、KVM・Xen以外のVMMでは動きませんのでご了承下さい)。
μOSvのmrubyで使えるAPIは?
build_config.rbでconf.gemされているものだけが動作します。
このmrbgemsも入れてくれ、という要望はgithubのissuesに書くか、黙ってポーティングしてpull requestして下さい。
ライセンス?
ごった煮なので流用しているコードによって複数の種類のライセンスが適用されていますが、いわゆるオープンソースです。
(GPLは混じっているかもしれません、そのうち整理しようと思います)
基本的にmruby関係はほぼMIT、OSv関係はほぼBSDLです。
product | dependencies | license |
---|---|---|
OSv | FreeBSD, ZFS, Prex, Musl | BSDL |
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-uv | libuv | MIT |
libuv | - | MIT |
mruby-http | mruby-uv | MIT |
mruby-json | - | MIT |
mruby-msgpack-rpc | mruby-socket,mruby-msgpack | MIT |
mruby-yaml | libyaml | MIT |
libyaml | - | MIT |
mruby-base64 | - | MIT |
mruby-md5 | - | MIT |
mruby-vedis | - | Sleepycat License |
mruby-sleep | - | MIT |
mruby-simplehttp | - | MIT |
mruby-httprequest | - | MIT |
mruby-aws-s3 | mruby-uv, mruby-http, mruby-digest, mruby-pack, mruby-simplehttp, mruby-httprequest | MIT |
mruby-cfunc | libffi | MIT |
libffi | mruby-cfunc | MIT |
μOSv build scripts | - | MIT |
mruby-eshell | mruby-io,mruby-dir,mruby-ipaddr | MIT |
これらのコピーレフトなモジュールはデフォルトで無効にされています。
product | dependencies | license |
---|---|---|
mruby-polarssl | PolarSSL | LGPLv3 |
PolarSSL | - | GPL/Commercial(Dual) |
mruby-sha1 | - | GPL |