一組實用程序來幫助您通過Virtualization.framework管理VM
# make sure xcode command-line tools are installed
xcode-select --install
# run build, install. This will install vmcli and vmctl to /usr/local/bin
make
sudo make install
您現在已經完成了安裝vmcli和vmctl
將環境變量VMCTLDIR設置為~/VMs因此vmctl知道如何找到VM。如果您不設置此功能, vmctl將使用當前的工作目錄查找VM。
echo ' export VMCTLDIR="$HOME/VMs" ' >> ~ /.zprofile
export VMCTLDIR= " $HOME /VMs "提供Ubuntu VM,然後將其安裝到~/VMs 。 VM將使用您的SSH公共密鑰自動創建您的用戶~/.ssh/id_rsa.pub 。
make build/vm/ubuntu
mv build/vm/ubuntu " ${VMCTLDIR} /ubuntu "可選地將VM卷擴展為16G。
dd if=/dev/null of= " ${VMCTLDIR} /ubuntu/disk.img " bs=1g count=0 seek=16可選地編輯VM配置,以獲取更多RAM和/或CPU內核
vi " ${VMCTLDIR} /ubuntu/vm.conf "啟動VM
vmctl start ubuntu連接到串行控制台,使用(ctrl+a -d退出)
vmctl attach ubuntu
您可以使用vmctl ip ubuntu檢查VM IP。
等待VM啟動並進入VM
vmctl ssh ubuntu
您應該使用VM中的SSH關閉VM。如果不是一個選擇,則可以強行將其關閉。
vmctl stop ubuntu
MacOS 12(Monterey)中添加了對與主機共享文件夾的支持,如果在12.0或以後進行編譯,則啟用了這一點。
從12.1開始,MACOS對此功能的支持似乎有些不可靠。如果您想嘗試一下,請使用--folder <host path>:<tag>參數。在來賓中,使用-t virtiofs <tag> <guest mountpoint>安裝它們。
如果省略:<tag>組件,則將主機路徑用作標籤,但請注意,標籤的大小限制為36 UTF-8字節。
可以通過將ro作為共享文件夾參數的第三個組件添加為第三個組件: --folder <host path>:<tag>:ro可以將共享文件夾添加給來賓。
例如:在主機中,在VM目錄(內核和Intrd live的位置)中創建一個foo目錄,然後使用--folder添加它。例如,將folder=foo添加到vm.conf或通過--folder=foo直接到vmcli 。
在來賓中,確保/mnt /mnt/foo是一個空目錄,然後sudo mount -t virtiofs foo /mnt/foo 。
USAGE: vmcli [--cpu-count <cpu-count>] [--memory-size <memory-size>] [--memory-size-suffix <memory-size-suffix>] [--disk <disk> ...] [--cdrom <cdrom> ...] [--folder <folder> ...] [--network <network> ...] [--balloon <balloon>] [--bootloader <bootloader>] [--kernel <kernel>] [--initrd <initrd>] [--cmdline <cmdline>] [--escape-sequence <escape-sequence>]
OPTIONS:
-c, --cpu-count <cpu-count>
CPU count (default: 1)
-m, --memory-size <memory-size>
Memory Bytes (default: 512)
--memory-size-suffix <memory-size-suffix>
Memory Size Suffix (default: MiB)
-d, --disk <disk> Disks to use
--cdrom <cdrom> CD-ROMs to use
-f, --folder <folder> Folders to share (macOS 12.0 or later)
-n, --network <network> Networks to use. e.g. aa:bb:cc:dd:ee:ff@nat for a nat device, or ...@en0 for bridging to en0. Omit mac address for a
generated address. (default: nat)
--balloon <balloon> Enable / Disable Memory Ballooning (default: true)
-b, --bootloader <bootloader>
Bootloader to use (default: linux)
-k, --kernel <kernel> Kernel to use
--initrd <initrd> Initrd to use
--cmdline <cmdline> Kernel cmdline to use
--escape-sequence <escape-sequence>
Escape Sequence, when using a tty (default: q)
-h, --help Show help information.
usage: vmctl {start|stop|attach|ip|ssh} vm
vmctl list
SimpleVM是使用Virtualization.framework概念證明。
VFTool是Evansm7撰寫的非常相似的工具,但在Objective-C中不是迅速。