Vftool在macOS Big Sur中运行Linux虚拟机

2020-12-11 14:01:14

这是一个非常简约且非常简洁的命令行包装程序,用于在macOS Big Sur Virtualization.framework中运行VM。

Vftool运行带有virtio块,网络,熵和控制台设备的Linux虚拟机。所有艰苦的工作和实际的虚拟化工作都是由Virtualization.framework执行的-这个包装器只是简单地设置配置对象,以描述VM。

它旨在是对该框架的最简单的调用,同时允许配置:

在基于M1的Mac(运行arm64 / AArch64 VM)上进行了测试,但也应在Intel Mac(运行x86 VM)上运行。需要macOS> = 11。

这不是基于GUI的应用程序,并且在命令行上提供了此配置。另请注意,Virtualization.framework当前不为帧缓冲区/视频控制台/ GUI提供公共接口,因此生成的VM仅具有(文本)控制台和联网。考虑在虚拟机中使用VNC,这非常有用。

尽管您可能必须在" Signing& amp;中设置(免费的)开发人员ID / AppleID开发人员团队,但应该单击一下。能力"项目配置的选项卡。

这将生成build / vftool。 Makefile应用代码签名和必需的权利而没有身份,这足以在您自己的计算机上运行。我尚未测试过此二进制文件是否可以在其他人的计算机上工作。

-k<内核路径> -a< kernel cmdline arguments> -i< initrd path> -d<光盘图像路径> -c< CDROM图像路径> -b<桥接以太网接口> -p<处理器数> -m<以MB为单位的内存大小> -t< tty type>

仅-k参数是必需的(用于内核映像的路径),所有其他参数都是可选的。 (当前)默认值为1 CPU,512MB RAM,&console = hvc0&#34 ;、基于NAT的网络,没有光盘或initrd,并为控制台创建了一个pty。

-t选项允许控制台使用stdin / stdout(选项0),或创建伪终端(选项1,默认值),然后等待您将某些东西附加到它,如下面的示例所示。伪终端(pty)方法提供了一个有用的交互式控制台(尤其是在设置VM时非常方便),但是stdin / stdout和立即启动对于在脚本中启动VM更为有用。

使用多个-d或-c选项可以附加多个光盘映像。光盘按照在命令行上给出的顺序进行连接,这将影响光盘的外观。例如,-d foo -d bar -c blah将创建三个virtio-blk设备,分别连接到foo,bar和blah的/ dev / vda,/ dev / vdb,/ dev / vdc。最多可以安装8张光盘。

内核应未压缩。 initrd可能是gz。光盘映像是原始文件/平面文件(没有像qcow2这样的花哨的文件)。

2020-11-25 02:14:33.883 vftool [86864:707935] vftool(v0.1 25/11/2020)starting2020-11-25 02:14:33.884 vftool [86864:707935] +++内核位于文件: ///Users/matt/vm/debian/Image-5.9,initrd at(null),cmdline' console = hvc0 root = / dev / vda1&#39 ;, 2 cpus,4096MB memory2020-11-25 02: 14:33.884 vftool [86864:707935] +++ fd 3已连接至/ dev / ttys0162020-11-25 02:14:33.884 vftool [86864:707935] +++等待连接至:/ dev / ttys016

vftool现在正在等待与VM控制台的连接-在此示例中,它为此创建了/ dev / ttys016。通过在另一个终端上附加此内容来继续:

此时,vftool将启动VM。 (好吧,vftool在此之后会验证一些项目,因此,如果您的光盘映像不存在,那么您现在就可以找到。)

请注意,Virtualization.framework将所有IO提供为virtio-pci,包括控制台(即非UART)。不幸的是,debian安装内核没有virtio驱动程序。我最终使用debootstrap(--foreign)将其安装到Linux机器上的光盘映像中...但是我听到了有关Fedora等的好消息。

-b选项使用VZBridgedNetworkDeviceAttachment配置桥接的网络接口,而不是默认的' NAT'。接口。目前无法使用。

桥接要求二进制文件具有com.apple.vm.networking权利,Apple文档有帮助地给出此注释:

注意此权利仅限于虚拟化软件开发人员。要请求此权利,请联系您的Apple代表。

这似乎是在说,您需要一个付费的开发人员帐户,并要求能够使用此OS功能。 (转动眼球)

幸运的是," NAT" default对于传出方向很好,甚至允许传入连接-它似乎是桥接接口的内核级NAT,而不是QEMU中使用的用户级TCP / IP。我最终得到了一个主机端bridge100网络接口,其IP为192.168.64.1,我的来宾获得了192.168.64.x地址,该地址可以从主机访问。因此,至少有一个可以通过SSH / VNC进入访客!

KhaosT的SimpleVM是Virtualization的Swift包装器。框架:https://github.com/KhaosT/SimpleVM这与vftool大致相同,但是具有友好的GUI。 vftool在配置方面有更多的灵活性(没有黑客来源),我个人更喜欢基于文本的终端方法。