Open5

WHPXなqemuでAlpine Linuxを試す会

okuokuokuoku

... とりあえずWHPXが正常に動くのか不安になってきたので、userlandまで起動はできたAlpine Linuxで試してみることにした。

ただ、手元ではWindows 10を未だにつかっていて、WHPX実装自体が既に古いのでホストをWin11にすることで改善する可能性はある。

okuokuokuoku

セットアップ

適当にイメージを用意してセットアップする。

$ qemu-img create -f qcow2 alpine.qcow2 256G
qemu-system-x86_64.exe -machine q35 -cpu qemu64-v1 -accel whpx,kernel-irqchip=off \
  -vnc 127.0.0.1:5500,reverse=on -k ja \
  -cdrom f:/diskimages/alpine-virt-3.20.0-x86_64.iso -m 8192 -hdd alpine.qcow2

CPUを SandyBridge 等にすると起動しなかった。 root でログインして setup-alpine で普通にインストールできた。

Dockerのインストール

/etc/apk/repositories を編集して community を有効にしたあと、 apk update apk add docker

更に起動時に dockerd を起動するようにしておく:

# rc-update add docker boot

インストール直後は起動していないので、手動で起動する:

# service docker start
okuokuokuoku

普通に動いた

... つまり、 -cpu qemu64-v1 の範囲内なら正常って事なんだろうか。。ただ、 x86-64-v2 は既にamd64の最低ラインといっても良い気がするので、何とかインチキできないもんだろうか。。

okuokuokuoku

細かい設定

とりあえず実運用できそうなので細かい設定を入れていく。

qemu-system-x86_64.exe -vga virtio -machine q35 -smp 6 -cpu qemu64-v1 \
  -accel whpx,kernel-irqchip=off -vnc 127.0.0.1:5500,reverse=on -k ja -m 8192 \
  -netdev user,id=net1,hostfwd=tcp:127.0.0.1:5522-:22 -device virtio-net-pci,netdev=net1 \
  -drive file=alpine.qcow2,id=blk1,if=none -device virtio-blk-pci,drive=blk1

ストレージ

細かいチューニングオプションはどうしたもんかね。。

-drive file=alpine.qcow2,id=blk1,if=none -device virtio-blk-pci,drive=blk1

NICの設定

-drive file=alpine.qcow2,id=blk1,if=none -device virtio-blk-pci,drive=blk1

https://www.qemu.org/docs/master/system/invocation.html#hxtool-5 の通り、 hostfwd オプションを設定するとVM内で動作しているサーバーをホストに公開できる。

デバイスモデルはデフォルトではe1000なので virtio-net-pci に変更しておく。

起動の高速化

VMなのでchrony(NTPクライアント)は要らないね。

# rc-update del chronyd

当然カーネルを直接起動すればもっと早くなるけど、そこまでするべきかは何ともだな。。

DHCPは厳密には要らないので https://wiki.alpinelinux.org/wiki/Configure_Networking に従ってハードコードしてしまう。qemu側の設定のデフォルトは https://www.qemu.org/docs/master/system/devices/net.html にある通り。

okuokuokuoku

デスクトップ環境

Alpine LinuxにはGnomeもある。 https://wiki.alpinelinux.org/wiki/GNOME 。ただqemuのデフォルトだとポインタがズレるので -device virtio-tablet-pci を足してポインタの位置を合わせられるようにしておく必要がある。

これVirGL試す価値有りそうだな。。MSYSにvirglrenderer https://packages.msys2.org/package/mingw-w64-ucrt-x86_64-virglrenderer もANGLE https://packages.msys2.org/package/mingw-w64-ucrt-x86_64-angleproject もあるし。