WHPXなqemuでAlpine Linuxを試す会
... とりあえずWHPXが正常に動くのか不安になってきたので、userlandまで起動はできたAlpine Linuxで試してみることにした。
ただ、手元ではWindows 10を未だにつかっていて、WHPX実装自体が既に古いのでホストをWin11にすることで改善する可能性はある。
セットアップ
適当にイメージを用意してセットアップする。
$ 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
普通に動いた
... つまり、 -cpu qemu64-v1
の範囲内なら正常って事なんだろうか。。ただ、 x86-64-v2
は既にamd64の最低ラインといっても良い気がするので、何とかインチキできないもんだろうか。。
細かい設定
とりあえず実運用できそうなので細かい設定を入れていく。
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 にある通り。
デスクトップ環境
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 もあるし。