共计 5488 个字符,预计需要花费 14 分钟才能阅读完成。
title: 可信计算_Qemu03_VMWare上使用Qemu-KVM创建虚拟机 date: 2022-06-06 21:31:08.145 updated: 2022-07-11 15:47:27.28 url: /archives/kxjsqemu03 categories:
- 可信计算 tags:
- 可信计算
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实现,需要开启虚拟化功能:
进入系统后查看,系统是否支持虚拟化: #egrep '(vmx|svm)' /proc/cpuinfo
检查是否已经加载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命令:
可以看到没有qemu-system-x86_64,因为我们上面的configure命令中并没有指定 x84_64-softmmu,需要重新编译。
重新编译命令:
- 清除之前编译的配置文件等。
cd /opt/qemu-7.0.0 make distclean
- configue命令
./configure --enable-debug --enable-kvm --enable-vnc --target-list=x86_64-softmmu --enable-sdl
--target-list
指定最终的虚拟机是X86架构--enable-kvm
启用KVM加速,其余参数与之前的实验相同。 - 编译
make -j4
- 安装
make install
安装结果,查看qemu命令:上图可能看不清,放大:
可以看到现在已经有 qemu-system-x86_64
这个命令了🙂。
5 安装VNCServer
我们使用VNC界面来安装操作系统。不然的话会卡住并提示:
Loading bootlogo... Initializing gfx code...
- 安装
# 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>
改为rootExecStart=/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作为虚拟机。
- 下载并上传操作系统镜像
这个版本有点问题,成功安装系统后,重新启动虚拟机会卡在黑屏界面。 试了很多方法,也没能解决这个问题,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下使用。
- 创建虚拟硬盘
利用qemu-img指令可以创建1个空的虚拟硬盘,便于后面安装的时候将系统安装到虚拟硬盘上。这里我们采用qcow2格式的磁盘映像 -f qcow2
。 qemu-img create -f qcow2 ubuntu-18.10-desktop-amd64.qcow2 16G
- 虚拟机安装
第一次启动虚拟机,需要安装操作系统,指定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窗口,如下图所示,安装即可。
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 但是启动会黑屏:
经过测试:用以上步骤重新安装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
考虑是不是安装Ubuntu 18.10的时候选择出错了。
我在尝试了ubuntu18.04版本的镜像,发现就可以了,也没有报错。
qemu-system-x86_64 --enable-kvm -m 2048 -smp 2 -boot d -hda ubuntu18-04.qcow2 -cpu host
试了很多方法,也没能解决这个问题,CentOS7、Ubuntu18.04都能启动,但是Ubuntu18.10没能成功启动。
7 设置网络
接下来我们就用刚才安装的ubuntu18.04版本来进行操作,看看网络情况如何。
7.1 情况说明
- 查看宿主机CentOS地址:
- 查看虚拟机ubuntu18.04的ip地址
- 目前无法访问百度:
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地址。
测试是否能访问百度:成功
经过测试,网络已经可以正常访问。