wbq813 Record Space

One who wants to wear the crown bear the crown.

ToC
Ubuntu 构建Kvm环境
/    

Ubuntu 构建Kvm环境

Ubuntu 构建Kvm环境

1. 硬件系统的配置

在 x86-64 架构的处理器中, KVM 必需的硬件虚拟化扩展分别为: Intel 的虚拟化技术(Intel VT) 和 AMD 的 AMD-V 技术。首先处理器(CPU) 要在硬件上支持 VT 技术, 还要在 BIOS 中将其功能打开, KVM 才能使用到。 目前, 多数流行的服务器和部分桌面处理器的 BIOS 都默认将 VT 打开了。

Linux 系统中, 可以通过检查 /proc/cpuinfo 文件中的 CPU 特性标志(flags) 来查看 CPU 目
前是否支持硬件虚拟化。 在 x86 和 x86-64 平台中, Intel 系列 CPU 支持虚拟化的标志为“vmx”,AMD 系列 CPU 的标志为“ svm”, 所以可以用如下命令行查看“ vmx” 或者“ svm” 标志。

grep -E '(vmx|svm)' /proc/cpuinfo

2. 安装宿主机 Linux 系统

KVM 是基于内核的虚拟化技术, 要运行 KVM 虚拟化环境, 安装一个 Linux 操作系统的宿主机(Host) 是必需的。下面将使用ubuntu18.04为例进行安装。

3. 编译和安装 KVM

3.1 download source code

  1. download Kvm

    url: https://git.kernel.org/pub/scm/virt/kvm/kvm.git/

    version: linux-4.16.tar.gz

3.2 Config Kvm

  1. 使用可视化的配置选项,否则9k+的配置会让你崩溃。
    	make menuconfig
    
  2. 如果出现错误:Unable to find the ncurses libraries
    	sudo apt-get install ncurses-dev
    
  3. 选择了 Virtualization 之后, 进入其中进行详细配置, 包括选中 KVM、 选中对处理器的支持等。
    	CONFIG_HAVE_KVM=y
    	CONFIG_HAVE_KVM_IRQCHIP=y
    	CONFIG_HAVE_KVM_EVENTFD=y
    	CONFIG_KVM_APIC_ARCHITECTURE=y
    	CONFIG_KVM_MMIO=y
    	CONFIG_KVM_ASYNC_PF=y
    	CONFIG_HAVE_KVM_MSI=y
    	CONFIG_VIRTUALIZATION=y
    	CONFIG_KVM=m
    	CONFIG_KVM_INTEL=m
    	# CONFIG_KVM_AMD is not set
    	CONFIG_KVM_MMU_AUDIT=y
    

    确保以上与Kvm相关的配置正确。

3.3 Compile Kvm

需要经过编译 kernel、 编译 bzImage 和编译 module 等三个步骤。

  1. 编译 kernel

    	make vmlinux -j 20
    

    -j参数表示使用20个进程进行编译,不是必须。

    遇到错误:scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory

    	sudo apt install libssl-dev
    
  2. 编译 bzImage

    	make bzImage
    
  3. 编译 module

    	make modules -j 20
    

3.4 Install Kvm

KVM 的安装包括两个步骤: module 的安装、 kernel 与 initramfs 的安装。

  1. 安装 module

    	make modules_install
    

    以上命令可以将编译好的 module 安装到相应的目录之中, 在默认情况下 module 被安装到 /lib/modules/$kernel_version/kernel 目录之中。

    报错Makefile:934: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev,libelf-devel or elfutils-libelf-devel"
    在配置文件暂时去掉这个配置:

    	# CONFIG_STACK_VALIDATION  is not set
    

    安装好 module 之后, 可以查看一下相应的安装路径, 可看到 kvm 模块也已经安装.

    	ls -l /lib/modules/4.15.0/kernel/
    	ls -l /lib/modules/4.15.0/kernel/arch/x86/kvm/
    
  2. 安装 kernel 和 initramfs

    	make install
    

    报错:gzip: stdout: No space left on device
    清理/boot分区或者调整/boot分区的大小。

    	ls -l /boot/
    

    通过以上命令可见, 在 /boot 目录下生成了内核(vmlinuz) 和 initramfs 等内核启动所需的文件。

    	cat /boot/grub/grub.cfg
    

    通过以上命令看到,在运行 make install 之后, grub 配置文件(如 : /boot/grub/grub.cfg) 中也自动添加了一个 grub 选项。

  3. 重新启动系统, 选择刚才为了 KVM 而编译、 安装的内核启动。

    在通常情况下, 系统启动时默认已经加载了 kvm 和 kvm_intel 这两个模块; 如果没有加载, 请手动用 modprobe 命令依次加载 kvm 和 kvm_intel 模块。

    	# 查看是否加载
    	lsmod | grep kvm
    	# 如果没有就手动加载
    	modprobe kvm
    	modprobe kvm_intel
    
  4. 检查 /dev/kvm 文件

    它是 kvm 内核模块提供给用户空间的 qemu-kvm 程序使用的一个控制接口, 它提供了客户机(Guest) 操作系统运行
    所需要的模拟和实际的硬件设备环境。

    	ls -l /dev/kvm
    

