给 PVE 添加 TPM
本文已过时
PVE 官方现已支持 TPM 1.2/2.0,且支持 WebUI 交互,所以本文的内容已经过时。
依赖
- PVE
- libtpms
- swtpm
- 支持 TPM 的 pve-edk2-firmware,没有这个在 Windows 11 上会报 该设备无法启动。 (代码 10) 在驱动程序与设备间检测到协议错误。
编译
以 root 用户登陆 PVE 的 shell
libtpms 和 swtpm 部分参考自 azhuge233’s
libtpms
1 | apt -y install automake autoconf libtool gcc build-essential libssl-dev dh-exec pkg-config dh-autoreconf gawk |
swtpm
1 | apt -y install libfuse-dev libglib2.0-dev libgmp-dev expect libtasn1-dev socat tpm-tools python3-twisted gnutls-dev gnutls-bin libjson-glib-dev python3-setuptools softhsm2 libseccomp-dev |
systemd 服务
1 | cat > /etc/systemd/system/swtpm@.service <<-EOF |
注意:建议 socket 文件不要放在 /var/run/qemu-server/
底下,而是直接放在 /var/run/
例子:systemctl enable --now swtpm@101.service
对应的就是 /var/run/swtpm-101.sock
, 之所以会这么设计服务是因为只能一个虚拟机对应一个 swtpm 服务(建议与客户机ID对应
pve-edk2-firmware
成品包:pve-edk2-firmware/releases
自编译:
1 | apt install -y bc debhelper gcc-aarch64-linux-gnu iasl nasm python3 python3-distutils uuid-dev |
客户机配置
vim /etc/pve/qemu-server/客户机ID.conf
在文件顶部加上
1 | args: -chardev socket,id=chrtpm,path=/var/run/swtpm-%i.sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 |