Набор утилит, которые помогут вам управлять виртуальными машинами с Virtualization.framework
# 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 знал, как найти виртуальные машины. Если вы не установите это, vmctl будет использовать текущий рабочий каталог для поиска виртуальных машин.
echo ' export VMCTLDIR="$HOME/VMs" ' >> ~ /.zprofile
export VMCTLDIR= " $HOME /VMs " Предоставьте виртуальную машину Ubuntu и установите это на ~/VMs . Виртуальная машина автоматически создаст вашего пользователя с вашим открытым ключом SSH по адресу ~/.ssh/id_rsa.pub .
make build/vm/ubuntu
mv build/vm/ubuntu " ${VMCTLDIR} /ubuntu "При желании расширить объем виртуальной машины, например, до 16G.
dd if=/dev/null of= " ${VMCTLDIR} /ubuntu/disk.img " bs=1g count=0 seek=16При желании отредактируйте конфигурацию виртуальной машины для большего количества ОЗУ и/или ЦП
vi " ${VMCTLDIR} /ubuntu/vm.conf "Начните виртуальную машину
vmctl start ubuntuПрикрепите к последовательной консоли, используйте (Ctrl+A - D, чтобы уйти)
vmctl attach ubuntu
Вы можете использовать vmctl ip ubuntu для проверки вашей виртуальной машины.
Подождите, пока виртуальная машина загрузится и SSH в виртуальную машину
vmctl ssh ubuntu
Вы должны выключить виртуальную машину, используя SSH в виртуальной машине. Если это не вариант, вы можете насильно закрыть его.
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
Например: в хосте создайте каталог foo в каталоге виртуальной машины (где ядро и initrd в прямом эфире) и добавьте это, используя --folder . Например, добавьте folder=foo to vm.conf , или Pass --folder=foo to vmcli напрямую.
В госте убедитесь /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 Framework от Khaost
Vftool-очень похожий инструмент, написанный Evansm7, но в Objective-C не Swift.