Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/12/21 11:44:57.596 (台灣標準時)

NetBSD で NVMM を使って仮想機械を動かす方法

NetBSD で NVMM を使って仮想機械を動かす方法を記録しておくでござる。

NVMM モジュールのロード

NVMM モジュールをロードする必要があり、それは以下のようにすればよいでござる。


# modload nvmm

NVMM モジュールが期待通りにロードされたかどうかを確認するためには、以 下のようにすればよいでござる。


# modstat | grep nvmm
nvmm                       misc     filesys  -        0   35388 -

計算機の起動時に、自動で NVMM がロードされるようにするためには、以下の ようにすればよいようでござる。


# echo nvmm > /etc/modules.conf
# cat /etc/modules.conf 
nvmm

NVMM の状況を確認するためには、以下のようにすればよいでござる。


# nvmmctl identify
nvmm: Kernel API version 2
nvmm: State size 1008
nvmm: Max machines 128
nvmm: Max VCPUs per machine 256
nvmm: Max RAM per machine 128G
nvmm: Arch Mach conf 0
nvmm: Arch VCPU conf 0x3
nvmm: Guest FPU states 0x3

QEMU のインストール

NVMM を使って仮想機械を動かすためには QEMU が必要なので、 pkgsrc を使っ て QEMU をインストールするでござる。


# cd /usr/pkgsrc/emulators/qemu
# make install

QEMU を使ってみる

QEMU を使って、 NetBSD を動かしてみるでござる。以下のようにすれば、 ISO 9660 image から NetBSD のインストーラーが起動されるでござる。


# wget http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-10/latest/images/NetBSD-10.0_STABLE-amd64.iso
# qemu-system-x86_64 -accel nvmm -cpu max -smp cpus=4 -m 4G -display curses -cdrom /tmp/NetBSD-10.0_STABLE-amd64.iso

fig_202408/netbsd_nvmm_202408_00.png

仮想機械をインストールするための virtual disk を用意する

仮想機械をインストールするにあたって、 virtual disk を用意するでござる。 qemu-img コマンドを使って qcow2 フォーマットのイメージを作成するでござ る。以下のようにすればよいでござる。


# mkdir -p /vm/netbsd_01
# cd /vm/netbsd_01
# qemu-img create -f qcow2 netbsd_01.qcow2 128G
Formatting 'netbsd_01.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=137438953472 lazy_refcounts=off refcount_bits=16
# ls -lF netbsd_01.qcow2 
-rw-r--r--  1 root  wheel  198656 Aug  4 22:36 netbsd_01.qcow2
# wget http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-10/latest/images/NetBSD-10.0_STABLE-amd64.iso
# ls -lF
total 637860
-rw-r--r--  1 root  wheel  652765184 Jul 31 23:24 NetBSD-10.0_STABLE-amd64.iso
-rw-r--r--  1 root  wheel     198656 Aug  4 22:36 netbsd_01.qcow2
# chmod 600 netbsd_01.qcow2

bridge ネットワークの準備

guest がネットワークを利用できるようにするために、 tap と bridge を作 るでござる。


# ifconfig tap0 create
# ifconfig tap0 descr "NetBSD VM 01" up
# ifconfig bridge0 descr "Bridge for NetBSD VM 01" up
# brconfig bridge0 add tap0 add wm0
# ifconfig tap0 
tap0: flags=0x8943 mtu 1500
        ec_capabilities=0x5
        ec_enabled=0x1
        description: "NetBSD VM 01"
        address: f2:0b:a4:78:2a:8c
        status: no carrier
        inet6 fe80::f00b:a4ff:fe78:2a8c%tap0/64 flags 0x8 scopeid 0x3
# ifconfig bridge0
bridge0: flags=0x41 mtu 1500
        description: "Bridge for NetBSD VM 01"
        status: active

NetBSD を guest としてインストールする

NetBSD を guest としてインストールするでござる。


# vi netbsd_01_install.sh
# cat netbsd_01_install.sh 
/usr/pkg/bin/qemu-system-x86_64 \
  -accel nvmm \
  -cpu max -smp cpus=1 -m 2G \
  -display curses \
  -cdrom /vm/netbsd_01/NetBSD-10.0_STABLE-amd64.iso \
  -drive file=/vm/netbsd_01/netbsd_01.qcow2,if=none,id=hd0 \
  -device virtio-blk-pci,drive=hd0 \
  -object rng-random,filename=/dev/urandom,id=viornd0 \
  -device virtio-rng-pci,rng=viornd0 \
  -netdev tap,id=tap0,ifname=tap0,script=no -device virtio-net-pci,netdev=tap0
# sh netbsd_01_install.sh

通常通りのインストーラーが動き出すので、実ハードウェアに NetBSD をイン ストールする際と同じようにインストールすればよいでござる。 DHCP で IP アドレスをもらえるようになっているネットワークに接続されているならば、 ネットワークの設定は autoconfiguration を選べばよいでござる。

guest としてインストールした NetBSD を起動

インストールが終わったら、 guest の NetBSD を起動するでござる。


# vi netbsd_01_start.sh
# cat netbsd_01_start.sh
/usr/pkg/bin/qemu-system-x86_64 \
  -accel nvmm \
  -cpu max -smp cpus=1 -m 2G \
  -display curses \
  -drive file=/vm/netbsd_01/netbsd_01.qcow2,if=none,id=hd0 \
  -device virtio-blk-pci,drive=hd0 \
  -object rng-random,filename=/dev/urandom,id=viornd0 \
  -device virtio-rng-pci,rng=viornd0 \
  -netdev tap,id=tap0,ifname=tap0,script=no -device virtio-net-pci,netdev=tap0
# sh netbsd_01_start.sh

これで guest の NetBSD が起動するでござる。

参考文献



Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Misc___Taiwan/20240207_00.html
  4. Computer___Network/20230516_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Computer___Network/20230508_00.html
  8. Food___Taiwan/20220429_0.html
  9. Computer___Network/20240130_00.html
  10. Computer___NetBSD/20220817_3.html
  11. Computer___Python/20220410_0.html
  12. Computer___Network/20240416_00.html
  13. Computer___NetBSD/20230119_00.html
  14. Computer___Debian/20210223_1.html
  15. Computer___Python/20221013_0.html
  16. Computer___Python/20210124_0.html
  17. Computer___NetBSD/20220428_0.html
  18. Computer___NetBSD/20220818_1.html
  19. Computer___NetBSD/20240101_02.html
  20. Science___Math/20220420_0.html
  21. Computer___Python/20240101_00.html
  22. Computer___NetBSD/20220808_0.html
  23. Computer___TeX/20230503_00.html
  24. Science___Astronomy/20220503_0.html
  25. Computer___NetBSD/20230515_00.html
  26. Computer___Network/20220413_1.html
  27. Computer___NetBSD/20210127_0.html
  28. Computer___TeX/20231107_00.html
  29. Computer___Python/20220816_1.html
  30. Computer___Python/20230717_01.html


HTML file generated by Kinoshita Daisuke.