编译xen环境( http://www.lvtao.net/server/574.html#comment-1882):
yum update
yum groupinstall "Development Tools"
yum install -y gcc gcc-c++ git patch texinfo
yum install -y python-devel acpica-tools libuuid-devel ncurses-devel glib2 glib2-devel libaio-devel openssl-devel yajl-devel glibc-devel glibc-devel.x86_64 pixman-devel
wget http://mirror.centos.org/centos/6/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm
参照Configuring Virtual TPM (vTPM) for Xen 4.3 Guest Virtual Machines.如果在./configure xen是没有对应vtpm包,则安装cmake再试
rpm -ivh dev86-0.16.17-15.1.el6.x86_64.rpm
下载xen源代码编译安装:
(make tools出错:KeyError: ‘.text.asm.out/../src/smp.c.77’解决方法:加LC_ALL=C make编译,上网查到的原因是:语言设置为UTF-8)
cd xen
./configure
在configure中可以看到最终安装的stubdom,需要有vtpm-stubdom和vtpmmgr-stubdom两个包,如果没有,先安装cmake和gmplib,tss软件协议栈最好也进行安装,后续启动vtpm manager时出现问题不确定是否是由该问题引起。见后面tpm模拟器安装步骤)
make dist
make install
出现错误
解决方法:yum install iasl
(上述错误是由于在编译过程中需要从xenbits.org网站上下载相关文件,由于网络设置原因,不能成功登陆该网站,导致该错误发生。解决方法,配置网络使得可以成功登陆该网站,直接修改/etc/hosts文件中添加ip和域名)
在成功安装xen后可以在/boot下找到许多xen.gz文件
在卸载xen时,需要切换到普通内核中,在xen文件夹下make uninstall进行卸载,检查/usr/local/lib和/usr/lib中的库文件和链接文件, 不要在xen内核下进行卸载。
安装dom0内核
此时需要加入带xen的linux dom0内核
在配置vtpm时,按照Configuring Virtual TPM (vTPM) for Xen 4.3 Guest Virtual Machines.文档中对dom0内核文件的配置,dom0内核版本为linux-3.15.4,domU版本为linux-4.6.3
processor type and features的相关项目均没有进行配置,文档中dom0内核在配置时需要关闭硬件tpm,但在linux-4.6.3中该项一直是开启的,不能进行关闭。
下载最新的Linux内核源代码,配置dom0内核,编译,安装,注意dom0内核需要选择下面一些内核选项:
默认的内核配置文件中基本上完成了上述配置,但个别需要进行修改,在.config文件中查找相应项进行确认是否正确配置
在centos7中安装vtpm,xen版本要为xen-4.5.0以上,xen-4.3.0会出现vtpmmgr启动时段错误,xen-4.7.0在配置文件中没有XSM_ENABLE项,不确定是否能够配置成功
配置Grub
可能出现的错误和解决方法:
重启后,选择 CentOS Linux, with Linux 3.15.4 Xen 进入 Xen 系统,使用 xl info 命令发现有错,这是因为 Xen 相关的软件库被安装到了 /usr/local/lib 目录,系统找不到。所以做一些链接就可以了(链接包括如下但不仅限于,多余的链接自行添加即可,每次添加了新的链接后要ldconfig进行更新)
再次运行xl info发现如下问题
是因为没有挂载 xenfs 的缘故,挂载一下就可以了:
启动xen服务:service xencommons start
vmware虚拟机不支持虚拟化,在vmware虚拟机设置中打开intel vt。该方法还不能成功,在虚拟机配置文件(.vmx为后缀)修改“vhv_enable=TRUE"
配置安装domU
/etc/xen/xend-config.sxp中,桥接模式时默认的格式,除了network-bridge和vif-bridge以外其他行都是被注释掉的
配置文件看起来像如下所示:
(network-script network-bridge)
(vif-script vif-bridge)
# (network-script network-route)
# (vif-script vif-route)
# (network-script network-nat)
# (vif-script vif-nat)
network-bridge脚本和vif-bridge脚本都存放在/etc/xen/scripts目录下。
network-bridge脚本的作用是建立网络环境,并且使用bridge-utils工具创建一个网桥xenbr0。
vif-bridge脚本的作用是当一台guest服务器启动的时候,为这个guest服务器创建后端的vif接口
1、xen网桥配置
显示xen网桥:brctl show
没有发现xenbr0虚拟网卡
xen4.1版本之后官方建议手动建立桥接网络。所以默认的/etc/xen/scripts/network-bridge 脚本是没有启动的。
(1)关闭xen网络脚本
/etc/xen/scripts/network-bridge stop
(2)修改xen配置文件
vi /etc/xen/xend-config
注释下面两行
#network-script network-bridge)
#(vif-script vif-bridge)
(3)重新启动xend服务
service xend restart
(4)手动创建桥接网络,将物理网卡eth0设置为桥,我设置的服务器是DELL 410,网卡装完系统是em1,em2,只是名称区别而已。
vi /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=eth0
ONBOOT=yes
BRIDGE=xenbr0
NM_CONTROLLED=no
HWADDR=***********
UUID=************
vi /etc/sysconfig/network-scripts/ifcfg-xenbr0
DEVICE=xenbr0
BOOTPROTO=static
IPADDR=192.168.*.*
NETMASK=255.255.255.0
GATEWAY=192.168.*.*
ONBOOT=yes
TYPE=Bridge
上面这个就是创建一个xenbr0桥接到网卡em1,xen的虚拟机就可以通过xenbr0这个桥上网了
还有em2 em3网卡的话按照上面的方式创建就可以了。
重新启动网络:service network restart
在重启后,执行命令ifconfig可以看到所配置的xenbr0网卡
安装XEN的客户机操作系统
1、制作镜像
使用dd创建
dd if=/dev/zero of=centos.img bs=2k seek=4096k count=1
制作客户机主要磁盘
vi config 对配置文件进行编写
name = “win2003″
builder = “hvm”
memory = “2048”
disk = [ ‘file:/data/win2003.iso,hdc:cdrom,r’,’file:/data/xen/win2003.img,hda,w’]
vif = [ ‘type=ioemu, bridge=xenbr0′, ]
device_model = “/usr/lib64/xen/bin/qemu-dm” //在根目录下使用locate qemu-dm进行查找,一般在/usr/local/lib中
kernel = “/usr/lib/xen/boot/hvmloader” //在根目录下使用locate hvmloader进行查找
#boot=’d’
boot=”dc”
vnc=1
vncunused=1
vncpasswd=’wo_de_mima’
localtime=1
timer_mode=1
apic=1
acpi=1
pae=1
vcpus=2
serial = “pty” # enable serial console
on_reboot = ‘restart’
on_crash = ‘restart’
注:主要是disk的iso要写在前面.这样启动顺序就是以iso先启动,还有就是设置vnc=1开启,然后用vnc来连接590X端口来安装系统.
使用xm create -c /……config来启动虚拟机,主要要有参数c,代表使用conf配置文件启动,不加c代表启动一个已经安装好的虚拟机
虚拟机配置vnc
vi /etc/xen/xend-config.sxp
# set this to 0.0.0.0
(vnc-listen ‘0.0.0.0’)
# The default password for VNC console on HVM domain.
# Empty string is no authentication.
(vncpasswd ‘wo_de_mima’)
重启xend
系统安装完成后,直接xl destroy domU而不点击重启,修改配置文件,boot=“d"为boot="c",xl create 配置文件,启动虚拟机
vtpm domu配置文件:
配置安装TPM模拟器
由于安装的主机上没有安装tpm硬件芯片,为了开发方便,安装tpm_emulator模拟器用于开发调试
参考的博文: http://blog.sina.com.cn/s/blog_6090be7b0100wqsj.html
http://www.xuebuyuan.com/894225.html
http://blog.chinaunix.net/uid-20657527-id-1588199.html
http://blog.sina.com.cn/s/blog_6035b21301012cgg.html
http://www.linuxdiyf.com/linux/14791.html
主要步骤:
安装cmake软件包:
cd cmake
./bootstrap(如果没有这个文件可以不执行)
make
make install
安装算法库gmplib
cd gmplib
./configure
make
make check
make install
安装tpm_emulator(在make中出现错误:tpm_migration.c:385:14: 错误: 变量‘res’被设定但未被使用 [-Werror=unused-but-set-variable] ,解决方法:将该代码res变量定义与赋值删除)
cd tpm_emulator
mkdir build
cd build
cmake ../
make
make install
安装完tpm_emulator进行初始化
tpmd deactivated(如果成功,则显示一直connection)
killall tpmd
rm /var/run/tpm/tpmd_socket:0(出现failed:address already in use时执行该命令)
安装TSS软件协议栈(包括了安装trouser软件包和tpm-tools软件包)
cd trouser
sh ./bootstrap.sh
./configure
make
make install
安装完后重定向tddl
修改trouser/src/tcsd/Makefile.am第四行左右
tcsd_LDADD=../tcs/libtcs.a ../tddl/libtddl.a –lpthread为:tcsd_LDADD=../tcs/libtcs.a /usr/lib/libtddl.so –lpthread
上述修改路径为/usr/lib还是/usr/local/lib都有可能,直接去路径下找是否有libtddl.so文件,下述情况同此
修改 ./src/tcsd/Makefile.in 第59(左右)行:
tcsd_DEPENDENCIES = ../tcs/libtcs.a ../tddl/libtddl.a为:tcsd_DEPENDENCIES=../tcs/libtcs.a /usr/lib/libtddl.so
修改 ./src/include/obj_context.h 第79行:
struct tcs_api_table *obj_context_get_tcs_api();为:struct tcs_api_table *obj_context_get_tcs_api(UINT32):可能没有这个项,则不修改
执行
sh bootstrap.sh(没有不用执行)
./configure
make
make install
启动TCSD
tcsd -e -f:在该步之前需要先启动tpm_emulator,否则会提示找不到设备
安装tpm-tools
sh ./bootstrap.sh
./configure
make
make install
测试tpm_emulator是否成功
在tpm_emulator-0.7.2/tddl文件夹下有测试事例:
# gcc -o test_tddl test_tddl.c -ltddl //-ltddl为链接tddl的动态链接库
# LD_LIBRARY_PATH=/usr/local/lib ./test_tddl //运行结果
如果配置成功,在3测试中得两条指令后会出现
Driver status: DRIVER OK
Device status: DEVICE OK
DRV version: 1.5.0.0
TPM Version: 1.1.0.0
Manufacturer: Mario Strasser, ETH Zurich
Module type: Software-based TPM Emulator
Transmit: 00 c1 00 00 00 0a 00 00 00 5a
Result: 00 c4 00 00 00 0a 00 00 00 00
在centos7上搭建vtpm
安装依赖包:
yum install glibc-headers openssl-devel nss-softokn-freebl-devel nsssoftokn-devel gmp-devel libtool nss-devel
yum install automake autoconf bash coreutils expect libtool sed fuse fuse-devel glib2 glib2-devel gmp gmp-devel nss-devel net-tools selinuxpolicy-devel gnutls gnutls-devel libtasn1 libtasn1-tools libtasn1-devel rpm-build iasl socat
yum groupinstall "Development Tools"
yum install pixman pixman-devel libuuid-devel libaio-devel spice-serverdevel SDL SDL-devel
下载安装包:
1. libtpms: https://github.com/stefanberger/libtpms
2. swtpm: https://github.com/stefanberger/swtpm
3. seabios-tpm: https://github.com/stefanberger/seabios-tpm
4. qemu-tpm:
https://github.com/stefanberger/qemu-tpm
安装seabios-tpm和libtpms
seabios:直接make即可
libtpms:
./bootstrap.sh
./configure --prefix=/usr
make
sudo make install
安装swtpm:
./bootstrap.sh
./configure --prefix=/usr
make
make check
sudo make install
出现错误:
configure: error: "Is libtpms-devel installed? -- could not get libs for
libtpms"
[luowu@localhost swtpm]$ pkg-config --libs libtpms
Package libtpms was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtpms.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libtpms' found
[luowu@localhost swtpm]$ sudo find / -name libtpms.pc
[sudo] password for luowu:
find: ‘/run/user/1000/gvfs’: Permission denied
/usr/lib/pkgconfig/libtpms.pc
[luowu@localhost swtpm]$ sudo vim /etc/profile
在文件中添加export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
[luowu@localhost swtpm-master]$ source /etc/profile