環境

  • ホストOS: Debian 10 buster ※要デスクトップ環境

前提条件の確認

仮想化機能が有効になっているか確認

1
2
$ lscpu | grep -Ei "(vt-x|amd-v)"
Virtualization: VT-x

KVM カーネルモジュールが有効になっているか確認

1
2
3
4
$ lsmod | grep kvm
kvm_intel 233472 4
kvm 757760 1 kvm_intel
irqbypass 16384 2 kvm

/dev/kvmにアクセス出来るか確認。Debianでは kvmグループになっていたので、 kvmグループに実行ユーザを登録

1
2
3
4
5
$ ls -l /dev/kvm
crw-rw----+ 1 root kvm 10, 232 4月 8 21:06 /dev/kvm

$ sudo gpasswd -a $(whoami) kvm
ユーザ xxxx をグループ kvm に追加

isoイメージを入手する

Windowsとvirtioのisoをそれぞれ入手します

1
2
$ ls *.iso
Windows.iso virtio-win-0.1.141.iso

Qemu: インストール

ここまで問題なければ、Qemuのインストール

1
$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin libguestfs-tools virt-top

インストール後、動作確認

1
2
3
$ qemu-system-x86_64 -version
QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-8+deb10u8)
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers

Qemu: 仮想ハードディスクイメージの作成

ここでは、 hdd.imgという名前でディスクイメージを作成します。ディスクサイズなどは適宜置き換えて下さい

1
$ qemu-img create -f qcow2 hdd.img 40G

Qemu: Windowsインストーラの起動

先ほどダウンロードした、 Windows.isoと、 virtio-win-0.1.141.isoをマウントしつつ、仮想マシンを起動します

1
2
3
4
5
6
7
$ sudo qemu-system-x86_64 -enable-kvm \
-machine q35 -smp sockets=1,cores=1,threads=2 -m 2048 \
-usb -device usb-kbd -device usb-tablet -rtc base=localtime \
-net nic,model=virtio -net user,hostfwd=tcp::4444-:4444 \
-drive file=hdd.img,media=disk,if=virtio \
-drive file=Windows.iso,media=cdrom \
-drive file=virtio-win-0.1.141.iso,media=cdrom

今回、Selenium用にビルドしたため、 hostfwd=tcp::4444-:4444をつけていますが、この部分は省いてもよいかもしれません

Windows: インストール

001

インストーラが起動したらインストールを進めます

002

途中でカスタムインストールを選択し、virtioのドライバをインストールします

003

マウントされている virtio-win-0.1.141.iso(Eドライブ)から、 viostor > w10 と進み、構築しているマシンのアーキテクチャと同じのを選びます

あとは、「次へ」を押していくとインストールが始まります

Windows: ゲストからインターネットにつなぐ

004

インストールが完了したら、ゲストOSからネットに繋ぐために、仮想ネットワークカードのドライバを更新します

005

[管理] → [デバイスマネージャ]に、イーサネットコントローラというのがあるので、ドライバを更新します

006

ドライバはマウントしてある virtio-win-0.1.141.iso(Eドライブ)にあります

007

Red Hat VartIO Ethernet Adapterというのが見つかるのでインストールします

Edgeブラウザを開いてTwitterとかに適当にアクセスして見れたら終了です