zoukankan      html  css  js  c++  java
  • Centos7编译安装Xen环境(vtpm)

    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
    参照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

    对于xen而言,libvirt默认版本只支持kvm,故采用直接安装包的方式不能够使用libvirt。yum install libvirt这种安装方式使用virt-install会出现错误,主机不支持虚拟化,而且使用virt-manager会出现无法连接xen
    在xen4.1后,默认不再支持自动建立桥接网络。故建议手动建立网桥进行虚拟机通信。默认的在xend的配置文件/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模拟器

    主要步骤:
    安装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
    安装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
  • 相关阅读:
    Vue props向子组件中传递数据
    Vue 组件间的通信
    vue slot插槽
    Vue 组件化注意事项
    VUE多个组件示例
    Vue组件化开发
    Vue 获取当前时间并格式化
    VUE 过滤器以及插件
    Vue 表单数据双向绑定 v-mode
    VUE 事件修饰符以及按键码
  • 原文地址:https://www.cnblogs.com/scu-cjx/p/6878739.html
Copyright © 2011-2022 走看看