使用libvirt+QEMU的MacOS上的Ubuntu VM

2020-08-27 13:29:34

我第一次了解libvirt和QEMU是在三年前,当时我写了一篇关于如何在Linux系统上虚拟化MacOS的指南。今天我将展示相反的情况,使用相同的工具在MacOS上虚拟化Linux。令我惊讶的是,有这么多的软件开发人员每天都在使用MacBooks,却没有人编写如何在MacOS上使用libvirt和QEMU的指南。

为什么libvirt和qemu更好?首先,它是免费和开源的。与Parallels Desktop和VMWare Fusion不同,您无需支付昂贵的订阅费用或管理许可证。确实存在一个开源替代方案(来自Oracle!)。名为VirtualBox,它工作得非常好。但是,VirtualBox不支持MacOS的Hypervisor.Framework,后者是为限制内核修改而创建的虚拟化API。这意味着安装程序将请求管理员权限来安装内核扩展,出于安全原因,苹果现在正在逐步淘汰这一功能。另一方面,QEMU自2018年以来一直支持Hypervisor.Framework。只要对kexts说不就行了!

此外,像许多开发人员一样,我喜欢无头运行VM,即没有桌面GUI,这样我就可以通过SSH进入它们。在后台运行虚拟机似乎是一项简单的功能,但它需要对VirtualBox和VMWare Fusion进行大量复杂的配置。Parallels希望您购买专业版以获得访问权限。最好的细分市场...。使用libvirt,VM可以从无头开始。此外,当您关闭MacOS时,它还会向您的虚拟机发送关闭信号。

需要说明的是,此方法不支持USB通过、GPU通过或网桥联网。但是,如果您只需要在Linux VM上测试node.js或nginx,那么这种方法非常棒。

运行BREW安装qemu GCC libvirt。如果您安装了libvirt版本6.6.0,则还应在终端中运行以下命令(GitHub问题):

由于MacOS不支持QEMU安全功能,我们需要禁用它们:ECHO';SECURITY_Driver=";NONE";';>;>;/usr/local/etc/libvirt/qemu.confecho";dynamic_owner=0";>;>;/usr/local/etc/libvirt/qemu.confecho";记住_OWNER=0&#。

最后启动libvirt服务,用BREW服务启动libvirt。它也将在引导后启动。

有两种方式可以访问VM的虚拟显示,要么使用VNC客户机,要么使用virt-viewer程序。我推荐RealVNC Viewer。VNC客户端响应迅速,但如果您有多个VM,则需要手动管理不同的端口。使用virt-viewer,您会看到一个弹出式窗口,其中包含当前正在运行的所有虚拟机,但是它很迟缓,而且需要很长时间才能安装。Virt-Viewer可以通过自制软件安装。本指南的其余部分使用VNC。

在您的主目录中创建一个VMS文件夹,并生成磁盘映像。将50G更改为您首选的磁盘大小:

下载Ubuntu Server20.04安装映像和我的libvirt XML模板,并将.iso和.xml文件放在同一文件夹中。

修改ubuntu.xml文件中的以下元素以匹配您的VM首选项和文件路径。保存,然后运行virsh定义ubuntu.xml,然后运行virsh start ubuntu。

虚拟机<;的<;域类型=';qemu;/名称&>内存单元=';GB&>;内存单元=';GB&>;多少内存/内存&>vCPU&>;多少个CPU;/vcpu&>;...<;磁盘类型=';文件&39;设备=';设备=';设备=';设备=';设备=';xmlns:qemu=';http://libvirt.org/schemas/domain/qemu/1.0';>;<;name>;name=';Disk';>;source file=';qco2文件';/>;...<;磁盘类型=';file';device=';CDROM&39;>;source file=';安装的完整路径iso';/>;

启动RealVNC Viewer并连接到localhost。单击Ctrl+Alt+Del按钮重新启动计算机,然后快速按Esc进入启动菜单。按与Ubuntu服务器映像匹配的数字。

正常安装Ubuntu Server,确保开启SSH服务器。一旦它重新启动,您就可以通过运行ssh-p2222user@localhost从您的终端连接到VM。

要向虚拟机发送关机信号,请运行virsh shutdown ubuntu。要强制关机,请运行virsh delete ubuntu。

要将端口(例如端口443)从虚拟机转发到本地端口8443,请运行以下命令:ssh-p 2222-L8443:localhost:443 user@localhost

如果要创建多个VM,请使用唯一的UUID、VM名称和VNC端口为每台计算机创建一个XML文件。另外,更改hostfwd参数,使每个虚拟机为SSH公开不同的端口,例如2223而不是2222。在您定义了它们之后,您可以获得当前使用virsh list运行的VM的列表。