侧边栏壁纸
博主头像
landery博主等级

行李箱里装不下我想去的远方

  • 累计撰写 45 篇文章
  • 累计创建 26 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

可信计算_Qemu03_VMWare上使用Qemu-KVM创建虚拟机

landery
2022-06-06 / 0 评论 / 0 点赞 / 759 阅读 / 2,200 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 计划

我们在1、2已经完成了不使用KVM,只用Qemu也可以实现虚拟化,我们现在将使用KVM来对Qemu虚拟化进行加速,但是需要使用KVM,Linux 内核和硬件必须支持 KVM(基于内核的虚拟机)完全虚拟化,并且必须加载必要的内核模块。

qemu当运行与主机架构相同的目标架构时可以使用KVM,例如一个x86兼容处理器上运行qemu-system-x86,因此我们在前面的安装的ARM架构是无法利用X86架构的KVM的,我们在本次实验中,换成X86架构的虚拟机。

  • 利用Qemu实现X86_64系统上运行ARM虚拟机,学习Qemu
  • 使用Qemu-KVM同样的搭建虚拟机,学习KVM
  • 添加vTPM支持,实现可信虚拟机

2 注意事项

  • 您的内核必须是2.6.29或更高版本才能运行任何版本的qemu-kvm(内核2.6.27 / 2.6.28与kvm-kmod 2.6.29也将工作) 参考 如何选择kvm和内核版本
  • KVM内核空间组件在Linux 2.6.20之后已经被集成在Linux内核和空间,KVM用户空间组件就在Qemu中,参考KVM官网

3 实验前准备😀😁

用的是Win11上的WMware,在其中创建了CentOS 7的虚拟机,然后再在虚拟机里面使用Qemu再创建虚拟机。采用的最新版的Qemu 7.0.0

采用VMWare实现,需要开启虚拟化功能:
image-1657246748827

进入系统后查看,系统是否支持虚拟化: #egrep '(vmx|svm)' /proc/cpuinfo

image-1657247335267

检查是否已经加载KVM模块 : #modprobe kvm
加载kvm内核模块:

功能区分intel/amd的启用:
#modprobe kvm-intel
# lsmod |grep kvm
kvm_intel       55496 0
kvm          337772 1 kvm_intel

4 Qemu安装

qemu-kvm安装有两个方法,可以通过 yum安装:yum install -y qemu-kvm,但在这个实验中,我们都是通过qemu源码编译的方式进行安装。

在前一个实验中,我们编译的命令如下:

cd /opt/qemu-7.0.0
./configure --target-list=aarch64-softmmu --enable-vnc --enable-sdl --python=/usr/bin/python3

查看qemu命令:
image-1657247480650

可以看到没有qemu-system-x86_64,因为我们上面的configure命令中并没有指定 x84_64-softmmu,需要重新编译。

重新编译命令:

  1. 清除之前编译的配置文件等。
    cd /opt/qemu-7.0.0
    make distclean
    
  2. configue命令
    ./configure --enable-debug  --enable-kvm --enable-vnc --target-list=x86_64-softmmu --enable-sdl
    
    --target-list 指定最终的虚拟机是X86架构
    --enable-kvm 启用KVM加速,其余参数与之前的实验相同。
  3. 编译 make -j4
  4. 安装 make install

安装结果,查看qemu命令:
image-1657247444309
上图可能看不清,放大:
image-1657248068132

可以看到现在已经有 qemu-system-x86_64 这个命令了🙂。

5 安装VNCServer

我们使用VNC界面来安装操作系统。不然的话会卡住并提示:

Loading bootlogo... Initializing gfx code...

image-1657264940684

  • 安装
    # yum install tigervnc-server tigervnc

  • 设置密码

    # vncpasswd 
    Password: 123456
    Verify:
    
  • 配置,目的:使用systemctl管理vnc窗口,只创建一个窗口

    # cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
    # vim /etc/systemd/system/vncserver@:1.service
    

    其内容为:

    [Unit]
     Description=Remote desktop service (VNC)
     After=syslog.target network.target
    
     [Service]
     Type=simple
    
     # Clean any existing files in /tmp/.X11-unix environment
     ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
     ExecStart=/usr/bin/vncserver_wrapper <USER> %i
     ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    
     [Install]
     WantedBy=multi-user.target
    

    修改配置,将<USER>改为root
    ExecStart=/usr/bin/vncserver_wrapper root %i

  • 重启systemd # systemctl daemon-reload

  • 配置防火墙

    # firewall-cmd --permanent --add-service vnc-server
    success
    # systemctl restart firewalld.service
    
  • 查看状态

    [root@centos7 ~]# systemctl status firewalld.service
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: active (running) since 五 2022-07-08 16:27:27 CST; 25s ago
         Docs: man:firewalld(1)
    [root@centos7 ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: br0 ens32
      sources:
      services: dhcpv6-client ssh vnc-server
    
  • 开启一个VNC窗口

[root@centos7 ~]# systemctl start vncserver@:1.service
[root@centos7 ~]# systemctl status vncserver@:1.service
● vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)
   Active: active (running) since 五 2022-07-08 16:31:16 CST; 2s ago
  Process: 38041 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
 Main PID: 38046 (vncserver_wrapp)
   CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
           └─38046 /bin/sh /usr/bin/vncserver_wrapper root :1

