注: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)的更多相关文章

  1. NodeJS项目迁移兼Ubuntu下NodeJS环境部署

    前言 之前做的几个项目都托管在阿里云服务器,但是最近要到期了.想着到底要不要续期,毕竟100/月.后面看着阿里云有个活动,800/三年.果断买下.环境部署折腾了一天,其中也遇到几个坑. 目录 一.安装 ...

  2. ubuntu Django + Uwsgi + Nginx 的生产环境部署

    一.概述 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇 ...

  3. .Net Core 跨平台系列之环境部署

    前言 作为一名.NET程序员,很多时候都会被什么拖控件.跨平台等字眼所鄙视过,但是在我的的内心还是没有把自己看低过.因为说到底,平台和语言只是我们吃饭的工具.很多时候公司的发展是取决于商业竞争的,微软 ...

  4. FW: Chef集中管理工具实践之 (1) 环境部署

    本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...

  5. 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 ...

  6. 【Xamarin开发 Android 系列 1】环境部署搭建

    原文:[Xamarin开发 Android 系列 1]环境部署搭建 开篇自然先扯一段,近几年移动互联网如果熊猫零食一样,蔓延迅速.楼主身为一个微软忠实的粉丝,无奈,老爹不给力.Silverlight开 ...

  7. 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目

    分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...

  8. docker环境部署

    docker环境部署 1 查看当前系统版本 只支持CentOS7版本的系统,如果不是的话,可以让项目方进行重装或者系统内核升级. [root@bogon bin]# cat /etc/redhat-r ...

  9. 深度学习Tensorflow生产环境部署(上·环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

随机推荐

  1. Binder的工作原理浅析

    在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...

  2. eclipse 导入git库 Android工程

    1. 导入git库 1.1 从git库 clone 代码 在file->import中选中Git 目录下的Projects from Git 点击Next 选择 URL 点击Next 输入URL ...

  3. JavaScript学习笔记(散)——addLoadEvent函数

    先贴源码 function addLoadEvent(func) { var oldonload = window.onload; //存入当前onload事件 if(typeof window.on ...

  4. a bad dream

    最近在恶补 数据结构,网络,操作系统.有关技术实践(项目)的博客基本会停一停. 4月18号早上,我做了一个梦.6点左右就醒了,醒来后马上趁着记忆"热乎乎"写下来.大概在手机上写了一 ...

  5. winform控件闪烁问题终极办法

    protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle ...

  6. FileInputStreamTest

    package JBJADV003;import java.io.FileNotFoundException;import java.io.IOException;import java.io.Inp ...

  7. CentOS7 yum安装zabbix3.2.6

    前言: 本人小白,在一个多月前通过面试进入公司,在进入公司的第一天,老板把我叫到他办公室,坐下来慢慢喝茶,吹牛,给我吹他们以前做的软件,经营的产品,还装作一副什么都告诉我的样子,其实这都是套路,我早已 ...

  8. Jenkins设置Master/Slave

    说明:通过master/slave模式,可以在master节点上统一管理其他slave节点. 下面说明一步步实现master/slave模式. 第一步:以管理员登录jenkins.点击"系统 ...

  9. Java纸牌小demo以及日历小demo

    //卡牌类 public class Card { //定义卡牌的点数 public static final String[] cardName = { "3", "4 ...

  10. 深入浅析JavaScript中的constructor

    constructor 属性返回对创建此对象的数组函数的引用.本文给大家介绍JavaScript中的constructor ,需要的朋友参考下吧 定义和用法 constructor 属性返回对创建此对 ...