在 Proxmox VE 中添加 vTPM 的支持

本文章同步发布于
https://williamgong.github.io/2021/06/24/%E5%9C%A8pve%E4%B8%AD%E5%A2%9E%E5%8A%A0%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AF%B9tpm%E7%9A%84%E6%94%AF%E6%8C%81/

!!注意 !!

PVE 7.0 已经添加了 TPM 支持,只需在 Web 界面添加设备即可。
本文已经过时!
本文已经过时!
本文已经过时!

前言

虽然 Windows 11 的镜像早就泄露了,但在 6 月 24 日 23 点 Microsoft 才正式发布。发布会结束后,MS 官网放出了 Windows 11 的系统要求,其中一个必须要求是 TPM 2.0。
然而,Proxmox VE 并没有官方支持 vTPM , 虽然有qemu 有相应支持,但网上对此的文档很少。因此,本文在此写出让 PVE 支持 qemu vTPM 的方法以在虚拟机安装 Windows 11 预览版。

关于 Proxmox VE 对 TPM 虚拟化的支持

目前,qemu 已经通过 swtpm 支持了 vTPM ,但Proxmox 对此的支持还在开发中,并且预期时间未知。(Proxmox 工作人员的最近回复在今年 1 月。)
但可以安装 swtpm 并手动改配置文件,就是有亿点麻烦。
具体情况见这里
不过 PVE 对 qemu vTPM 支持的要求已经上 bug 追踪列表了。耐心等吧,总会有的。
Bugzilla – Bug 3075

编译与安装 swtpm

在 Debian 下编译安装 swtpm

下载源码

swtpm 有一个依赖 libtpms 也需要单独编译安装,这里也一起安装了。
swtpm 的源码:

git clone https://github.com/stefanberger/swtpm.git

libtpms 的源码:

git clone https://github.com/stefanberger/libtpms.git

签出到稳定分支

查看分支

$ git branch -a

签出时选择最新的稳定版即可。
在写这篇文章时最新版是0.6

$ git checkout stable-0.6

(这是签出 swtpm 的命令,libtpms 请自行选择版本)

编译安装 libtpms

安装依赖:

sudo apt-get -y install automake autoconf libtool gcc build-essential libssl-dev dh-exec pkg-config gawk

编译:

./autogen.sh --with-openssl
mv debian/source debian/source.old
dpkg-buildpackage -us -uc -j4

之后回到父目录,就可以看见 libtpms 的 deb 包了。
安装:

sudo dpkg -i libtpms0_0*_amd64.deb libtpms-dev_0*_amd64.deb

编译 swtpm

安装依赖:

sudo apt-get -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

编译:

dpkg-buildpackage -us -uc -j$(nproc)

编译后软件包介绍

编译完成后,编译父目录会生成很多包,其中以下几个包是最终使用的:

  • libtpms-dev_*_amd64.deb 这个应该是 swtpm 的编译依赖,但还是装在生产环境上吧,我也不清楚。
  • libtpms0_*_amd64.deb
    以上两个包是 libtpms
  • swtpm-libs_*_amd64.deb
  • swtpm_*_amd64.deb
  • swtpm-tools_*_amd64.deb
    以上是 swtpm

其它的包就不用装了,用于 debug 的。

福利

已经有人写好一键安装脚本了,在这里:
rayures/vTPM
仅用于 Debian/Ubuntu。

Gentoo 下的编译

portage 中是有 swtpm 的 ebuild 的,但被~amd64 mask 了。

因此,生产环境慎用!!!

将 keyword 加入 /etc/portage/package.keywords

=app-crypt/swtpm-0.5.2 ~amd64
=dev-libs/libtpms-0.8.3 ~amd64

此时运行

sudo emerge --ask swtpm

即可。

在 PVE 中添加 swtpm 设备

首先当然是把编译好的 deb 包装到 PVE 上。
记得用dpkg --info看看依赖,尤其是swtpm-tools
在安装swtpm-tools时注意先安装它的依赖,不然 dpkg 后再安装依赖的话就会出现循环依赖。
swtpm 可以通过套接字/字符设备/CUSE 让 guest 访问 TPM。
此处使用这个脚本创建套接字设备:

#!/bin/bash

i=0
while [ -d /tmp/tpm$i ]; do
let i=i+1
done
tpm=/tmp/tpm$i

mkdir $tpm
echo "Starting $tpm"
sudo swtpm socket  -d --tpmstate dir=$tpm --tpm2 \
             --ctrl type=unixio,path=/$tpm/swtpm-sock &
sleep 2 # this should be changed to a netstat query

之后应该可以在/tmp/下看见设备。

为虚拟机添加设备

获取 VNC 端口号:

我也不知道这是什么,但后面添加参数需要这个数字,求大佬告知。

#!/bin/bash
vncport=0
port=5900
while nc -z 127.0.0.1 $port; do
    port=$((port + 1))
    vncport=$((vncport + 1))
done
echo $vncport

之后再虚拟机配置文件里加一行:

args: -drive file=${disk},format=raw,if=virtio,cache=none -chardev socket,id=chrtpm,path=/$tpm/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 -vnc :$nextvnc -m 2048

${disk}为虚拟机磁盘镜像路径,$tpm为 tpm 设备路径,$nextvnc是上面脚本的输出。全部为绝对路径。
启动虚拟机,就可以再 sealBIOS 里看到TPM 设置了。

关于脚本的说明

脚本不是我写的,原帖在这里:
S3hh's Blog
但该脚本似乎无法直接使用,于是我把它拆成上面的几个脚本和操作。

存在的问题

进行上述操作后,如果将虚拟机以裸机启动后再强行关机,会导致无法再启动,需要重新创建设备。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容