spice、qemu-kvm以及libvirt源码编译安装与使用(下)

4 篇文章 3 订阅
3 篇文章 1 订阅

本篇是接着上一篇继续讲解,上篇我们已经能够创建虚机并通过vnc连接进行安装与启动;而本篇将会重点介绍spice连接,在介绍之前我们简单看下spice 介绍以及它与VNC、RDP的比较。

一、spice简介

spice(独立计算环境简单协议)是红帽企业虚拟化桌面版的主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验。其包含三个组件。

SPICE Driver :SPICE驱动器 存在于每个虚拟桌面内的组件;

SPICE Device:SPICE设备 存在于红帽企业虚拟化Hypervisor内的组件;

SPICE Client:SPICE客户端 存在于终端设备上的组件,可以是瘦客户机或专用的PC,用于接入每个虚拟桌面。

这三个组件协作运行,确定处理图形的最高效位置,以能够最大程度改善用户体验并降低系统负荷。如果客户机足够强大,SPICE向客户机发送图形命令,并在客户机中对图形进行处理,显著减轻服务器的负荷。另一方面,如果客户机不够强大,SPICE在主机处理图形,从CPU的角度讲,图形处理并不需要太多费用。

二、spice、vnc与rdp协议的比较

spice、vnc、rdp是比较主流的远程桌面连接协议。这里对三者做一个总结比较。可见spice还是相当优秀的。

SPICEVNCRDP
BIOS屏幕显示不能
全彩支持
更改分辨率
多显示器多显示器支持(高达4画面)只有一个屏幕多显示器支持
图像传输图像和图形传输图像传输图像和图形传输
视频播放支持GPU加速支持不能GPU加速支持
音频传输双向语音可以控制不能双向语音可以控制
鼠标控制客户端服务器都可以控制服务器端控制服务器端控制
USB传输USB可以通过网络传输不能USB可以通过网络传输

三、spice 连接虚机

好了,在简单了解spice协议以及它与VNC和RDP的比较之后,我们来体验以下spice 方式连接,首先我们需要创建虚机并启用spice连接。

注:默认虚拟机使用的显卡是虚拟显卡,而使用spice协议时可以将虚拟显卡更换为qxl 显卡,这会加快视频传输的质量。

1、编写test_spice.xml文件:

对kvm虚拟机的test.xml 文件(上篇博客有完整内容)中可以通过增加如下内容进行支持:

<graphics type='spice' port='5930' autoport='no' listen='192.168.222.128 passwd='password'/>  
<video>    
    <model type='qxl' vram='32768' heads='1'/>    
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>   
</video>

需要启用声卡时,还需要在配置文件中增加如下内容:

<sound model='ac97'>  
    <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</sound>

2、定义虚机:

[root@localhost IMG]# virsh define test_spice.xml
Domain test_centos_spice defined from test_spice.xml

查看当前定义的域情况:
域列表

3、启动虚机(域)test_centos_spice:

[root@localhost IMG]# virsh start test_centos_spice
Domain test_centos_spice started

查看当前域情况:

在这里插入图片描述

再查看对应的qemu进程:
在这里插入图片描述
从上面也可以看到后面通过spice连接所用到的信息,如宿主机的IP:192.168.222.128,端口port:5930;


​有了虚机以后,我们就可以通过spice 客户端进行连接,下面我们将介绍Windows和Linux 下是如何通过spice客户端进行连接的。

Windows连接:

安装软件virt-viewer-x86-3.0.msi,链接:(https://releases.pagure.org/virt-viewer/virt-viewer-x86-3.0.msi)

输入连接地址,如下:
在这里插入图片描述

点击Connect,会提示让输入密码,密码就是之前再test_spice.xml中定义的,即passwd=‘password’,这里就是password。正常的话,我们就能看到我们的虚机界面了,如下所示:

在这里插入图片描述

linux 连接:

这个我们采用spice 客户端源码进行编译,生成spicec 客户端程序进行连接,当然你也可以通过yum 或apt-get 进行安装spice 客户端进行连接,这种方式比较简单,我们就不介绍了,我们主要从编译源码开始,这也方便我们后期修改代码,调试代码。

操作步骤:

1、下载spice 源码,源码链接:https://www.spice-space.org/download/releases/spice-0.12.5.tar.bz2

2、准备Ubuntu 桌面操作系统:由于后期需要通过spicec去连接虚机(采用的是x11协议),所以我们要先安装一个带X11 server 的Ubuntu 16.04 桌面操作系统。否则后面连接会报如下错误;
在这里插入图片描述
3、编译spice-client

1)./configure 生成Makefile 文件

如果出错,请根据错误提示安装依赖包,主要有: libx11-dev 和 libxext-dev,libxrandr-dev,xorg-dev等;
在这里插入图片描述

2)make 生成 spicec 二进制文件

但是会报如下错误:
在这里插入图片描述
主要原因是,我们在执行./configure 生成Makefile文件时,没有显示指定编译spice client, 默认是不编译的,我们从上图也可以看出build spice client no 的列表,表示不编译spice client 。因此,我们需要重新生成Makefile文件,使其编译spice client ,如下:

[root@localhost spice-0.12.5]# ./configure --enable-client

在这里插入图片描述

这时我们发现 Build Spice client 已经变成yes;这时我们再进入client 目录进行编译客户端(之前要先编译spice-common),或者直接执行make 连同spice-common,spice server 一起编译;这个时候就不会报错啦。

这时会生成spicec 客户端程序
在这里插入图片描述

3)连接spice 虚机,命令如下:

root@localhost spice-0.12.5/client #./spicec  -h 192.168.222.128 -p 5930 -w password

在这里插入图片描述

