Un ensemble de services publics pour vous aider à gérer les machines virtuelles avec 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
Vous avez maintenant fini d'installer vmcli et vmctl
Définissez la variable VMCTLDIR sur ~/VMs afin que vmctl sache comment trouver des machines virtuelles. Si vous ne définissez pas cela, vmctl utilisera le répertoire de travail actuel pour trouver des machines virtuelles.
echo ' export VMCTLDIR="$HOME/VMs" ' >> ~ /.zprofile
export VMCTLDIR= " $HOME /VMs " Provisionnez une machine virtuelle Ubuntu et installez-la sur ~/VMs . La machine virtuelle créera automatiquement votre utilisateur avec votre clé publique SSH à ~/.ssh/id_rsa.pub .
make build/vm/ubuntu
mv build/vm/ubuntu " ${VMCTLDIR} /ubuntu "Développez étendu le volume de machine virtuelle, par exemple à 16g.
dd if=/dev/null of= " ${VMCTLDIR} /ubuntu/disk.img " bs=1g count=0 seek=16Modifiez édition en option de la configuration de la machine virtuelle pour plus
vi " ${VMCTLDIR} /ubuntu/vm.conf "Démarrer la machine virtuelle
vmctl start ubuntuFixez-vous à la console série, utilisez (Ctrl + A - D pour quitter)
vmctl attach ubuntu
Vous pouvez utiliser vmctl ip ubuntu pour vérifier votre IP VM.
Attendez que la machine virtuelle démarre et SSH dans la machine virtuelle
vmctl ssh ubuntu
Vous devez fermer la machine virtuelle à l'aide de SSH dans la machine virtuelle. Si ce n'est pas une option, vous pouvez l'arrêter de force.
vmctl stop ubuntu
La prise en charge des dossiers de partage avec l'hôte a été ajoutée dans MacOS 12 (Monterey), et cela est activé s'il est compilé sur 12.0 ou ultérieure.
En 12.1, la prise en charge des macOS pour cette fonction semble quelque peu peu fiable. Si vous souhaitez l'essayer de toute façon, utilisez --folder <host path>:<tag> Arguments. Chez l'invité, montez-le en utilisant -t virtiofs <tag> <guest mountpoint> .
Si le composant :<tag> est omis, le chemin d'hôte sera utilisé comme balise, mais notez qu'il existe une limite de taille de 36 octets UTF-8 pour les balises.
Le dossier partagé peut être en lecture seule à l'invité en ajoutant ro comme troisième composant à l'argument du dossier partagé: --folder <host path>:<tag>:ro
Par exemple: dans l'hôte, créez un répertoire foo dans le répertoire VM (où le noyau et initrd live) et ajoutez-le en utilisant --folder . Par exemple, ajoutez folder=foo à vm.conf , ou passez --folder=foo à vmcli directement.
Chez l'invité, Assurer /mnt/foo est un répertoire vide, puis 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 est une preuve de concept utilisant Virtualization.framework
Vftool est un outil très similaire écrit par EVANSM7 mais dans Objective-C pas Swift.