从源码编译安装QEMU以及如何创建QEMU虚拟机

目录

  • 1 主机环境/软件版本
  • 2 从源码编译安装QEMU
    • 2.1 获取QEMU 5.1.0的源码
    • 2.2 创建build目录+配置
    • 2.3 编译QEMU源码
  • 3 创建QEMU虚拟机镜像
  • 4 启动QEMU虚拟机
  • 5 以命令行模式(非图形化界面)登陆虚拟机
    • 5.1 以ssh方式连接Guest虚拟机
  • 6 强制退出QEMU虚拟机的快捷键:
  • 参考文章

1 主机环境/软件版本

Host: Ubuntu 16.04
QEMU v5.1.0
Guest: Ubuntu 16.04

2 从源码编译安装QEMU

2.1 获取QEMU 5.1.0的源码

~/workspace$ wget https://download.qemu.org/qemu-5.1.0.tar.xz
~/workspace$ tar xvJf qemu-5.1.0.tar.xz

2.2 创建build目录+配置

~/workspace$ mkdir build && cd build
~/workspace/build$ ../qemu-5.1.0/configure --enable-kvm  --target-list=x86_64-softmmu

其中,配置选项--enable-kvm 表示让QEMU支持kvm;
选项--target-list=<架构名> 表示准备编译哪一种CPU架构的QEMU,‘x86_64-softmmu’表示目标为x86 64位的CPU;
选项--enable-debug 用来使能debug QEMU;

在配置QEMU时,若运行~/workspace/build$ ../qemu-5.1.0/configure 不带任何选项的话会很慢,因为它会配置所有支持的CPU架构,且编译时也会把所有配置了的架构都编译一遍。

2.3 编译QEMU源码

~/workspace/build$ make -j4

此时QEMU编译完成,并在‘build/x86_64-softmmu/’ 目录下生成了可执行文件qemu-system-x86_64

若要将QEMU安装到host系统环境中,还需要执行make install 命令。

3 创建QEMU虚拟机镜像

首先使用qemu-img 创建一个虚拟机镜像文件;然后利用guest操作系统的ISO文件将guest OS安装到虚拟机镜像文件中。
参考命令如下:

~/workspace$ ./build/qemu-img create -f qcow2 test.qcow2 16G
~/workspace$ ./build/x86_64-softmmu/qemu-system-x86_64 -m 2G -drive format=qcow2,file=test.qcow2 -cdrom ubuntu16.04-Desktop-x86_64.iso

第一个命令qemu-img创建了一个大小为16G、格式为qcow2的虚拟机镜像文件“test.qcow2”,其中选项-f 用于指定镜像文件的格式;
第二个命令则是通过"ubuntu16.04-Desktop-x86_64.iso"文件启动并安装guest操作系统(即Ubuntu16.04);其中选项
-m用于指定内存大小,
-drive用于指定镜像文件(可理解为硬盘),
-cdrom用于指定要载入的外部文件。

4 启动QEMU虚拟机

~/workspace$ ./build/x86_64-softmmu/qemu-system-x86_64 -m 2G -drive format=qcow2,file=test.qcow2

终端会显示“VNC server running on 127.0.0.1:5900”,
此时打开系统软件“Remmina Remote Desktop Client”即可连接QEMU虚拟机的UI进入Guest OS桌面环境。
从源码编译安装QEMU以及如何创建QEMU虚拟机_第1张图片
在启动QEMU虚拟机时,还可以添加选项-enable-kvm 来启用kvm模式:

~/workspace$ ./build/x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 2G -drive format=qcow2,file=test.qcow2

若主机是AMD的CPU,使用该命令可能会报如下错误:

qemu-system-x86_64: error: failed to set MSR 0xe1 to 0x0
qemu-system-x86_64: ~/workspace/qemu-5.1.0/target/i386/kvm.c:2713: kvm_buf_set_msrs: Assertion `ret == cpu->kvm_msr_buf->nmsrs' failed.
Aborted (Core Dump)

解决办法 [1]:
创建配置文件/etc/modprobe.d/qemu-system-x86.conf 后重启主机,具体命令如下:

$ sudo tee /etc/modprobe.d/qemu-system-x86.conf << EOF
>options kvm ignore_msrs=1
>EOF
$ sudo reboot

5 以命令行模式(非图形化界面)登陆虚拟机

首先通过上面的VNC连接模式进入虚拟机,然后修改Guest OS中的grub启动配置,具体为/etc/default/grub文件中的GRUB_CMDLINE_LINUX="" 这一行[2]:

$ sudo vim /etc/default/grub
将 GRUB_CMDLINE_LINUX="" 修改为 GRUB_CMDLINE_LINUX="console=ttyS0"
然后保存并退出
$ sudo update-grub

记得修改完后要运行sudo update-grub 命令更新grub来使得上述修改生效。

此时关闭Guest OS虚拟机,运行QEMU启动命令(带上选项-nographic)来启动即可在当前终端下显示并登陆Guest OS:

~/workspace$ ./build/x86_64-softmmu/qemu-system-x86_64 -nographic -enable-kvm -m 2G -drive format=qcow2,file=test.qcow2

Ubuntu 16.04.6 LTS test-PC ttyS0
test-PC login: test
Password: 
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-45-generic x86_64)
387 packages can be updated.
332 updates are security updates.  ...
test@test-PC:~$ 

这里有一个不足:所有类型的文件没有颜色高亮的区分,比如ls /显示的文件夹和文件是相同颜色。

5.1 以ssh方式连接Guest虚拟机

解决terminal下Guest OS中的不同类型文件没有颜色高亮,办法就是在Guest OS中启用SSH server,然后在Host中ssh连接Guest。

首先,确保Guest OS中安装好ssh server。

test@test-PC:~$ dpkg -l openssh-server 
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
un  openssh-server <none>       <none>       (no description available)
test@test-PC:~$ sudo apt-get install openssh-server 

然后,在Host中另外开启一个终端并ssh连接Guest:

test@ubuntu:~/workspace$ ssh -p 2222 localhost
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be establi.
ECDSA key fingerprint is SHA256:o/93oB5KHutDf3D2BEvKUjMlkaZSwGe7+zles3e5VL8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known host.
test@localhost's password: 
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-45-generic x86_64)

6 强制退出QEMU虚拟机的快捷键:

先按ctrl + a 放开后,再按下 x。

这个在运行启动虚拟机的命令后发生卡死现象时特别有用!!


参考文章

  1. 解决 AMD CPU 使用 VMWare 在嵌套虚拟化中用 qemu 启动虚拟机提示 Assertion ret == cpu-kvm_msr_buf-nmsrs failed
  1. How to start qemu directly in the console (not in curses or SDL)

  2. QEMU Standard Options (master branch version)

你可能感兴趣的:(虚拟化,QEMU,qemu,虚拟机)