アプリ+OSで数100kB!超小型のMirage OSをMacで試す

  • 投稿日:
  • 更新日:2017/03/31
  • by
  • カテゴリ: ,

Dockerはコンテナベースで軽量に仮想環境を運用できますが、Dockerが2016年に買収したUnikernel Systemsが普及を目指すUnikernelは「ライブラリOS」と言われ、さらに軽量にアプリケーションを仮想化することができます。

その仕組みは、実行させるアプリケーションに必要なカーネルのライブラリのみをリンクしてハイパーバイザ上で実行可能なイメージを作成するというものです。そのサイズの小型化は凄まじく、DNSで200kBしかありません。この200kBの中には、実行に必要なカーネルライブラリが全て含まれています。逆に言うと、必要なものしか含まれていないので、外から侵入する口もほとんど開いておらず、セキュリティにも比較的強いと言えます。

elephant-and-ant.png

そんなUnikernelの実装の一つ、Mirage OSをMacで試してみました。

Macで試す

Mirage OSのサンプルは公式ページに使い方が載っているので、それを参考に動かしてみます。

Mirage OSをMacにインストールするには、brewが必要なので、あらかじめインストールしておきます。

Mirage OSはOCamlという、関数型言語MLの方言を使っており、OCamlでプログラムします。OCamlはopamというパッケージマネージャを用いるため、brewでインストールします。

$ brew install opam
$ opam init
$ opam --version
1.2.2

私が試したopamのバージョンは上記のように1.2.2でした。

次に、opamを使ってmirageをインストールします。

その際、opamを使ってインストールしたファイルは~/.opam以下にインストールされるので、~/.opam/system/binにパスを通しておきます。

$ export PATH=$PATH:~/.opam/system/bin/
$ opam install mirage
$ mirage --version
2.9.1

mirageのバージョンは2.9.1でした。

次に、サンプル(Hello World)をダウンロードします。

$ git clone https://github.com/mirage/mirage-skeleton.git
$ cd mirage-skeleton/console

このサンプルをビルドしてみます。

$ mirage configure
[ERROR]
Failure: ocamlfind not found on path, but -no-ocamlfind not used.

なぜかエラーが出ます。ocamlfindというコマンドは~/.ocaml/system/binに入っているのですが、なぜかmirageコマンド内から参照されないようです。

これはStackoverflowを見ると環境変数の設定のようで、以下のようにすれば修正できます。

$ eval $(opam config env)
$ mirage configure
$ make

上では続いてビルドしています。

これで通常の実行可能バイナリができるので、以下のように実行できます。

$ ./mir-console
hello
world
hello
world
hello
world
hello
world
$

MirageはXen上で動作するので、本当はそうしたいところなのですが、ベアメタル環境(またはAWSなどのクラウド環境)が必要なので今回はお預け。

おまけ

導入したMirageおよびOCaml環境を消す方法。

$ opam remove -a mirage mirage-clock-unix mirage-logs
$ brew uninstall opam

でokです。

こちらもよく読まれています