4. 编译和安装 qemu-kvm

除了在内核空间的 kvm 模块之外,在用户空间需要 QEMU 来模拟所需要 CPU 和设备模型以及用于启动客户机进程,这样才有了一个完整的 KVM 运行环境。 而 qemu-kvm 是为了针对 KVM专门做了修改和优化的 QEMU 分支。

  1. 下载 qemu-kvm 源码

    url: https://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git

    version: qemu-kvm-2.3.0.tar.gz

  2. 配置 qemu-kvm
    直接运行代码仓库中 configure 文件进行配置.

    	./configure
    

    报错ERROR: pkg-config binary 'pkg-config' not found

    	sudo apt install pkg-config
    

    报错ERROR: zlib check failed Make sure to have the zlib libs and headers installed.

    	sudo apt-get install zlib1g-dev
    

    报错ERROR: glib-2.12 gthread-2.0 is required to compile QEMU

    	sudo apt-get install libglib2.0-dev
    

    报错ERROR: pixman >= 0.21.8 not present.

    	apt-get install libpixman-1-dev
    

    报错ERROR: DTC (libfdt) not present.

    	apt-get install libfdt-dev
    

    修正以上错误后还是会编译出错。

    发现kernel.org下载的版本两年没更新了,到官网下载最新的稳定版:

    url: https://www.qemu.org/download/
    version: 2.12.0

    确保一下配置正确:

    	VNC support yes # 通常需要通过 VNC 连接到客户机中
    	KVM support yes # 这是对 KVM 的支持
    
  3. 编译 qemu-kvm
    直接make进行安装:

    	make -j 20
    

    可以看到, 最后有编译生成 qemu-system-x86_64 文件, 它就是我们常用的 qemu-kvm 的命令行工具

  4. 安装 qemu-kvm
    编译完成之后, 运行make install 命令即可安装 qemu-kvm。

    qemu-kvm 安装过程的主要任务有这几个 : 创建 qemu 的一些目录, 复制一些配置文件到相应的目录下, 复制一些 firmware 文件(如 : sgabios.bin, kvmvapic.bin) 到目录下以便 qemu-kvm 的命令行启动时可以找到对应的固件提供给客户机使用, 复制 keymaps 到相应的目录下以便在客户机中支持各种所需键盘类型, 复制 qemu-system-x86_64、 qemu-img 等可执行程序到对应的目录下。

  5. 检查 qemu-kvm 安装之后的系统状态

    	which qemu-system-x86_64
    	which qemu-img
    	ls /usr/local/share/qemu/
    	ls /usr/local/share/qemu/keymaps/
    
  6. 由于 qemu-kvm 是用户空间的程序, 安装之后不用重启系统, 直接用 qemu-systemx86_64、 qemu-img 这样的命令行工具即可使用 qemu-kvm 了。

5. 安装客户机

  1. 创建一个镜像文件或者磁盘分区等来存储客户机的系统和文件

    	dd if=/dev/zero of=rhel6u3.img bs=1M count=40960
    
  2. 启动客户机

    	qemu-system-x86_64 -usbdevice tablet -m 4096 -smp 2 --enable-kvm -boot order=cd -hda /home/micle/Proj/VirtDemo/win7sp1.img -cdrom  /home/micle/Proj/VirtDemo/win7pro_sp1_x64_dvd_u_677031.iso
    
  3. 安装vncviewer 并连接客户机

    	sudo apt install vnc4server
    	sudo apt install xvnc4viewer
    
    	vncviewer ip:5900
    
  4. Ctrl+Alt+2 切换到 QEMU 监视器窗口

    在监视器窗口中可以执行一些命令, 比如执行info kvm 命令来查看当前 QEMU 是否使用着 KVM.
    Ctrl+Alt+1 可以切换回原窗口。


Title: Ubuntu 构建Kvm环境
Author: wbq813
Traget: http://codeyourlife.cn/articles/2019/08/01/1564668343583.html

Comment