在Ubuntu下配置libvirt

安装Libvirt

主要参考相关资料[1]。

准备

检查CPU是否支持虚拟化。如果 CPU 支持硬件虚拟化,该命令将输出一个大于零的数字,即 CPU 内核数。否则,如果输出是,0则表示 CPU 不支持硬件虚拟化。

1
grep -Eoc '(vmx|svm)' /proc/cpuinfo

检查内核是否启用了KVM

1
lsmod | grep -i kvm

安装KVM

1
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
  • qemu-kvm - 为 KVM 管理程序提供硬件仿真的软件。
  • libvirt-daemon-system - 将 libvirt 守护进程作为系统服务运行的配置文件。
  • libvirt-clients - 用于管理虚拟化平台的软件。
  • bridge-utils - 一组用于配置以太网桥的命令行工具。
  • virtinst - 一组用于创建虚拟机的命令行工具。
  • virt-manager - 易于使用的 GUI 界面和支持命令行实用程序,用于通过 libvirt 管理虚拟机。

安装完成之后,确认libvirtd的启动。

1
service libvirtd status

为了能够创建和管理虚拟机,需要将用户添加到libvirtkvm组中。否则部分文件会提示Permission Denied。

1
2
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

注销并重新登录,以便更新组成员身份。

网络

在安装过程中会创建一个名为“virbr0”的网桥,该设备使用 NAT 将Guest连接到外部网络。使用下列命令查看:

1
brctl show

如果想要使用桥接模式,则需要额外配置。Bridged_Networking

创建虚拟机

从菜单栏点击Virtual Machine Manager程序,或者命令行输入virt-manager启动。

  1. 点击File —> New Virtual Machine;
  1. 下载ubuntu的镜像,然后这里选择本地的ISO文件;
  1. 选择 VM 的内存和 CPU 设置
  1. 为虚拟机创建磁盘镜像,选择虚拟机的磁盘空间大小
  1. 设置虚拟机的名字。此处可以勾选“Customize configuration before install”,这样就可以自定义虚拟机的硬件配置。勾选之后点击finish即可进入到自定义配置界面。

至此虚拟机创建完成。

问题

问题1 - Unable to connect to libvirt qemu:///system.

该问题的主要原因是用户权限问题。因为libvirt-sock文件的权限为660,用户组为libvirt,所以其他用户是没有读写权限的。

解决方法:二选一即可

  • 将当前用户加入到libvirt用户组。理论上注销即可生效,但在实际使用的时候,重启计算机才生效。

    1
    2
    3
    4
    5
    6
    7
    # 通过usermod添加
    sudo usermod -aG libvirt <username>
    sudo usermod -aG kvm <username>

    # Or 通过adduser添加
    sudo adduser <username> libvirt
    sudo adduser <username> kvm
  • 直接修改该文件的权限为666

    1
    sudo chmod 666 /var/run/libvirt/libvirt-sock

问题2 - Permission denied

在创建虚拟机的时候出现如下日志。

1
internal error: Failed to start QEMU binary /usr/local/bin/qemu-system-x86_64 for probing libvirt: error : cannot execute binary /usr/local/bin/qemu-system-x86_64: Permission denied

这很有可能是apparmor安全模块导致的。参照相关资料[4]中的描述进行检查。

查看apparmor的使用情况

1
sudo aa-status

如果输出中出现了下列内容,则说明libvirt正被apparmor保护。

1
2
3
4
5
6
7
8
...
xx profiles are in enforce mode.
...
/usr/sbin/libvirtd
...
xx processes are in enforce mode.
/usr/sbin/libvirtd
...

分别编辑*/etc/apparmor.d/usr.sbin.libvirtd/etc/apparmor.d/abstractions/libvirt-qemu*两个文件,加入如下内容(加入的可执行程序的路径,依据libvirt的错误日志填写)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  ......
# qemu相关指令
/usr/bin/kvm rmix,
/usr/local/bin/qemu-system-sparc rmix,
/usr/local/bin/qemu-system-sparc64 rmix,
/usr/local/bin/qemu-system-x86_64 rmix,
/usr/local/bin/qemu-system-xtensa rmix,
/usr/local/bin/qemu-system-xtensaeb rmix,
/usr/local/bin/qemu-img rmix,
# swtpm相关指令
/usr/local/bin/swtpm rmix,
/usr/local/bin/swtpm_bios rmix,
/usr/local/bin/swtpm_cert rmix,
/usr/local/bin/swtpm_cuse rmix,
/usr/local/bin/swtpm_ioctl rmix,
/usr/local/bin/swtpm_setup rmix,
/usr/local/share/swtpm/swtpm-localca rmix,
}

填写完成之后输入下列命令重新加载apparmor。

1
sudo systemctl reload apparmor

之后再次尝试创建虚拟机,成功创建。

相关资料

  1. How to Install Kvm on Ubuntu 20.04
  2. KVM Virt-Manager Error: No active connection to Installed on
  3. KVM报错:Unable to connect to libvirt qemu:///system. 确定 ‘libvirtd’ 守护进程正在运行
  4. Changing libvirt emulator: Permission denied
  5. QEMU Networking
Author

Chaos Chen

Posted on

2021-08-05

Updated on

2023-06-30

Licensed under

Commentaires