在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 |
为了能够创建和管理虚拟机,需要将用户添加到libvirt
和kvm
组中。否则部分文件会提示Permission Denied。
1 | sudo usermod -aG libvirt $USER |
注销并重新登录,以便更新组成员身份。
网络
在安装过程中会创建一个名为“virbr0”的网桥,该设备使用 NAT 将Guest连接到外部网络。使用下列命令查看:
1 | brctl show |
如果想要使用桥接模式,则需要额外配置。Bridged_Networking。
创建虚拟机
从菜单栏点击Virtual Machine Manager程序,或者命令行输入virt-manager启动。
- 点击File —> New Virtual Machine;
- 下载ubuntu的镜像,然后这里选择本地的ISO文件;
- 选择 VM 的内存和 CPU 设置
- 为虚拟机创建磁盘镜像,选择虚拟机的磁盘空间大小
- 设置虚拟机的名字。此处可以勾选“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 | ... |
分别编辑*/etc/apparmor.d/usr.sbin.libvirtd和/etc/apparmor.d/abstractions/libvirt-qemu*两个文件,加入如下内容(加入的可执行程序的路径,依据libvirt的错误日志填写)。
1 | ...... |
填写完成之后输入下列命令重新加载apparmor。
1 | sudo systemctl reload apparmor |
之后再次尝试创建虚拟机,成功创建。
相关资料
在Ubuntu下配置libvirt