我们又看到熟悉的centos 虚机界面啦,这样我们采用spice 源码编译连接虚机就算完成了~



续:

前面我们介绍的虚机都是CentOS虚机,接下来我们再介绍一下Windows虚机创建并用spicec进行连接;

第一步:创建镜像win7.img

[root@localhost IMG]# qemu-img create -f qcow2 win7.img 10G
Formatting 'win7.img', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16

第二步:编辑虚机定义win7_demo.xml文件:

<domain type='kvm'>
     <name>win7</name>
	 <memory>1048576</memory>
	 <currentMemory>1048576</currentMemory>
	  <vcpu>1</vcpu> 
	  <os> 
         <type arch='x86_64' machine='pc'>hvm</type> 
         <boot dev='hd'/>                                           
         <boot dev='cdrom'/>                                           
      </os>
   <features> 
     <acpi/> 
     <apic/> 
     <pae/> 
   </features> 
   <clock offset='localtime'/> 
   <on_poweroff>destroy</on_poweroff> 
   <on_reboot>restart</on_reboot>   
   <on_crash>destroy</on_crash> 
   <devices> 
     <emulator>/usr/libexec/qemu-kvm</emulator> 
     <disk type='file' device='disk'> 
      <driver name='qemu' type='qcow2'/>          
       <source file='/zhb/IMG/win7.img'/>
       <target dev='hda' bus='ide'/> //这里注意一下,我没有采用优化的virtio方式,如果你采用virtio方式,还需要从官网下载virtio下载Windows的驱动
       <!-- <target dev='vda' bus='virtio'/> -->
     </disk> 
     <disk type='file' device='cdrom'> 
       <source file='/zhb/ISO/cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso'/>
       <target dev='hdb' bus='ide'/> 
     </disk> 
     <!-- 
      <disk type='file' device='cdrom'> //如果你前面选择的是virtio方式,需要加这个节点
       <source file='/zhb/ISO/virtio-win-0.1.141.iso'/>
       <target dev='hdc' bus='ide'/> 
     </disk> --> 
    <interface type='bridge'>     //虚拟机网络连接方式 
      <source bridge='br0'/> 
      <mac address="00:16:3e:5d:aa:aa"/>    //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突 
    </interface> 
    <input type='mouse' bus='ps2'/> 
    <input type='tablet' bus='usb'/>        
     <!-- <graphics type='vnc' port='-1' autoport='yes' listen = '0.0.0.0' keymap='en-us'/> -->//vnc方式登录,端口号自动分配,自动加1 
     <graphics type='spice' port='5932' autoport='no' listen = '192.168.222.128' passwd='password'/> //本实验就采用我们前面安装的spice client 去连接
     <video>
       <model type='qxl' vram='32768' heads='1'/>
       <address type='pci' domain='0x0000' slot='0x02' function='0x0'/>
     </video>
   </devices> 
</domain>

连接虚机(或域):

zhb@ubuntu:/mnt/spice-0.12.5/client$ ./spicec -h 192.168.222.128 -p 5932 -w password

这时我们就能看到熟悉的windows 安装界面了,如下所示:
在这里插入图片描述

点击下一步,继续安装,接受许可,继续下一步:
在这里插入图片描述

选择自定义高级:
在这里插入图片描述

接下来,进入如下界面,这里我重点说明一下,这里磁盘就是我们前面创建的10G空间磁盘,如果你的机器这里看不到磁盘,我们可以检查我们的虚机定义,即前面的win7_demo.xml文件。我们采用的是否是ide方式,如果不是ide,而是采用virtio方式,那么就需要你从官网上下载windows 的virtIo 驱动。然后将驱动的iso加载进来(就是修改虚机定义xml文件,加载iso),然后选择图中的加载驱动程序,选择对应系统的磁盘驱动即可。
在这里插入图片描述
安装,耐心等待即可。
在这里插入图片描述
进入安装界面了,我们可以站起来活动活动,泡杯茶耐心等会… 回来后我们发现已经装好了,配置用户,密码啥的就可以使用你的桌面啦~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从虚机的设备管理器里我们可以看到,网卡,显卡以及磁盘驱动都是qemu原生(或是默认的),后续文章我会继续学习VirtIO 并从虚机优化、重定向进行分析。

该系列文章《spice、qemu-kvm以及libvirt源码编译安装与使用(上、中、下)》也都是我本人自己一边学习一边记录的,如果有什么不对或不明白的地方,欢迎交流、指正~



问题:

本人尝试用virtio 启动安装虚机时,如果不改变前面的启动顺序,即hd 在前 cdrom 在后,卡在光驱启动的地方了,如下所示:

在这里插入图片描述

如果修改启动顺序,即cdrom 在hd前,可以启动但是一直卡在如下界面:
在这里插入图片描述

调了好久参数,也查了很多资料,最后我怀疑是qemu编译问题,所以我就用yum安装了qemu,再次尝试发现果然可以了,暂时还没有去研究具体编译出了什么问题,不知道大家有没有遇到过该问题,如您知道,还请您指点一下,谢谢~

好了,我们继续,前面过程和ide启动安装都是一样的,到这里就像我前面说的一样,发现不能看到我们创建的磁盘,如下:
在这里插入图片描述选择加载驱动程序,当然前提是我们需要先挂载windows 的virtio 镜像文件,然后就会看到如下界面,选择virtio 光盘(另一个是系统光驱);
在这里插入图片描述
这里选择viostor,这个是磁盘驱动,再选择win7/x86。

在这里插入图片描述

接下来,我们就能看到如下界面:在这里插入图片描述

点击下一步,就能看到一个可用磁盘,如下:
在这里插入图片描述
接下来的过程就又和ide方式一样了,我就不再啰嗦了,祝您学习愉快~~~



  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值