Skip to content

ArchLinuxのQEMUにWindows 11

This content is a draft and will not be included in production builds.

Windows 11をダウンロードするからisoイメージをダウンロードしておく。

virtioを使う場合は、Creating Windows virtual machines using virtIO driversからISOイメージを落としておく。

Terminal window
sudo pacman -S qemu swtpm edk2-ovmf

イメージを作る。rawの方が早いけど、あまり容量を使いたくないし、NVMeなのでqcow2にする。

Terminal window
qemu-img create -f qcow2 win11.img 64G

CDからブート。

Terminal window
$ swtpm socket --tpmstate dir=s --ctrl type=unixio,path=s/swtpm-sock --tpm2 &
# QEMU_AUDIO_DRV=[none|alsa|coreaudio|dsound|oss|pa|sdl|spice|wav]
# pipewireがないので、paにする
$ qemu-system-x86_64 -m 4G -smp 2 -machine (q35,smm=on,)type=pc,accel=kvm \
-device nvme,drive=nvme0,serial=0 \
-drive file=win.img,cache=writethrough,id=nvme0,if=none \
#-device virtio-scsi-pci,id=scsi -device scsi-hd,drive=hd0 \
#-drive file=win.img,cache=writethrough,id=hd0,if=none,index=0 \
-device virtio-net-pci,netdev=ether0 \
-netdev user,id=ether0,net=10.0.2.0/24 \
(-usb -device usb-tablet)? \
-chardev socket,id=chrtpm,path=s/swtpm-sock \
-tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 \
-drive if=pflash,unit=0,format=raw,read-only=on,file=/usr/share/ovmf/x64/OVMF_CODE(.secboot).fd \
-drive if=pflash,unit=1,format=raw,file=/usr/share/ovmf/x64/OVMF_VARS.fd \
-global driver=cfi.pflash01,property=secure,value=on \
-global ICH9-LPC.disable_s3=0 \
-audiodev pa,id=snd0,server=/run/user/xxx/pulse/native \
-device intel-hda -device hda-duplex,audiodev=snd0 \
-vga virtio -display gtk,grab-on-hover=on,gl=on \
-drive file=Win11_Japanese_x64v1.iso,index=2,media=cdrom \
-drive file=virtio-win-0.1.215.iso,index=3,media=cdrom \
-boot order=d

なんかDNSに届かない。アダプタに直接8.8.8.8を設定すればできた。

Win10で、インストールするときにsdvirtioドライバは入れる。ethervirtioは使用不可アイコンが付いているので、E:ドライブを選択してスキャン。vgavirtioは「Microsoft基本ディスプレイアダプタ」で認識されているが、E:ドライブをスキャンするとRed Hat VirtIO GPU DOD controllerに更新できる。

サウンドは-soundhw hdaすると認識された。-soundhw helpでリストが取れる。

-bios /usr/share/ovmf/x64/OVMF_CODE.secboot.fdすると起動に失敗する。

Guest has not initialized the display (yet).

このオプションを外すと「要件を満たしていない」としてインストールできない。Win10をインストールして、診断プログラムを実行するとセキュアブートが必須だった。

q35,smm=on -global ICH9-LPC.disable_s3=1 https://github.com/quickemu-project/quickemu/issues/102

ライセンス認証 https://www.onebizlife.com/freewin10transfer-12297

  • OVMF.fd: OVMF_CODEとOVMF_VARSが一緒になったもの
  • OVMF_CODE.fd: コード実行部分だけ(loader)
  • OVMF_VARS.fd: 設定が反映される領域、一般的にはコピーして使う(nvram)

vaiants

  • secboot: セキュアブート
  • ms: MSの証明書を持ったloaderまたはnvram
    • secbootにsymlinkされている場合もある
  • SMM: System Management Modeをサポートしている
  • 4M: large pflash size

https://forums.opensuse.org/showthread.php/541312-Confused-about-the-difference-between-many-different-OVMF-bin-files-that-come-with-KVM-Installation

Fedora

Archのedk2パッケージはベンダーでもないしMSの証明書も持っていない。 なので.secboot.や.ms.なnvramが含まれていない。

https://koji.fedoraproject.org/koji/buildinfo?buildID=1954596

からRPMをダウンロードして、

Terminal window
sudo pacman -S rpmextract cpio
rpm2cpio edk2-ovmf-20220221gitb24306f15daa-4.fc36.noarch.rpm | unzstd
cpio -id <edk2-ovmf

ダメだった。