Akvicor
Akvicor
发布于 2026-07-18 / 0 阅读
0
0

在MacOS上通过tart安装MacOS系统虚拟机

在安装和配置阶段,建议直接在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


评论