Un conjunto de utilidades para ayudarlo a administrar máquinas virtuales con 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
Ahora ha terminado de instalar vmcli y vmctl
Establezca la variable de entorno VMCTLDIR a ~/VMs para que vmctl sepa cómo encontrar máquinas virtuales. Si no establece esto, vmctl utilizará el directorio de trabajo actual para buscar máquinas virtuales.
echo ' export VMCTLDIR="$HOME/VMs" ' >> ~ /.zprofile
export VMCTLDIR= " $HOME /VMs " Provise una VM Ubuntu e instale eso a ~/VMs . La VM creará automáticamente a su usuario con su clave pública SSH en ~/.ssh/id_rsa.pub .
make build/vm/ubuntu
mv build/vm/ubuntu " ${VMCTLDIR} /ubuntu "Opcionalmente, expanda el volumen de VM, por ejemplo a 16g.
dd if=/dev/null of= " ${VMCTLDIR} /ubuntu/disk.img " bs=1g count=0 seek=16Opcionalmente, edite la configuración de VM para obtener más núcleos de RAM y/o CPU
vi " ${VMCTLDIR} /ubuntu/vm.conf "Comienza la VM
vmctl start ubuntuAdjuntar a la consola serie, use (Ctrl+A - D para dejar de fumar)
vmctl attach ubuntu
Puede usar vmctl ip ubuntu para verificar su IP de VM.
Espere a que el VM arranque y ssh en la VM
vmctl ssh ubuntu
Debe cerrar la VM usando SSH dentro de la VM. Si esa no es una opción, puede apagarla a la fuerza.
vmctl stop ubuntu
El soporte para compartir carpetas con el host se agregó en MacOS 12 (Monterey), y esto se habilita si se compila en 12.0 o posterior.
A partir de 12.1, el soporte de MacOS para esta característica parece algo poco confiable. Si desea probarlo de todos modos, use --folder <host path>:<tag> argumentos. En el invitado, monte estos usando -t virtiofs <tag> <guest mountpoint> .
Si se omite el componente :<tag> , la ruta del host se usará como etiqueta, pero tenga en cuenta que hay un límite de tamaño de 36 UTF-8 bytes para etiquetas.
La carpeta compartida se puede hacer de solo lectura al invitado agregando ro como un tercer componente al argumento de la carpeta compartida: --folder <host path>:<tag>:ro
Por ejemplo: en el host, cree un directorio foo en el directorio VM (donde viven el núcleo e initrd), y agregue esto usando --folder . Por ejemplo, agregue folder=foo a vm.conf , o pase --folder=foo a vmcli directamente.
En el invitado, asegurar /mnt/foo es un directorio vacío, luego 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 es una prueba de concepto usando Virtualization.framework por Khaost
VFTOOL es una herramienta muy similar escrita por Evansm7 pero en Objective-C no Swift.