Apple Silicon上で仮想マシンを管理できる「Tart」を試す
ここで知った。
ゆえあってGUIがなるべく楽に使える仮想マシンが欲しかったので、ちょっと試してみる。
GitHubレポジトリ
READMEの日本語訳。翻訳はPLaMo翻訳。
referred from https://github.com/cirruslabs/tartTart は、Apple Silicon 上で macOS および Linux の仮想マシン(VM)を構築・実行・管理するための仮想化ツールセットです。 CI エンジニアによって開発されたこのツールは、自動化ニーズに応えるために設計されています。Tart の主な特徴は以下の通りです:
- Tart は Apple 独自の
Virtualization.Frameworkを採用しており、ネイティブ環境に近いパフォーマンスを実現しています。- OCI 互換の任意のコンテナレジストリから仮想マシンをプッシュ/プルできます。
- Tart 用 Packer プラグインを使用して、仮想マシンの自動作成を効率化できます。
- あらゆる CI システムと簡単に統合可能です。
Tart は Cirrus Runners サービスの基盤技術です - これは標準の GitHub ホストランナーの代替として機能し、価格の数分の一で2~3倍のパフォーマンス向上を実現します。
公式サイト・公式ドキュメントはこちら
ライセンスは「フェアソースライセンス」というものになっている。
ざっと見た感じ、個人は無料で使えるが、組織の場合は一定の利用度を超えたら有償ライセンス、という感じみたい。詳細については公式の内容を確認すべし。
Quick Start
公式のQuick Startに従って進める。Apple Siliconが動作しているmacOS 13.0(Ventura)以降なら対応している様子。
インストールはHomebrewで。
brew install cirruslabs/cli/tart
tart --version
2.29.0
Usageを確認
tart --help
USAGE: tart <subcommand>
OPTIONS:
--version Show the version.
-h, --help Show help information.
SUBCOMMANDS:
create Create a VM
clone Clone a VM
run Run a VM
set Modify VM's configuration
get Get a VM's configuration
list List created VMs
login Login to a registry
logout Logout from a registry
ip Get VM's IP address
exec Execute a command in a running VM
pull Pull a VM from a registry
push Push a VM to a registry
import Import VM from a compressed .tvm file
export Export VM to a compressed .tvm file
prune Prune OCI and IPSW caches or local VMs
rename Rename a local VM
stop Stop a VM
delete Delete a VM
suspend Suspend a VM
See 'tart help <subcommand>' for detailed help.
VMのイメージを「クローン」する。ここではmacOS15のイメージを選択。macOSの仮想イメージが使えるのね。
tart clone ghcr.io/cirruslabs/macos-sequoia-base:latest sequoia-base
どうやらVMイメージは24GBほどの様子。気長に待つ。
pulling manifest...
pulling disk (23.9 GB compressed)...
1%
ダウンロードが終わったのだがエラー・・・
100%
pulling NVRAM...
Error: error: host macOS version is outdated to run this virtual machine
自分の macOS は Sonoma(14.7)なのだが、ホストのバージョンよりも新しいものはダメってことなのかな?Sonomaのイメージに変えて再トライ。
tart clone ghcr.io/cirruslabs/macos-sonoma-base:latest sonoma-base
今度はOK。
pulling manifest...
pulling disk (20.4 GB compressed)...
100%
pulling NVRAM...
ではVMを起動。
tart run sonoma-base
お、ウインドウが開いて起動が始まった。

起動は非常に速く、すぐにデスクトップが表示された。

メモリ8GB、ディスク50GBが割り当てられている様子。

ウインドウを閉じるとVMも停止する模様。
利用可能なVMイメージ
用意されているVMイメージはざっと見た感じ以下。
- macOS 12(Monterey)/ 13(Ventura) / 14(Sonoma) / 15(Sequoia)/ 26(Tahoe)
- base / xcode / vanilla といったバリエーションがある様子。あとCI用のものもあった。
- 細かいバージョンもタグで指定できる様子
- Ubuntu / Debian / Fedora / Rocky
- こちらもCI用のものがあった
試しにUbuntu-24.04を起動してみる。なお、こちらは2.7GBと比較的小さかった。
tart clone ghcr.io/cirruslabs/ubuntu:24.04 ubuntu-24.04
pulling manifest...
pulling disk (2.7 GB compressed)...
100%
pulling NVRAM...
tart run ubuntu-24.04
こちらはコンソールが立ち上がった。GUIは自分でセットアップしないといけないのかな?ちなみにID/PWは admin / adminでログインできる。

メモリ4GB、ディスク約20G、が割り当てられている様子
でこれはsetサブコマンドで変更できるみたい。
tart set --help
OVERVIEW: Modify VM's configuration
USAGE: tart set <name> [--cpu <cpu>] [--memory <memory>] [--display <display>] [--display-refit] [--no-display-refit] [--random-mac] [--random-serial] [--disk <path>] [--disk-size <disk-size>]
ARGUMENTS:
<name> VM name
OPTIONS:
--cpu <cpu> Number of VM CPUs
--memory <memory> VM memory size in megabytes
--display <display> VM display resolution in a format of <width>x<height>. For example, 1200x800
--display-refit/--no-display-refit
Whether to automatically reconfigure the VM's display to fit the window
--random-mac Generate a new random MAC address for the VM.
--random-serial Generate a new random serial number for the macOS VM.
--disk <path> Replace the VM's disk contents with the disk contents at path.
--disk-size <disk-size> Resize the VMs disk to the specified size in GB (note that the disk size can
only be increased to avoid losing data)
See https://tart.run/faq/#disk-resizing for more details.
--version Show the version.
-h, --help Show help information.
ディスクとメモリを増やしてみる。一旦VMを止めて以下を実行
tart set --disk-size 50 ubuntu-24.04
tart set --memory 4096 ubuntu-24.04 # メモリはメガバイト指定
getで確認ができる。
tart get ubuntu-24.04
OS CPU Memory Disk DiskFormat Size Display State
linux 4 4096 50 raw 4.295 1024x768 stopped
変更されている様子。
なお、これらのVMイメージは Packer で作成されているようで、テンプレートもGitHubで公開されている。対応していないディストリビューションなんかも頑張ればできるかもしれない、しらんけど。
こちらはコンソールが立ち上がった。GUIは自分でセットアップしないといけないのかな?
Linuxの場合にGUIではなくコンソールが立ち上がったけど、以下の記事にある通り簡単にGUI化できる(こんな簡単だとは知らなかった)
sudo apt update
sudo apt install ubuntu-desktop
パッケージ数が多いのでそこそこ時間はかかるが、インストールが終わったらVMをリブートすればGUIが立ち上がる。


