vTPM环境部署(ubuntu)
注:1.系统:ubuntu16.04LTS
2.ISO镜像:/home/huanghaoxiang/ubuntu-server.iso
3.IMG路径:/home/TPM-Machine
4.Login: huanghaoxiang1
5.password: huanghaoxiang1
安装之前:
一:安装依赖包:
apt-get install build-essential libtool automake \
libgmp-dev libnspr4-dev libnss3-dev openssl \
libssl-dev git iasl glib-2.0 libglib2.0-0 \
libglib2.0-dev libtasn1-6-dev tpm-tools \
libfuse-dev libgnutls-dev libsdl1.2-dev \
expect gawk socat libfdt-dev
软件包地址:
libtpms: https://github.com/stefanberger/libtpms
swtpm: https://github.com/stefanberger/swtpm
seabios-tpm: https://github.com/stefanberger/seabios-tpm
qemu-tpm: https://github.com/stefanberger/qemu-tpm
第一步:安装seabios-tpm与libtpms
seabios:直接make即可,记住out/bios.bin路径,最好写入环境变量。
git clone https://github.com/stefanberger/seabios-tpm(把文件源码下载并复制到Ubuntu系统中);
cd seabios-tpm(进入seabios-tpm文件夹中;/home/huanghaoxiang/libtpms/ seabios-tpm/out/bios.bin);
make(把文件源码编译成二进制文件);
libtpms:
git clone https://github.com/stefanberger/libtpms
cd libtpms
./bootstrap.sh
./configure --prefix=/usr --with-openssl
make
make install
swtpm安装:(原因:我的计算机没有安装TPM物理芯片,因此安装tpm的软件实现swtpm)
git clone https://github.com/stefanberger/swtpm
cd swtpm
./bootstrap.sh
./configure --prefix=/usr --with-openssl
Make(把源码文件编译成二进制文件)
make check
sudo make install(把二进制文件拷贝进入系统中)
cp /usr/etc/swtpm_setup.conf /etc/swtpm_setup.conf
安装qemu-tpm:
git clone https://github.com/stefanberger/qemu-tpm
cd qemu-tpm
./configure --enable-kvm --enable-tpm --enable-sdl(configure脚本用于生成Makefile,
)
make
make install
启动vTPM:
创建/dev/vtpm*:
sudo modprobe cuse
mkdir /tmp/myvtpm0
chown -R tss:root /tmp/myvtpm0
swtpm_setup --tpm-state /tmp/myvtpm0 --createek
执行完这一步之后会看到成功界面!

再执行下述命令,能够看到文件/dev/vtpm0;
export TPM_PATH=/tmp/myvtpm0;
swtpm_cuse -n vtpm0;
其实这一步在实际安装中总是出现问题:

之后输入命令行:find / -name vtpm0 来查询文件vtpm0是否创建,发现该文件在系统中并不存在;
然后进入root权限再执行:
export TPM_PATH=/tmp/myvtpm0;
swtpm_cuse -n vtpm0;
然后执行find / -name vtpm0 来查询文件vtpm0是否创建,发现文件/dev/vtpm0成功存在:

创建虚拟机:
qemu-img create -f qcow2 /home/TPM-Machine 30G
sudo qemu-system-x86_64 -display sdl -enable-kvm -cdrom /home/huanghaoxiang/ubuntu-server.iso \
-m 1024 -boot d -bios $SEABIOS/bios.bin -boot menu=on -tpmdev \
cuse-tpm,id=tpm0,path=/dev/vtpm0 \
-device tpm-tis,tpmdev=tpm0 /home/TPM-Machine
在创建过程中出现了两个问题:
问题1:加载kvm-intel.ko失败;
Error inserting kvm_intel (/lib/modules/2.6.20/extra/kvm-intel.ko): Operation not supported
解决:重启,F2计入BIOS设置,一项一项的排查,最后发现一项是intel被Disable了。Enable之后,保存重启,然后重启进入ubuntu。
问题2:SEABIOS的路径没有设置:
解决:鉴于/home/huanghaoxiang/libtpms/ seabios-tpm路径太长,干脆把他复制到/opt/seabios-tpm下,然后root权限下执行 export SEABIOS=/opt/seabios-tpm;
安装成功后执行(若出现错误,重新执行生成/dev/vtpm0的命令):
qemu-system-x86_64 -display sdl -enable-kvm \
-m 1024 -boot c -bios $SEABIOS/bios.bin -boot menu=on -tpmdev \
cuse-tpm,id=tpm0,path=/dev/vtpm0 \
-device tpm-tis,tpmdev=tpm0 /home/TPM-Machine;
由于每次重启都要先执行:
export TPM_PATH=/tmp/myvtpm0;
export SEABIOS=/opt/seabios-tpm;
swtpm_cuse -n vtpm0;
因此干脆把他们写入到桌面一个叫qemu.sh的文件中,每次在terminal中cd桌面 ,然后root权限下 ./qemu.sh;至此便能进入QEMU;
背景知识:
1. KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。
2. QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户动态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
3. Qemu-kvm 和VTPM