7月 08 16:31:16 centos7 systemd[1]: Starting Remote desktop service (VNC)...
7月 08 16:31:16 centos7 systemd[1]: Started Remote desktop service (VNC).
[root@centos7 ~]# vncserver -list

TigerVNC server sessions:

X DISPLAY #     PROCESS ID
:1              38071

  • 使用 vncviewer 连接
    vncviewer -geometry 1900x1000 :1

关闭vncviewer。

5 安装Qemu-KVM虚拟机

现在已经有了可以创建虚拟机的命令了,需要使用一个X86架构的虚拟机镜像,我们为了方便区分宿主机和虚拟机,我们采用x84架构的ubuntu作为虚拟机,VMware中的CentOS 7作为虚拟机。

  1. 下载并上传操作系统镜像

这个版本有点问题,成功安装系统后,重新启动虚拟机会卡在黑屏界面。
试了很多方法,也没能解决这个问题,CentOS7、Ubuntu18.04都能启动,但是Ubuntu18.10没能成功启动。

我们下载 ubuntu-18.10-desktop-amd64.iso 镜像(AMD64是AMD的叫法),下载链接:https://old-releases.ubuntu.com/releases/cosmic/

下好之后,上传至CentOS 7中,保存在目录/devsdb下。这个目录需要与下面安装时指定iso文件路径一致。

原本是放在/root下的,但是当初给VMware Centos分配的磁盘空间太小,创建不了虚拟硬盘,而VMware扩展硬盘,需要删除之前的快照,只能新添了一个硬盘,重新挂载在/devsdb下使用。

  1. 创建虚拟硬盘

利用qemu-img指令可以创建1个空的虚拟硬盘,便于后面安装的时候将系统安装到虚拟硬盘上。这里我们采用qcow2格式的磁盘映像 -f qcow2
qemu-img create -f qcow2 ubuntu-18.10-desktop-amd64.qcow2 16G

  1. 虚拟机安装

第一次启动虚拟机,需要安装操作系统,指定ISO镜像文件,命令如下:

  qemu-system-x86_64 --enable-kvm -m 2048 -smp 4 -boot d -hda ubuntu-18.10-desktop-amd64.qcow2 -cdrom ubuntu-18.10-desktop-amd64.iso -cpu host

输入命令后太会自动弹出Qemu窗口,如下图所示,安装即可。
image-1657268618382

6 运行并检查网络

操作系统安装完成后,直接关闭 VNC 窗口。
启动虚拟机:

  qemu-system-x86_64 --enable-kvm -m 2048 -smp 4 -hda ubuntu-18.10-desktop-amd64.qcow2  -cpu host

注意:去掉 -boot d和-cdrom ubuntu-18.10-desktop-amd64.iso,因为他会指定启动方式。d代表(第一个CD-ROM),参考 https://man.archlinux.org/man/qemu.1
但是启动会黑屏:
image-1657274543345
image-1657274598061

经过测试:用以上步骤重新安装CentOS7,安装成功后也可以正常启动:

qemu-system-x86_64 --enable-kvm -m 2048 -smp 4 -hda centos7.qcow2 -cpu host -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on

image-1657468335956

考虑是不是安装Ubuntu 18.10的时候选择出错了。

我在尝试了ubuntu18.04版本的镜像,发现就可以了,也没有报错。

qemu-system-x86_64 --enable-kvm -m 2048 -smp 2 -boot d -hda ubuntu18-04.qcow2 -cpu host

image-1657524241844

试了很多方法,也没能解决这个问题,CentOS7、Ubuntu18.04都能启动,但是Ubuntu18.10没能成功启动。

7 设置网络

接下来我们就用刚才安装的ubuntu18.04版本来进行操作,看看网络情况如何。

7.1 情况说明

  1. 查看宿主机CentOS地址:
    image-1657525018336

  2. 查看虚拟机ubuntu18.04的ip地址
    image-1657525096831

  3. 目前无法访问百度:
    image-1657525157190

7.2 网络配置

类似我上个实验,我们采用桥接方式来联通连网通网络 https://www.landery.cn/archives/kxjsqemu02

我们如上个实验中添加启动、关闭脚本后:关闭虚拟机,在启动虚拟机的命令后添加如下参数: -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown

全部命令如下:

qemu-system-x86_64 --enable-kvm -m 2048 -smp 2 -boot d -hda ubuntu18-04.qcow2 -cpu host -net nic -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown

进入虚拟机后,查看虚拟机ip,已经变成192.168.134.128同网段的ip地址。
image-1657525432730

测试是否能访问百度:成功
image-1657525581298

经过测试,网络已经可以正常访问。

参考链接

0

评论区