在安装和配置阶段,建议直接在MacOS的UI界面进行操作,不要使用SSH连接进行操作,因为需要涉及到钥匙串和通过UI配置虚拟机。
安装tart
brew install cirruslabs/cli/tart如果遇到 Refusing to load formula from untrusted tap 错误,需要执行
brew trust cirruslabs/cli
brew install cirruslabs/cli/tart验证安装
tart --version拉取镜像
如果镜像地址需要登录,则需要先执行登录
# 如果镜像地址需要登录,请先登录
tart login docker-hub.example.com
# 拉取 macOS Tahoe + Xcode 镜像
tart clone ghcr.io/cirruslabs/macos-tahoe-xcode:latest tahoe-xcode
# 查看已下载镜像
tart list创建工作镜像
不要直接用 tahoe-xcode 跑测试,而是克隆一份,保留原始镜像做备份
tart clone tahoe-xcode builder首次启动并配置VM
第一次用图形模式启动,如果需要可以使用 --set-bridged=en0 启用桥接,进行初始设置
tart run --net-bridged=en0 builder进入桌面后
检查默认用户
tart 官方镜像默认用户通常是:
用户名:
admin密码:
admin
如果登录时提示密码错误,查看镜像文档或尝试 admin / 空密码
开启SSH远程登录
打开 VM 内的终端,执行:
sudo systemsetup -setremotelogin on或者在图形界面:
系统设置 → 通用 → 共享 → 远程登录 → 打开开启后可以添加ssh密钥,如果不配置密钥可以通过密码登录。
mkdir .ssh
chmod 700 .ssh
# 将其中的xxxx替换为密钥
echo "xxxx" > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys网络
由于我使用的桥接,默认是DHCP模式,如果需要可以改为静态分配IP。
安装或确认 Go 语言
这个镜像带 Xcode,但可能没有 Go。最新的macos镜像自带brew,可以直接安装:
# 安装
brew install go
# 验证
go version创建工作目录
mkdir -p /Users/admin/project关闭睡眠和锁屏(CI 环境必需)
sudo pmset -a sleep 0
sudo pmset -a disablesleep 1
defaults write com.apple.screensaver askForPassword -int 0关闭 VM
在 VM 内点击苹果菜单 → 关机,或者终端执行 sudo shutdown -h now
设置VM开机自启
用户登录后启动
mkdir -p ~/Library/LaunchAgents
cat > ~/Library/LaunchAgents/com.ksyaki.tart-builder.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ksyaki.tart-builder</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/tart</string>
<string>run</string>
<string>--no-graphics</string>
<string>--net-bridged=en0</string>
<string>builder</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/tart-builder.log</string>
<key>StandardErrorPath</key>
<string>/tmp/tart-builder.err</string>
</dict>
</plist>
EOF
# 加载并启动
launchctl load ~/Library/LaunchAgents/com.ksyaki.tart-builder.plist系统启动后启动
注意:LaunchDaemon 用 UserName 指定以你的用户身份运行(也就是将akvicor替换为你的用户名),避免权限问题。
cat <<'EOF' | sudo tee /Library/LaunchDaemons/com.ksyaki.tart-builder.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ksyaki.tart-builder</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/tart</string>
<string>run</string>
<string>--no-graphics</string>
<string>--net-bridged=en0</string>
<string>builder</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>UserName</key>
<string>akvicor</string>
<key>WorkingDirectory</key>
<string>/Users/akvicor</string>
<key>StandardOutPath</key>
<string>/tmp/tart-builder.log</string>
<key>StandardErrorPath</key>
<string>/tmp/tart-builder.err</string>
</dict>
</plist>
EOF
# 设置权限并加载:
sudo chown root:wheel /Library/LaunchDaemons/com.ksyaki.tart-builder.plist
sudo chmod 644 /Library/LaunchDaemons/com.ksyaki.tart-builder.plist
sudo launchctl load /Library/LaunchDaemons/com.ksyaki.tart-builder.plist获取VM非桥接模式时的IP
如果你和我一样使用桥接模式启动,那么这条命令获取不到IP,你需要通过图形界面进入VM查看。
tart ip builder