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 |