Deepin Linux 上用虚拟机试用 Windows 11

此文小结在一台8年老机上安装的 Deepin Linux 20.2.2 中,用 swtpm 模拟 Windows 11 需要的 TPM2.0 模块,在 Qemu + Libvirt 或纯 Qemu 虚拟机安装 Windows 预览版官方镜像并更新到 Windows 11。在 Windows 11 预览版中试用其中的 Linux 子系统(WSL)和WSL的图形界面程序(WSLg),Hyper-V 上安装 Debian、Ubuntu,借助 TPM 模块的 bitlocker 磁盘加密,在 Linux LiveCD 中使用 dislocker 挂载 Windows 的 bitlocker 加密磁盘。

一、宿主机配置
使用的物理机为一台 2013年的机器,CPU i7-4770,内存 16G,无 TPM 模块,无独立显卡。安装的操作系统为 Deepin Linux 20.2.2。
首先在 BIOS 里开启 CPU 虚拟化技术支持。
然后在 Deepin Linux 上安装了 Qemu + Libvirt 的虚拟机相关软件,命令:

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

因为缺乏 Windows 11 需要的硬件 TPM 2.0 模块,所以安装 swtpm 进行软件模拟。目前 Debian 仓库里还没有收纳 swtpm,所以可以编译安装。编译安装的步骤参见: https://www.jianshu.com/p/44bb54e7d4aa
另外,经我测试,Deepin Linux 中的 Qemu 3.1 似乎不支持 swtpm,这里更新安装了 debian buster-backports 中的 Qemu 5.2 。在 /etc/apt/sources.list 中加入软件源: deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
然后,sudo apt update。接着更新 Qemu:

for p in $(dpkg -l | grep qemu | awk '{print $2}'); do sudo apt -t buster-backports install ${p} -y; done

最后,在 /etc/apt/sources.list 中注释掉先前加入的 buster-backports 软件源,再执行一次 sudo apt update。
为了更好的在虚拟机和物理机之间互访,建立桥接网络,参见:BridgeNetworkConnections https://wiki.debian.org/BridgeNetworkConnections
/etc/network/interfaces 内容示例:

auto lo
iface lo inet loopback

auto enp3s0
allow-hotplug enp3s0
iface enp3s0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.123/24
        gateway 192.168.1.1
        bridge_ports enp3s0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

