Mewz on libkrun - その5 Mewz on libkrun してみた
Mewz (WebAssembly x Unikernel) を libkrun で動かしてみた - 外部記憶装置 の詳細を記すシリーズ
- その1 libkrun を試す
- その2 libkrun の構造
- その3 Mewz 追加実装(Linux zeropage, kernel cmd params)
- その4 Mewz 追加実装(Virtio MMIO)
- その5 Mewz on libkrun してみた ← この記事
- その6 Mewz 追加実装(virtio-console)
- その7 virtio-vsock について
- その8 Mewz 追加実装(virtio-vsock)
- その9 TSI の仕組み
目次
ビルド
Mewz on libkrun 用のイメージを用いてビルドする。
$ git clone --recursive http://github.com/naoki9911/mewz-on-libkrun $ cd mewz-on-libkrun $ docker run --rm -v $(pwd):/work ghcr.io/naoki9911/mewz-on-libkrun:main /work/build.sh
Mewz on libkrun してみた
$ cd likbrun/examples
$ sudo LD_LIBRARY_PATH=../lib ./chroot_vm --net=passt dummy dummy
Don't run as root. Changing to nobody...
No routable interface for IPv6: IPv6 is disabled
Template interface: eth0 (IPv4)
MAC:
host: 00:15:5d:f5:94:7a
DHCP:
assign: 192.168.10.2
mask: 255.255.255.0
router: 192.168.10.1
DNS:
10.255.255.254
DNS search list:
tailbffcc.ts.net
[LOG INFO]: booted with linux zero page
[LOG INFO]: zeropage: e820_entries=2
[LOG INFO]: E820 Entry [1] addr=0x0 size=0x9fc00 type=1
[LOG INFO]: E820 Entry [2] addr=0x100000 size=0x20310001 type=1
[LOG INFO]: available memory: 14748000 - 20410001
[LOG INFO]: virtio_mmio device detected: addr=0xd0000000 size=0x1000 IRQ=5
[LOG INFO]: virtio_mmio device detected: addr=0xd0001000 size=0x1000 IRQ=6
[LOG INFO]: virtio_mmio device detected: addr=0xd0002000 size=0x1000 IRQ=7
[LOG INFO]: virtio_mmio device detected: addr=0xd0003000 size=0x1000 IRQ=8
[LOG INFO]: virtio_mmio device detected: addr=0xd0004000 size=0x1000 IRQ=9
[LOG INFO]: virtio.net: found mmio device
[LOG INFO]: mac: 5a:94:ef:e4:c:ee
[LOG INFO]: virtio.net: initialized mmio device
Listening on http://0.0.0.0:1234
別ターミナルで curl を実行する。
$ curl localhost:1234 Hello World!
完璧である(勝利)。
ここまでのまとめ
ここまでで Mewz を libkrun で動かし、Mewz 上で稼働する Web サーバーと通信することができた。 libkrun 自体は crun 等との連携も可能であり、libkrun を用いることで Mewz と、各種コンテナエンジンや Kubernetes との連携がさらに容易になると考えられる。
libkrun は virtio-fs を用いたホスト上のディレクトリのマウントや TSI (Transparent Socket Impersonation) というゲスト側で TCP/IP スタックを必要としない仕組みを持つ。
TSI については既に Mewz に組み込み動作させることには成功しているため、次回以降その詳細についてまとめる予定である。