SSHアクセス
VM側でSSHアクセスが許可されていればSSHでもアクセスできる。例えば SonomaなmacOS VMが立ち上がっている場合。
tart run sonoma-base
tart ip <VM名> でVMのIPアドレスが取得できるので以下のようにすれば接続できる。
ssh admin@$(tart ip sonoma-base)
VMなのでガンガン作っては消しすることになるので、Known_hosts を更新しないようにすると良さそう。
ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" admin@$(tart ip sonoma-base)
なお、Tartのネットワークは、自分の環境だと
-
192.168.65.0/24がVMのネットワーク - ホスト側のMacで、ブリッジインタフェースが作成され、ホストに
192.168.65.1が割り当てられる。ホストがこのVMネットワークのルータとなる。 - VM 側では、DHCPで
192.168.65.13が割り当てられる。
という感じに見える。
このネットワークの設定は、どうやら以下で設定されているものが使用されるみたい。
sudo defaults read /Library/Preferences/SystemConfiguration/com.apple.vmnet.plist
{
(snip)
"Shared_Net_Address" = "192.168.65.1";
"Shared_Net_Mask" = "255.255.255.0";
}
このネットワークアドレスやDHCPなどの設定を変更する場合は以下を参照
ホスト側ディレクトリのマウント
--dir でVMにホスト側のディレクトリをマウントさせることができる
テスト用にディレクトリとファイルを作成。
mkdir test_dir
echo "this is a test file" > test_dir/a.txt
このディレクトリを指定してVMを起動。
tart run --dir=test:./test_dir sonoma-base
Mac VMの場合は「共有フォルダ(My Shared Files)」にマウントされる。

次にLinuxの場合、こちらはVM内で手動で設定を行う必要がある。とりあえず上と同様にVMを上げる。
tart run --dir=test:./test_dir ubuntu-24.04
VM側でマウントポイントを作成してマウントしてやる。このあたりは Virtualization Framework で用意されているみたい。
sudo mkdir /mnt/shared
sudo mount -t virtiofs com.apple.virtio-fs.automount /mnt/shared
これでアクセスできる
find /mnt/shared
/mnt/shared
/mnt/shared/test
/mnt/shared/test/a.txt
cat /mnt/shared/test/a.txt
this is a test file
その他、以下についても記載されているので、詳細はドキュメント参照。
- 読み込み専用にする場合
- 複数のディレクトリをマウントする場合
- マウントポイントを変更する場合
- 起動時に自動でマウントする場合
Quick Startはこれでおしまい。ざっと触ってみた感じの所感としては
- MacのVMを動かせる
- VMの動作が非常に高速
というところが良いのかな?Virtualization Framework、全く理解してないけど、このあたりの恩恵はそこから来ているのかもしれないなと思ったり。
あと、GUIなホスト上でGUIなVMを動かす場合、ショートカットキーやホットキーなどの入力周りが気になる。一般的にMacの場合はGUIが前提になると思うので、そのフレームワーク上に乗っかっているのであれば、ある程度操作性とかも考慮されているのではなかろうか?ここは未確認なのであくまでも現時点では期待だけ。少し使ってみて確認してみたいところ。
反面、ホストは当然ながらMacのみとなるので、やや汎用性には欠ける。あと自分はLinuxのVMを動かすことがメインになると思うので、高速動作ってところは嬉しいけど、MacのVMが動くことにそれほど魅力を感じてはいないかな。
とりあえずLinuxのVMでGUIの使い勝手を確認してみたい。
その他
VMの管理
上の方で、VMはどうやらPackerで作成されていると書いていたが、tartのCLIでISO(Linuxの場合) / IPSW(iPhoneSoftware: iOSやMacで使用されるファームウェアらしい)からも作成できるみたい。
Arch LinxuとかOmarchyとかでいけるんだろうか?ちょっと試してみたいところ。実はこれが最初のモチベーションだったり。
CI/CDとオーケストレーション
GitHubのREADMEなどを見ると、開発元のCirrus Labsは、GitHub Actionsで動かすRunnerを、いろんな環境(Apple Silicon、Linux ARM64/AMD64、GPUなど)で動かせるというサービスを提供している様子。
そこで培われたノウハウを元に作られたのがTartらしいので、当然CI/CDというところに強みがあるのだろう。ドキュメントにも、セルフホストやGitLabでの使用例が記載されている(GitHub Actionsの場合は彼らのサービスサイトに飛ばされるけど)。その場合はTartをさらにラップしたCirrus CLIを使うみたい。
また、複数台ホストでのオーケストレーション向けにOrchardというものも用意されているみたい。
Tartはこれらの中で最も低レベルにVMを操作するものという感じみたい。
