Managing Virtual Machine¶
Creating from scratch¶
Tart supports macOS and Linux virtual machines. All commands like run
and pull
work the same way regarding of the underlying OS a particular VM image has.
The only difference is how such VM images are created. Please check sections below for macOS and Linux instructions.
Creating a macOS VM image from scratch¶
Tart can create VMs from *.ipsw
files. You can download a specific *.ipsw
file here or you can
use latest
instead of a path to *.ipsw
to download the latest available version:
After the initial booting of the VM you'll need to manually go through the macOS installation process. As a convention we recommend creating an admin
user with an admin
password. After the regular installation please do some additional modifications in the VM:
- Enable Auto-Login. Users & Groups -> Login Options -> Automatic login -> admin.
- Allow SSH. Sharing -> Remote Login
- Disable Lock Screen. Preferences -> Lock Screen -> disable "Require Password" after 5.
- Disable Screen Saver.
- Run
sudo visudo
in Terminal, find%admin ALL=(ALL) ALL
addadmin ALL=(ALL) NOPASSWD: ALL
to allow sudo without a password.
Creating a Linux VM image from scratch¶
Linux VMs are supported on hosts running macOS 13.0 (Ventura) or newer.
# Create a bare VM
tart create --linux ubuntu
# Install Ubuntu
tart run --disk focal-desktop-arm64.iso ubuntu
# Run VM
tart run ubuntu
After the initial setup please make sure your VM can be SSH-ed into by running the following commands inside your VM:
Configuring a VM¶
By default, a tart VM uses 2 CPUs and 4 GB of memory with a 1024x768
display. This can be changed with tart set
command.
Please refer to tart set --help
for additional details.
Building with Packer¶
Please refer to Tart Packer Plugin repository for setup instructions. Here is an example of a template to build a local image based of a remote image:
packer {
required_plugins {
tart = {
version = ">= 0.5.3"
source = "github.com/cirruslabs/tart"
}
}
}
source "tart-cli" "tart" {
vm_base_name = "ghcr.io/cirruslabs/macos-ventura-base:latest"
vm_name = "my-custom-ventura"
cpu_count = 4
memory_gb = 8
disk_size_gb = 70
ssh_password = "admin"
ssh_timeout = "120s"
ssh_username = "admin"
}
build {
sources = ["source.tart-cli.tart"]
provisioner "shell" {
inline = ["echo 'Disabling spotlight indexing...'", "sudo mdutil -a -i off"]
}
# more provisioners
}
Here is a repository with Packer templates used to build all the images managed by us.
Working with a Remote OCI Container Registry¶
For example, let's say you want to push/pull images to a registry hosted at https://acme.io/.
Registry Authorization¶
First, you need to log in and save credential for acme.io
host via tart login
command:
Credentials are securely stored in Keychain.
In addition, Tart supports Docker credential helpers
if defined in ~/.docker/config.json
.
Finally, TART_REGISTRY_USERNAME
and TART_REGISTRY_PASSWORD
environment variables allow to override authorization
for all registries which might useful for integrating with your CI's secret management.
Pushing a Local Image¶
Once credentials are saved for acme.io
, run the following command to push a local images remotely with two tags:
Pulling a Remote Image¶
You can either pull an image:
...or instantiate a VM from a remote image:
This invocation calls the tart pull
implicitly (if the image is not being present) before doing the actual cloning.