其中:
kernel-IMA是在平台加载应用程序的时候,将应用程序的二进制值、加载的动态链接库与模块进行度量,度量值扩展写入PCR10,度量记录写入度量日志中;[完整性度量架构(Integrity Measurement Architecture,IMA)]
TCSD为TPM的软件栈;
openPTS(Open Platform Trust Service)是远程证实的软件实现;
libtpms(https://github.com/stefanberger/libtpms)为每个虚拟机提供了基于软件的TPM实现。
qemu-tpm(https://github.com/stefanberger/qemu-tpm)从qemu中fork出来,以支持可信计算,其中包含一个后端驱动用来调用每个虚拟机的libtpms,以及将前端驱动暴露给每个虚拟机。
5. 可信平台模块(Trusted Platform Module,TPM)是可信计算的基石。可信计算是一种基于硬件的平台保护方案,能够记录平台(PC)从上电开始到bios、到grub、到操作系统及至应用程序的整个链式过程,并且通过密码学的机制使得这些记录能够完整地发送给远程端,由远程端来与预期值对比判断平台是否可信,这个过程称为远程证实(Remote Attestation)。
vTPM环境部署(ubuntu)的更多相关文章
- NodeJS项目迁移兼Ubuntu下NodeJS环境部署
前言 之前做的几个项目都托管在阿里云服务器,但是最近要到期了.想着到底要不要续期,毕竟100/月.后面看着阿里云有个活动,800/三年.果断买下.环境部署折腾了一天,其中也遇到几个坑. 目录 一.安装 ...
- ubuntu Django + Uwsgi + Nginx 的生产环境部署
一.概述 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇 ...
- .Net Core 跨平台系列之环境部署
前言 作为一名.NET程序员,很多时候都会被什么拖控件.跨平台等字眼所鄙视过,但是在我的的内心还是没有把自己看低过.因为说到底,平台和语言只是我们吃饭的工具.很多时候公司的发展是取决于商业竞争的,微软 ...
- FW: Chef集中管理工具实践之 (1) 环境部署
本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...
- ubuntu12.04+hadoop2.2.0+zookeeper3.4.5+hbase0.96.2+hive0.13.1伪分布式环境部署
目录: 一.hadoop2.2.0.zookeeper3.4.5.hbase0.96.2.hive0.13.1都是什么? 二.这些软件在哪里下载? 三.如何安装 1.安装JDK 2.用parallel ...
- 【Xamarin开发 Android 系列 1】环境部署搭建
原文:[Xamarin开发 Android 系列 1]环境部署搭建 开篇自然先扯一段,近几年移动互联网如果熊猫零食一样,蔓延迅速.楼主身为一个微软忠实的粉丝,无奈,老爹不给力.Silverlight开 ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- docker环境部署
docker环境部署 1 查看当前系统版本 只支持CentOS7版本的系统,如果不是的话,可以让项目方进行重装或者系统内核升级. [root@bogon bin]# cat /etc/redhat-r ...
- 深度学习Tensorflow生产环境部署(上·环境准备篇)
最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...
随机推荐
- MySQL--当mysqldump --single-transaction遇到alter table(2)
在上篇<MySQL--当mysqldump --single-transaction遇到alter table>中测试发现,在MySQL 5.6版本中,如果在mysqldump期间修改表, ...
- 使用matplotlib绘制多轴图
一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中用轴表示一个绘图区域,可以将其理解为子图.上面的第一个例子中,绘图对象只包括一个轴,因此只显示了一个轴(子图).我们可以 ...
- Java虚拟机面试重点-------------内存分配和回收策略
1 对象优先分配在Eden区 对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配.当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC. 新生代GC(Ninor ...
- input标签在只允许输入数字的时候添加的代码
oninput="this.value=this.value.replace(/\D/g, '')"
- CentOS7 下使用YUM安装 MySQL5.7
于2015年10月19日(美国时间),Oracle公司发布了开源数据库MySQL的最新版本5.7.到现在已有将近3年之久,经过这几年的改进,MySQL5.7性能最高可达前一个版本的3倍,现在官网的最新 ...
- 机器学习之支持向量机(SVM)
支持向量机 百度百科(基本看不懂):http://baike.baidu.com/link?url=Z4MU6AYlf5lOX7UGHVYg9tBvxBGOkriPtNt0DixmscnMz06q5f ...
- Luogu 1962 斐波那契数列(矩阵,递推)
Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...
- 4,JPA-Hibernate
一,什么是JPA JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Pers ...
- tp框架表单验证 及ajax
之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...
- (转)Spring事务配置的五种方式
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...