尧图精选

Tart 快速上手指南:在 Apple Silicon 上几分钟内运行你的第一个虚拟机

🕒 发布时间:2026/9/17 22:22:52 📁 来源:尧图网络
Tart 快速上手指南在 Apple Silicon 上几分钟内运行你的第一个虚拟机【免费下载链接】tartmacOS and Linux VMs on Apple Silicon to use in CI and other automations项目地址: https://gitcode.com/GitHub_Trending/ta/tartTart 是一个面向 Apple SiliconM 系列芯片的轻量级虚拟机工具集专门用于构建、运行和管理 macOS 与 Linux 虚拟机VM其底层基于 Apple 官方的Virtualization.Framework适合在 CI 流水线和各类自动化任务中直接使用。本文以 docs/quick-start.md 为主体结合仓库源码Sources/tart为你完整讲解从安装 Tart、克隆官方镜像并启动第一个 VM到 SSH 远程登录、从零创建自定义镜像、目录共享、资源调整以及与 OCI 容器注册表对接的端到端实战流程。环境要求与安装Tart 需要一台运行macOS 13.0Ventura或更高版本的 Apple Silicon 设备。官方推荐通过 Homebrew 安装brew install openai/tools/tart安装完成后即可执行下面三行命令克隆官方预置镜像并启动第一个虚拟机首次会下载约 25 GB 的镜像请预留足够的磁盘空间tart clone ghcr.io/cirruslabs/macos-tahoe-base:latest tahoe-base tart run tahoe-base从发布包手动安装如果不使用 Homebrew也可以从最新发布归档手动安装tart二进制curl -LO https://github.com/openai/tart/releases/latest/download/tart.tar.gz tar -xzvf tart.tar.gz ./tart.app/Contents/MacOS/tart clone ghcr.io/cirruslabs/macos-tahoe-base:latest tahoe-base ./tart.app/Contents/MacOS/tart run tahoe-base注意手动安装时必须使用./tart.app/Contents/MacOS/tart这个路径来调用二进制这样 macOS 才会拾取tart.app/Contents/embedded.provisionprofile仓库中对应文件为 Resources/embedded.provisionprofile从而为 Tart 授予运行虚拟机所需的提权能力。直接从归档中把二进制拷出来裸跑是无法正常工作的。官方虚拟机镜像Tart 官方在 GHCRGitHub Container Registry上维护了一系列开箱即用的镜像每个 macOS 版本提供三种变体分别适用于不同场景镜像变体用途-vanilla纯净的 macOS 系统仅含基础系统-base已预置基础开发工具与配置适合直接跑任务-xcode预装 Xcode 全家桶适合 iOS/macOS 构建当前可用的 macOS 镜像如下macOS 26Tahoeghcr.io/cirruslabs/macos-tahoe-vanilla:latestghcr.io/cirruslabs/macos-tahoe-base:latestghcr.io/cirruslabs/macos-tahoe-xcode:latestmacOS 15Sequoiaghcr.io/cirruslabs/macos-sequoia-vanilla:latestghcr.io/cirruslabs/macos-sequoia-base:latestghcr.io/cirruslabs/macos-sequoia-xcode:latestmacOS 14Sonomaghcr.io/cirruslabs/macos-sonoma-vanilla:latestghcr.io/cirruslabs/macos-sonoma-base:latestghcr.io/cirruslabs/macos-sonoma-xcode:latestmacOS 13Venturaghcr.io/cirruslabs/macos-ventura-vanilla:latestghcr.io/cirruslabs/macos-ventura-base:latestghcr.io/cirruslabs/macos-ventura-xcode:latestmacOS 12Montereyghcr.io/cirruslabs/macos-monterey-vanilla:latestghcr.io/cirruslabs/macos-monterey-base:latestghcr.io/cirruslabs/macos-monterey-xcode:latest在 Cirrus Labs 维护的 GHCR 包列表中还可以发现更多具体版本标签例如ghcr.io/cirruslabs/macos-monterey-xcode:15这些镜像均由对应的 Packer 模板生成需要更细粒度版本时可按需挑选。此外通过tart clone ghcr.io/...拉取时还可以追加--concurrency参数控制网络并发默认 4加速大镜像下载。Linux 镜像Tart 同样支持 Linux 虚拟机宿主机需为 macOS 13.0 Ventura 或更新版本官方提供Ubuntughcr.io/cirruslabs/ubuntu:latestDebianghcr.io/cirruslabs/debian:latestFedoraghcr.io/cirruslabs/fedora:latest这些 Linux 镜像的最小磁盘大小为 20 GB克隆后建议立即扩容tart set的具体参数见下文配置虚拟机小节tart clone ghcr.io/cirruslabs/ubuntu:latest ubuntu tart set ubuntu --disk-size 50 tart run ubuntu镜像默认凭据所有上述官方镜像macOS 与 Linux都使用统一的默认登录凭据用户名admin密码admin该凭据同时适用于 GUI 登录、Linux 控制台登录以及 SSH 登录。SSH 访问虚拟机当虚拟机运行中且已开启 SSH 服务时可以结合tart ip命令方便地连接ssh admin$(tart ip tahoe-base)tart ip负责解析虚拟机在宿主机上的 IP 地址其实现位于 Sources/tart/Commands/IP.swift内置了三种解析策略可通过--resolver指定默认dhcpdhcp解析宿主机上的 DHCP lease 文件按 VM 的 MAC 地址匹配条目。速度最快、最可靠但不适用于使用桥接网络bridged networking的 VMarp调用外部arp命令解析 ARP 表适用于桥接网络前提是 VM 产生了足够的网络流量以填充宿主机 ARP 表对 Softnet 网络无效且并非所有 Linux 发行版都兼容agent通过 Tart Guest Agenttart-guest-agent查询适用于所有网络模式但需要先在 VM 内安装 guest agent。同时tart ip支持--wait参数单位秒可等待 VM 完成启动后再返回 IPtart ip --wait 60 tahoe-base在虚拟机内执行脚本Tart 官方推荐使用 Cirrus CLI 在 Tart 虚拟机内运行脚本或取回构建产物它用一份 YAML 配置统一管理起虚拟机、拷代码、跑任务、取产物的完整流程其示例.cirrus.yml见 docs/integrations/cirrus-cli.md。如果不想引入额外工具也可以使用纯sshtart ip的方式brew install cirruslabs/cli/sshpass sshpass -p admin ssh -o StrictHostKeyChecking no -o UserKnownHostsFile/dev/null admin$(tart ip tahoe-base) uname -a sshpass -p admin ssh -o StrictHostKeyChecking no -o UserKnownHostsFile/dev/null admin$(tart ip tahoe-base) script.sh第二条命令会把宿主机上的script.sh内容作为脚本在 guest 中执行非常适合在 CI 里跑自定义检查或构建步骤。从零创建虚拟机镜像Tart 对 macOS 与 Linux 虚拟机一视同仁run、pull等命令与 guest 操作系统无关唯一的差别在于镜像的创建方式。创建 macOS 虚拟机镜像macOS 虚拟机由*.ipsw恢复镜像文件创建可通过tart create --from-ipsw指定本地*.ipsw文件路径或直接传latest让 Tart 自动下载最新受支持的 IPSW实现见 Sources/tart/Commands/Create.swift 中对VZMacOSRestoreImage.fetchLatestSupported()的调用tart create --from-ipswlatest tahoe-vanilla tart run tahoe-vanilla首次启动后需要手动完成 macOS 安装流程官方约定创建admin用户密码admin。安装完成后建议在虚拟机内做以下额外配置以便后续无人值守使用启用自动登录系统设置 → 用户与群组 → 登录选项 → 自动登录 → admin开启 SSH系统设置 → 通用 → 共享 → 远程登录关闭锁屏系统设置 → 锁定屏幕 → 关闭在此时间后需要密码关闭屏幕保护程序在终端执行sudo visudo在%admin ALL(ALL) ALL之后新增一行admin ALL(ALL) NOPASSWD: ALL实现免密sudo。创建 Linux 虚拟机镜像Linux 虚拟机要求宿主机为 macOS 13.0Ventura或更新版本创建流程如下# 创建一个空白 Linux 虚拟机默认磁盘 50 GB tart create --linux ubuntu # 用 ISO 安装系统把 ISO 作为启动盘挂载 tart run --disk focal-desktop-arm64.iso ubuntu # 正常运行该虚拟机 tart run ubuntutart run --disk支持附加磁盘、ISO 与块设备参数格式为path[:options]ro表示只读挂载。另外注意如果 ISO 文件名以-amd64.iso结尾Tart 会直接报错拒绝启动因为 x86 架构的安装介质无法在 Apple Silicon 上运行请改用arm64版本校验逻辑见 Sources/tart/Commands/Run.swift 的validate()。完成安装后请在虚拟机内部执行以下命令确保它可以被 SSH 访问sudo apt update sudo apt install -y openssh-server sudo ufw allow ssh配置虚拟机默认情况下Tart 虚拟机使用2 个 CPU、4 GB 内存显示器分辨率为1024x768默认值对应 Sources/tart/VMConfig.swift 中的cpuCountMin/memorySizeMin。创建 VM 后可用tart set命令调整详见tart set --help常用参数如下参数说明示例--cpu N设置 CPU 核数tart set vm --cpu 4--memory MB设置内存大小单位 MBtart set vm --memory 8192--display WxH[pt\|px]设置显示分辨率如1200x800、1200x800pt、1920x1080px不写单位时默认 macOS 用pt、Linux 用px解析逻辑见 Sources/tart/Commands/Set.swifttart set vm --display 1920x1080--display-refit / --no-display-refit是否让显示自动适配窗口大小tart set vm --no-display-refit--disk-size GB扩容磁盘只能增大不能减小避免数据丢失tart set ubuntu --disk-size 50--random-mac重新生成随机 MAC 地址tart set vm --random-mac--random-serial为 macOS VM 重新生成随机序列号tart set vm --random-serialtart set的配置会写入 VM 目录下的config.json由 Sources/tart/VMConfig.swift 负责读写。磁盘扩容操作则由vmDir.resizeDisk(diskSize!)在 Sources/tart/Commands/Set.swift 中完成并且扩容前会先校验 VM 是否为 stacked 磁盘布局stacked VM 不支持--disk替换。目录共享Directory Sharing挂载目录到虚拟机启动 VM 时通过--dir参数把宿主机目录暴露给 guesttart run --dirproject:~/src/project vm其中第一个参数project是挂载名mount name第二个参数~/src/project是宿主机上要共享的目录路径。也支持只读挂载追加第三个参数rotart run --dirproject:~/src/project:ro vm多个目录可以重复传入--dirtart run --dirwww1:~/project1/www --dirwww2:~/project2/www注意每个--dir的第一个参数挂载名必须唯一否则同名的多个参数只会保留最后一个生效。若多个目录共用一个挂载标签mount tag则必须为每个目录显式命名guest 中会以该名字作为子目录出现——这一约束在 Sources/tart/Commands/Run.swift 的directoryShares()中强制校验多个共享目录未全部命名会直接抛出ValidationError。前置条件目录共享要求宿主机运行 macOS 13.0Ventura或更新版本此外--dir还支持ro只读与tagTAG自定义 mount tag默认com.apple.virtio-fs.automount等逗号分隔选项。macOS guest 中访问共享目录macOS guest 中所有共享目录会自动挂载到/Volumes/My Shared Files上面的示例挂载会出现在 guest 的/Volumes/My Shared Files/project路径。要求 guest 也运行 macOS 13.0Ventura或更新版本。如果想改变挂载位置可以在 VM 启动后手动重新挂载sudo umount /Volumes/My Shared Files mkdir ~/workspace mount_virtiofs com.apple.virtio-fs.automount ~/workspace执行后共享目录会出现在~/workspace/project。Linux guest 中访问共享目录Linux guest 需要先手动挂载虚拟文件系统sudo mkdir /mnt/shared sudo mount -t virtiofs com.apple.virtio-fs.automount /mnt/shared之后即可在/mnt/shared/project访问共享目录。如需开机自动挂载在/etc/fstab中追加一行com.apple.virtio-fs.automount /mnt/shared virtiofs rw,relatime 0 0对接远程 OCI 容器注册表Tart 支持与符合 Open Container InitiativeOCI规范的容器注册表交互但只能运行由 Tart 创建并推送的镜像——为 Docker 等容器引擎构建的镜像无法被 Tart 拉取自定义镜像请按上文从零创建虚拟机镜像一节操作。下面以注册表https://acme.io/为例演示完整的认证、推送、拉取流程。注册表认证首先使用tart login登录tart login acme.io执行时会以交互方式提示输入用户名与密码也支持--username user --password-stdin的非交互方式方便 CI 注入凭据见 Sources/tart/Commands/Login.swift。如果注册表使用 OAuth 登录可能需要为密码生成一个 access token。凭据会安全地存储在 macOS 钥匙串Keychain中对应实现为 Sources/tart/Credentials/KeychainCredentialsProvider.swifttart login默认还会先对注册表做一次ping校验凭据有效性可用--no-validate跳过。此外Tart 还支持以下认证途径按需启用其一即可Docker credential helpers若在~/.docker/config.json中配置了 credential helperTart 会自动读取使用实现见 Sources/tart/Credentials/DockerConfigCredentialsProvider.swift环境变量覆盖TART_REGISTRY_USERNAME与TART_REGISTRY_PASSWORD可为所有注册表统一覆盖认证信息非常适合接入 CI 的密钥管理再配合TART_REGISTRY_HOSTNAME环境变量可将上述覆盖仅作用于指定主机。推送本地镜像凭据保存好后即可把本地 VM 以多个 tag 推送到远端tart push my-local-vm-name acme.io/remoteorg/name:latest acme.io/remoteorg/name:v1.0.0推送实现位于 Sources/tart/Commands/Push.swift默认使用单块monolithic上传方式若注册表支持分块上传可追加--chunk-size MB例如 AWS ECR 要求分块大于 5 MB而 GHCR 要求小于 4 MBGCR 不支持分块。同时可用--label keyvalue附加元数据、--concurrency控制并发、--populate-cache在本地保留推送缓存以加速后续拉取。拉取远程镜像拉取方式有两种按需选择# 只拉取镜像到本地缓存 tart pull acme.io/remoteorg/name:latest # 拉取并直接创建本地 VM tart clone acme.io/remoteorg/name:latest my-local-vm-name如果指定镜像尚未存在于本地tart clone会隐式先执行tart pull再克隆逻辑见 Sources/tart/Commands/Clone.swift。pull/clone默认使用 4 路并发下载可用--concurrency调整。关于克隆的一个底层细节得益于 APFS 的写时复制copy-on-write机制克隆出的 VM 并不会立刻占满磁盘空间只有 guest 实际写入的数据才会消耗新空间因此克隆操作非常快。默认情况下 Tart 还会在克隆/拉取前检查自身存储目录的剩余容量并执行自动清理automatic pruning以回收最少必要空间单次默认上限 100 GB可用--prune-limit调整或用TART_NO_AUTO_PRUNE环境变量完全关闭这些行为在 Sources/tart/Commands/Clone.swift 与 Sources/tart/Commands/Pull.swift 的讨论文本中均有明确说明。创建 Stacked Disk分层磁盘在 macOS 27 或更新版本上可以使用--stacked创建一个以远端独立 macOS OCI 镜像为不可变基座的 VM本地只保存其自身产生的写入overlaytart clone --stacked ghcr.io/cirruslabs/macos-tahoe-base my-local-vm-name--stacked目前仅支持 macOS 镜像且要求源必须是独立的 standalone 镜像校验见 Sources/tart/Commands/Clone.swift 的run()。这种 VM 的优势在于推送时保留磁盘层级关系tart push会把基座与 overlay 的关系原样上传同血缘镜像复用缓存后续从同一镜像谱系拉取时会复用 Tart 缓存中已存在的不可变磁盘文件大幅节省带宽与磁盘。小结与后续路径至此你已经掌握了 Tart 的核心日常操作闭环安装 → 克隆/创建镜像 → 运行 → SSH 登录与脚本执行 → 目录共享 → 资源调整 → OCI 注册表推送/拉取。这套能力足以支撑在 Apple Silicon 上搭建 macOS/Linux 的 CI 构建与自动化环境。如果想继续深入推荐阅读仓库内以下内容docs/integrations/cirrus-cli.md用 Cirrus CLI 在 Tart VM 内跑任务并取回产物的 YAML 配置示例Sources/tart/Commands/Run.swifttart run的完整参数--no-graphics、--net-bridged、--net-softnet、--rosetta、--recovery、--vnc等与校验逻辑Sources/tart/Commands/Set.swift 与 Sources/tart/VMConfig.swiftVM 配置项的读写与磁盘扩容实现Sources/tart/OCI 与 Sources/tart/Commands/Push.swiftOCI 注册表协议manifest、digest、分块上传的底层实现Tests/TartTests覆盖VMConfig、磁盘栈、注册表认证、IP 解析等核心行为的测试用例可当作行为契约来阅读。【免费下载链接】tartmacOS and Linux VMs on Apple Silicon to use in CI and other automations项目地址: https://gitcode.com/GitHub_Trending/ta/tart创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →