* Relicensed under Fair Source License As announced in https://tart.run/blog/2023/02/11/changing-tart-license/ * Proper encoding * Terms of service and subscription agreement template * No need for an announcement * Update license in brew
4.3 KiB
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:
tart create --from-ipsw=latest monterey-vanilla
tart run monterey-vanilla
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 visudoin Terminal, find%admin ALL=(ALL) ALLaddadmin ALL=(ALL) NOPASSWD: ALLto 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:
sudo apt update
sudo apt install -y openssh-server
sudo ufw allow ssh
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 monterey-base 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:
tart login acme.io
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:
tart push my-local-vm-name acme.io/remoteorg/name:latest acme.io/remoteorg/name:v1.0.0
Pulling a Remote Image
You can either pull an image:
tart pull acme.io/remoteorg/name:latest
...or instantiate a VM from a remote image:
tart clone acme.io/remoteorg/name:latest my-local-vm-name
This invocation calls the tart pull implicitly (if the image is not being present) before doing the actual cloning.