メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

MirageOS Unikernelでデータベース

前回は、MirageOSのチュートリアルとして用意されているWebサーバ「static website tls」をローカルで立ち上げ、テキストベースのWebブラウザLynxを使用し、WebサーバへのHTTPアクセスを成功させた。
ここまで来たら、次はファイルサーバやAPサーバだな、という事でMirageOSのGithub内を探してみたら、Irminを見つけた。README.mdを見るとデータベースとの事。
MirageOSのお試しとして不足無し...という事で、今回はOcamlで書かれたデータベースIrminの導入を試みた。
データベースは予備知識ほぼゼロな状態で業務・個人環境共に初めて触れる為、今回はIrminの導入と簡単なデータ(文字列)の出し入れに留めた。

※前回:https://debslink.hatenadiary.jp/entry/20200726/1595768920 (MirageOS UnikernelでWebサーバ)
※前々回:https://debslink.hatenadiary.jp/entry/20200718/1595076105 (Ubuntu 20.04でMirageOS Unikernel)


当方の環境
ホストOS:Windows10 64bit版 / RAM: 8GB / CPU: Intel Core i5 M460 2.53GHz
ゲストOS:Ubuntu Server 20.04 x86 64bit版
Virtualbox 5.2.32
MirageOS 3.8.0
OCaml 4.10.0
今回よりホスト機のOSがWindows7 32bit版からWindows10 64bit版に変更。
Ubuntu Linuxは既にデプロイ済みである事とする。
PCのCPU仮想化支援機構はBIOSにて既に有効設定済みである事とする。
Ubuntu Linuxのカーネルやバージョンやインストール済みのツール等は、前回のWebサーバ構築以降変えていない。


MirageOSのインストール
MirageOSインストールの準備、opamの環境設定、MirageOSのインストールに関しては、以下のリンク先を参照。
https://debslink.hatenadiary.jp/entry/20200718/1595076105


データベース Irminのインストール
Irminとはgitライクなデータベースで、OCamlで書かれている。
MirageOSプロジェクトの中の一つである為、UnikernelsやMirageOSがメジャーな存在になる、OCaml以外の他の言語で再作成される等のような事が無い限り、今後も存在自体が多くのプログラマやデータベースエンジニア達に気付かれる事は無いだろう。
Irminの特徴や使い方は下記のリンク先を参照する事とし、インストールを開始。

Irminのインストールは非常に簡単で、opam install irmin-unixコマンドを実行すればIrminと実行に必要なパッケージが自動でダウンロードとインストールされる。
自分の環境では、Irminとコマンドラインツール、動作に必要なパッケージ群を一度にインストールする為、opam install irmin-unixを実行。
インストールに関しては選択肢が有り、ミニマルインストールで良い場合はopam install irminコマンド、インメモリーデータベースで良い場合はopam install irmin-memコマンドを実行する。

eval $(opam env)を打って環境変数の設定後、まずはopamコンパイラのバージョンを確認。インストールされているのは最新版の4.10。

$ eval $(opam env)
$ opam switch list
#  switch   compiler                    description
→  4.10.0   ocaml-base-compiler.4.10.0  4.10.0
   default  ocaml-system.4.08.1         default
$


MirageOSのバージョンを確認。最新版の3.8.0である事が分かる。

$ mirage --version
v3.8.0
$ 


実行環境の確認を終えたら、Irminのインストールに進む。
Irmitのインストールに伴い、動作に必要なパッケージが自動で追加ダウンロードとインストールが実行される。DebianやUbuntuのaptコマンドのようで楽。
Do you want to continue? と聞かれたらyキーを叩いて、ダウンロードとインストールを進める。

$ opam install irmin-unix
The following actions will be performed:
  ? install conf-pkg-config         1.2          [required by ctypes]
  ? install dispatch                0.4.1        [required by webmachine]
  ? install base64                  3.4.0        [required by irmin]
  ? install menhirLib               20200624     [required by menhir]
  ? install uchar                   0.0.2        [required by jsonm]