另外,在 virt-manager 中启动添加了 tpm2.0 模块的虚拟机时,会报启动 swtpm 失败的错,解决方法是添加下列两行到文件 /etc/apparmor.d/abstractions/libvirt-qemu 中:

 /var/lib/libvirt/swtpm/** krw,
 /var/log/swtpm/** rw,

为了让 Windows 11 虚拟机里面可以使用 WSL 和安装运行虚拟机,需要设置 Deepin Linux 支持嵌套虚拟化,我的方法是在 /etc/rc.local 中添加下列两行:

modprobe -r kvm_intel
 modprobe kvm_intel nested=1

宿主机成功开启嵌套虚拟化的标志是 cat /sys/module/kvm_intel/parameters/nested 输出 “Y”,否则会输出“N”。

如此,Deepin Linux 宿主机上的设置完成。

二、安装 Windows 11 预览版虚拟机
首先在微软官方下载最新版的预览版ISO光盘镜像文件: https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso 可以选择版本和语言,我当时下载的是简体中文企业预览版,文件名为:Windows10_InsiderPreview_EnterpriseVL_x64_zh-cn_21354.iso。从文件名看还是 Windows 10。
然后下载虚拟机需要的驱动程序 ISO 光盘镜像文件:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio ,我下载的文件是:virtio-win-0.1.190.iso 。
接着在 virt-manager 中创建虚拟机,要点是:创建过程中选择“在安装前自定义配置”、使用UEFI固件、CPU配置选择“复制主机CPU配置”、磁盘总线选择“VirtIO”、添加前面下载的预览版系统和驱动程序光盘镜像、网卡选择前面创建的“桥接br0”、网卡型号选择“e1000e”、添加 TPM v2.0设备。其它按程序默认的就行。我物理机上没有 TPM 模块,所以添加的是前面 swtpm 模拟的,类型:Emulated device,Version:2.0,型号:TIS。
接下来,按照常规的方法安装完成就行了。其中安装过程中需要加载驱动程序光盘中的VirtIO磁盘驱动 amd64\w10\viostor.inf。
安装完预览版后,接下来就是把系统更新到 Windows 11 预览版就行了。这里需要在开始菜单中 的“设置”->“Windows更新”->“Windows预览体验计划”中登录“Windows预览体验成员帐户”,选择预览体验成员设置,有“Dev 渠道”和“Beta 渠道”两个选项,我选的是“Dev 渠道”。在这个页面上,你可能会看见有“你的电脑不符合建议的 Windows 11 最低硬件要求”的提示,不用管它。只要页面上有 Dev 和 Beta 两个渠道供选择,应该就能更新到 Windows 11 预览版。这时,在 “设置”->“Windows更新” 中就能看到 Windows 11 的更新内容,下载并安装更新就行了。如果系统中没有 TPM 模块,将不会有 Dev 和 Beta 渠道供选择,也不会出现升级到 Windows 11 的更新内容。
接下来,执行加载的驱动程序光盘中的 virtio-win-guest-tools.exe,完成后显示分辨率就正常了。重启进入更新后的 Windows 11 预览版,我们就可以试用一下里面的一些功能了。

当然,网上也有绕过 Windows 11 TPM 2.0 检测的方法,参见:How to install Windows 11 without a TPM 2.0 chip https://www.techadvisor.com/how-to/windows/windows-11-tpm-2-0-requirement-3806413/

三、试用 Windows 11 预览版
1、Linux 子系统(WSL)和WSL的图形界面程序(WSLg)
需要启用“适用于 Linux 的 Windows 子系统”和“虚拟机平台” Windows 功能,然后在 "Microsoft Store"中搜索安装你需要的发行版即可,我安装的是 Debian。然后,以管理员权限打开 PowerShell,执行

wsl --update

更新 wsl,完成后执行

wsl --shutdown

。如果不执行上面二步命令,在运行 Debian 时可能会报“0x800701bc”错误。在开始菜单的应用中点击 Debian 即可执行,然后可以执行一系列常规的 Linux 操作。值得注意的是,里面是没有 Systemd 相关组件的。Debian 里为了下载软件速度考虑,建议把软件源换成国内的。我这里是修改 /etc/apt/sources.list,把里面的源统统换成了 mirrors.aliyun.com 域名前缀。
接下来,在 Debian 里面安装图形界面程序,例如:sudo apt install gedit,安装完成后,直接在命令行输入 gedit 或者点击 Windows 的开始菜单 Debian 文件夹中的“文本编辑器(Debian)”就行了。

2、Hyper-V
启动 “Hyper-V” Windows 功能即可。方法同 VirtualBox 、VMWare 类似,这里就不详述了。我在上面试用了 Ubuntu 20.04 和 Debian 10。其中 Debian 10 默认使用了 Wayland 模式,在我的虚拟机上不能进入 gnome 桌面,去掉 /etc/gdm3/daemon.conf 里 WaylandEnable=false 的注释,让 Debian 10 使用 Xorg 就行了。Ubuntu 20.04 默认使用的是 Xorg 模式,可以进入桌面。

3、bitlocker 磁盘加密
在有 tpm 模块时,可以直接执行 bitlocker 加密磁盘,启动系统时不必输入磁盘解锁密码。没有 tpm 时,必须在组策略编辑器(gpedit.msc)中特别的设置一下,而且必须设置一个且启动系统时必须输入的解锁磁盘密码。这个密码与登录系统帐户的密码是不同的。 在 Linux LiveCD 中使用 dislocker 挂载 Windows 的 bitlocker 加密磁盘。

总的来说,在 Deepin Linux 下是可以用 swtpm + Qemu + Libvirt 虚拟一个 Windows 11 预览版的环境,可以测试一些 Windows 11 中的高级功能。

四、使用 swtpm + Qemu + remote-viewer 的方式运行虚拟机
1、示例启动脚本

#!/bin/sh

[ ! -d /home/user/images/mytpm0 ] && mkdir /home/user/images/mytpm0

swtpm socket --tpm2 --tpmstate dir=/home/user/images/mytpm0 \
         --ctrl type=unixio,path=/home/user/images/mytpm0/swtpm-sock \
         --log level=20 &

sleep 5s && \
qemu-system-x86_64 \
  -enable-kvm \
  -machine q35 \
  -bios /home/user/images/OVMF/OVMF_CODE.fd \
  -cpu host \
  -smp 4 \
  -m 8G \
  -chardev socket,id=chrtpm,path=/home/user/images/mytpm0/swtpm-sock \
  -tpmdev emulator,id=tpm0,chardev=chrtpm \
  -device tpm-tis,tpmdev=tpm0 \
  -machine usb=on \
  -device usb-tablet \
  -display default \
  -vga qxl \
  -soundhw hda \
  -device e1000,netdev=net0 \
  -netdev user,id=net0,net=192.168.20.0/24,dhcpstart=192.168.20.20 \
  -drive file=/home/user/images/windows11.qcow2,if=virtio \
  -drive file=/home/user/downloads/distros/virtio-win-0.1.190.iso,index=1,media=cdrom \
  -drive file=/home/user/downloads/distros/Windows10_InsiderPreview_EnterpriseVL_x64_zh-cn_21354.iso,index=2,media=cdrom \
  -spice port=8891,addr=localhost,disable-ticketing

exit 0

2、连接虚拟机
执行 remote-viewer spice://localhost:8891 即可。

五、参考链接
1、
Software TPM Emulator For QEMU
https://en.opensuse.org/Software_TPM_Emulator_For_QEMU
2、
在 Debian 下编译安装 swtpm
https://www.jianshu.com/p/44bb54e7d4aa
3、
Windows Insider Preview Downloads
https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso
4、
Starting the qemu image fails on Ubuntu 18.04 #24
https://github.com/clipos/bugs/issues/24
5、
使用 QEMU 尝鲜 Windows 11
https://linux.cn/article-13523-1.html
6、
How to install Windows 11 without a TPM 2.0 chip
https://www.techadvisor.com/how-to/windows/windows-11-tpm-2-0-requirement-3806413/
7、
Installing Virtio Drivers In Windows On KVM
http://www.zeta.systems/blog/2018/07/03/Installing-Virtio-Drivers-In-Windows-On-KVM/
8、
Run Linux GUI apps on the Windows Subsystem for Linux (preview)
https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
9、
Open Bitlocker Drive on Linux
https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/

发表评论

电子邮件地址不会被公开。 必填项已用*标注