Um conjunto de serviços públicos para ajudá -lo a gerenciar VMs com 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
Agora você terminou de instalar vmcli e vmctl
Defina a variável de ambiente VMCTLDIR como ~/VMs para que vmctl saiba como encontrar VMs. Se você não definir isso, vmctl usará o diretório de trabalho atual para encontrar VMs.
echo ' export VMCTLDIR="$HOME/VMs" ' >> ~ /.zprofile
export VMCTLDIR= " $HOME /VMs " Provisão uma VM Ubuntu e instale -a em ~/VMs . A VM criará automaticamente seu usuário com sua chave pública SSH em ~/.ssh/id_rsa.pub .
make build/vm/ubuntu
mv build/vm/ubuntu " ${VMCTLDIR} /ubuntu "Opcionalmente expande o volume da VM, por exemplo, para 16g.
dd if=/dev/null of= " ${VMCTLDIR} /ubuntu/disk.img " bs=1g count=0 seek=16Opcionalmente edite a configuração da VM para mais núcleos de RAM e/ou CPU
vi " ${VMCTLDIR} /ubuntu/vm.conf "Inicie a VM
vmctl start ubuntuAnexe ao console serial, use (ctrl+a - d para sair)
vmctl attach ubuntu
Você pode usar vmctl ip ubuntu para verificar seu IP da VM.
Aguarde a VM inicializar e SSH na VM
vmctl ssh ubuntu
Você deve desligar a VM usando SSH na VM. Se isso não for uma opção, você pode desligá -lo à força.
vmctl stop ubuntu
O suporte ao compartilhamento de pastas com o host foi adicionado no MacOS 12 (Monterey), e isso é ativado se compilado em 12.0 ou posterior.
A partir de 12.1, o suporte do macOS para esse recurso parece um pouco confiável. Se você quiser experimentar de qualquer maneira, use --folder <host path>:<tag> Argumentos. No hóspede, monte -os usando -t virtiofs <tag> <guest mountpoint> .
Se o componente :<tag> for omitido, o caminho do host será usado como uma tag, mas observe que há um limite de tamanho de 36 UTF-8 bytes para tags.
A pasta compartilhada pode ser feita somente leitura ao convidado, adicionando ro como um terceiro componente ao argumento da pasta compartilhada: --folder <host path>:<tag>:ro
Por exemplo: No host, crie um diretório foo no diretório VM (onde o kernel e o Initrd Live) e adicione isso usando --folder . Por exemplo, adicione folder=foo a vm.conf ou aprovar --folder=foo ao vmcli diretamente.
No hóspede, garanta /mnt/foo é um diretório vazio e, em seguida, 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 é uma prova de conceito usando Virtualization.framework por Khaost
O VFTOOL é uma ferramenta muito semelhante escrita pelo Evansm7, mas no Objective-C não é Swift.