:
省略
:
  ? install git-http                2.1.3        [required by git-unix]
  ? install conduit-lwt-unix        2.2.2        [required by cohttp-lwt-unix]
  ? install cohttp-lwt-unix         2.5.4        [required by git-unix]
  ? install git-unix                2.1.3        [required by irmin-unix]
  ? install irmin-unix              2.2.0
===== ? 77 =====
Do you want to continue? [Y/n] y


yキーを叩いた後、Irmin含め、77個のパッケージのダウンロードとインストールが開始される。

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[base64.3.4.0] downloaded from cache at https://opam.ocaml.org/cache
[angstrom.0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[bigarray-compat.1.0.0] downloaded from cache at https://opam.ocaml.org/cache
[base.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[bigarray-overlap.0.2.0] downloaded from cache at https://opam.ocaml.org/cache
:
省略
:
? installed graphql.0.13.0
? installed graphql-cohttp.0.13.0
? installed graphql-lwt.0.13.0
? installed irmin-graphql.2.2.0
? installed irmin-unix.2.2.0
Done.
$


これでIrminのインストールが完了。今回よりホスト機をスペックが高いPCに替えた事も有ってか、早く完了した。
インストールが成功すると、以下のようにIrminのバージョンを確認出来る。

$ irmin --version
2.2.0
$



Irminの動作確認
インストール後、Irminのチュートリアルページの内容を参考に、IrminのCLIで簡単な動作確認。
irmin initコマンドで初期化後、新規にストアを作成しIrmin TESTという文字列の出し入れを行ってみた。

$ cd .opam/4.10.0/.opam-switch/sources/irmin-unix.2.2.0
$ echo "root: ." > irmin.yml
$
$ irmin init
$ irmin set foo/bar "Irmin TEST"
$ irmin get foo/bar
Irmin TEST
$


また、Irminはgitライクなデータベースをうたっている事もあり、gitコマンドを絡めて以下のように文字列の出し入れのような事も出来る。

$ export EXAMPLE=/tmp/irmin/example
$ mkdir -p $EXAMPLE
$
$ irmin set -s git --root $EXAMPLE "My key" "My value"
$ irmin get -s git --root $EXAMPLE "My key"
My value
$


今回の構成は以下の図のとおり。
今までとは異なり、Ubuntu LinuxとMirageOSとの間にSolo5環境は存在しない。




今回の振り返り。
簡単な文字列の出し入れのみではあるが、データベース「Irmin」の実行および簡単な文字列の出し入れに成功した。
opam installコマンドだけでIrminや動作に必要なパッケージのインストールや初期設定が自動で実行され、導入自体は拍子抜けする程楽だった。
Irminをデータベースの学習のきっかけとして今後も触れてみるかと言うと、IrminはOCamlの知識が前提となっている上、巷では多く導入されているMySQLやOracle等とは方向性が異なるもののようなので、こういった物もMirageOSで動作させる事が出来るんだよ...といった程度で収めようと思う。


リンク先
https://mirage.io/ Mirage OS
https://github.com/mirage Mirage OS (github)
https://ocaml.org/ OCaml
https://releases.ubuntu.com/20.04/ Ubuntu 20.04
https://irmin.org/ Irmin
https://github.com/mirage/irmin Irmin (github)

過去のMirageOSのエントリ
https://debslink.hatenadiary.jp/entry/20200726/1595768920 前回:MirageOS UnikernelでWebサーバ
https://debslink.hatenadiary.jp/entry/20200718/1595076105 前々回:Ubuntu 20.04でMirageOS Unikernel
https://debslink.hatenadiary.jp/entry/20200526/1590495778 前々々回:MirageOS Unikernelで通信プログラムの実行
https://debslink.hatenadiary.jp/entry/20200516/1589616362 初回:MirageOSのインストールとHello Worldの実行

自分にとって、UnikernelsやMirageOSの始めの一歩となったサイト (MirageOS のインストールから Hello World までを試す)
https://qiita.com/t-imada/items/6ee299653ac063532b4f