テンプレートの作成と検索
仮想マシンを手動でテンプレートとして仕上げる方法、vm create がどのテンプレートを使うかを調べる方法、Launchpad がテンプレートを作る方法を説明します。テンプレートとは何か、そのキーに何が含まれるかについては、先にテンプレートをお読みください。
仮想マシンをテンプレートとして仕上げる
作成した直後の仮想マシンをテンプレートにするには、停止して削減し、セットアップ起動を行ってから adopt します。Launchpad がテンプレートを作る必要があるときに行う処理と同じです。
vm template setup
- 実行中の仮想マシンと凍結されたテンプレートは拒否します。
- 自身では何も削減しません。
vm template trimが記録した段階を引き継ぎ、別の段階を指定する--trimは拒否します。 - 仮想マシンでは、vphoned が削除しないアプリを報告し、それを記録する手順から除くため、adopt したキーには実際に行われたことが記載されます。
--strictを指定すると、代わりに失敗します。何も記録されず、セットアップ起動をやり直せます。同じスイッチでvm template findが示したキーで、--expectを付けて仮想マシンを adopt する場合に使います。vm template listに表示される.building-…という名前(セットアップ起動に失敗したvm create)を指定すると、作成処理をそのキーに合わせて設定し(これで軽量化の内容が決まります)、オフラインでの削減の前に止まっていた場合は先にそれを実行し、成功すると凍結します。
vm template adopt
後でテンプレートを再び見つける必要がある場合は、必ず --expect を使ってください。指定しないと、セットアップ起動が不十分だった仮想マシン(削除できないアプリがあった場合など)が別のキーで保存され、同じオプションでの以降の vm create がすべてそれを見つけられず、別のテンプレートを作ってしまいます。
期待されるキーを求められる場合、拒否のメッセージには異なるフィールドが表示されます。ライブラリ内のテンプレートや作成処理がそのキーを持っている場合、または軽量化の内容だけが異なる場合に求められます。それ以外の場合は、比較のために仮想マシン自身のキーを表示します。--json を指定すると拒否の内容も stdout に出力され、コマンドは終了ステータス 1 で終了します。
テンプレートを検索する
vm template find は、同じオプションの vm create がどのテンプレートから複製するかを、ダウンロード、復元、変更を一切行わずに答えます。
キーは vm create と同じ方法で求めます。ビルドは、IPSW がローカルのファイルであるか、すでに IPSW キャッシュにある場合はその IPSW から、それ以外の場合は同じ 2 つのソースが記録されたテンプレートから求めます。そのため、IPSW を削除した後でも(ローカルのものも含め)キーを求められます。--block と --allow は、fw set-patches が記録するのと同じパッチごとの上書き設定です。
Launchpad で
Launchpad 2.9 以降は、標準でテンプレートからマシンを作成します。
New Machine
New Machine は短いページで開きます:名前、ファームウェアカタログから選ぶデバイスと iOS のバージョン、Slim System スイッチ。その下の行にそれ以外の設定の概要が表示され、そこから Advanced Options を開けます。Advanced Options は次の 4 つのページです。
- ハードウェア
- テンプレートとその構成要素:削減の段階と残す言語、サービスプロファイル、削除するシステムアプリ
- Core Bundle、カスタム IPSW、パッチ
- 保存場所、ネットワーク、復元のオプション
この行には、標準と異なる設定の数と、Create を妨げている項目が表示されます。Create from a template をオフにすると、--no-template と同じく、軽量化せずに固有の鍵でマシンを単独で復元します。Apple アカウントは選択肢にありません。どちらにしてもゲストはサインインを拒否するため、サービスプロファイルが trimmed の場合、Launchpad は常に --accounts-off を渡します。シートはページに合わせて 600 ポイントまで大きくなり、それを超えるとスクロールするため、ノートパソコンの画面でもボタンが画面内に収まります。
kernelcache を作り直すファームウェア
Firmware では、そのリリース自身の cloudOS でも動作するリリース(fw catalog の 3 列目)について、推奨の cloudOS と並べてその cloudOS が選べます。作成処理では、kernelcache ミックスをあなたのユーザ権限で準備し、ヘルパーに root としてリンクさせます。その際に一度だけ認証を求めます。
これらの組み合わせでは、ミックスの準備に ipsw ツールを使う古い互換の Core Bundle(2.12.0)のために、Launchpad は引き続き ipsw ツールの欄を表示します。Core Bundle 2.12.1 以降はネイティブで展開し、選択したパスは無視します。
iPhone XS Max は iOS 18.1〜18.7.2 を、それぞれのリリース自身の cloudOS 上で、テンプレートなしで、既定では Minimal プリセットで実行します。Standard も動作します(18.6 で確認)。これらの組み合わせでは常に kernelcache を作り直すため、Firmware で macOS ビルダーも尋ねられます。
- macOS 15 または 26.0〜26.3 を実行し、リモートログインがオンになっている Mac または macOS 仮想マシンの
user@host - ssh と sudo 用のパスワード。ssh 鍵とパスワードなしの sudo を使う場合は空にします
Launchpad はビルダーを保存しますが、パスワードは保存しません。パスワードは環境変数(VPHONE_KMUTIL_SSH_PASSWORD)でのみ vphone-cli に渡されます。作成処理は、あなたのユーザ権限で ssh 経由でミックスを準備してリンクします。macOS 26.4 以降ではビルダーが必須です。それより古い Mac でビルダーがない場合は、ヘルパーが root としてミックスをリンクします。
作成処理でのテンプレートの使い方
作成処理は、最初に vm template find を実行します。
- 最新のテンプレートが一致する場合は、マシンを複製し(
vm create --template <id> --skip-first-boot)、起動します。 - 一致しない場合は、同じライブラリ内の一時的なマシン(
template-と 8 桁の 16 進数の名前)でテンプレートを作ります。通常の手順(復元、ヘルパーを通じたcfw install)の後、vm template trim、ヘッドレスのvm template setup --strict、vm template adopt --iphone-source … --cloudos-source … --expect <id>を実行し、その結果からマシンを複製します。
削除すべきアプリが残るとセットアップ起動が失敗し、作成処理のキーが find の求めたキーと異なると adopt が失敗するため、以降の作成処理が見つけられない ID で作成結果が保存されることはありません。それぞれが所要時間付きの独立した手順として表示され、失敗した手順には vphone-cli が示した理由が表示されます。
New Machine の Patch Settings でのパッチごとの上書き設定は、テンプレートキーと同じ方法で分けられます。
- ブートチェーンの上書き設定はキーに含まれます。テンプレートはそれを適用して作られ、
findもそれを含むテンプレートを探します。 - ゲストパッチの上書き設定は含まれません。テンプレートはそれを適用せずに作られます。複製の後、作成処理は
fw set-patchesで新しいマシンにそれを記録し、初回起動の前にヘルパーを通じてcfw update-environmentで書き込みます(Apply guest patches の手順)。そのため、ある作成処理でのゲストパッチの選択が、テンプレートを通じて別の作成処理に引き継がれることはありません。
テンプレートを作った後、作成処理はその元になった 2 つの IPSW を削除するかどうかを尋ねます。確認なしに削除されることはありません。
Launchpad でテンプレートを管理する
- File > Templates… には、すべてのライブラリのテンプレートが、そのマシン、軽量化の内容、サイズ、状態とともに表示され、削除もできます。
- Guest System…(マシンのアクションメニューとインスペクタにあります)では、実行中のマシンのサービスプロファイルを切り替えたり、テンプレートが削除したシステムアプリを戻したりできます。
- インスペクタとマシンの一覧には、各マシンが単独で使っているディスク容量が、そのファイルの割り当て量と並べて表示されます。これは、ほかのどのマシンやテンプレートも保持していないブロックで、そのマシンを削除すると解放されます。それ以前に作成されたローカルの Time Machine スナップショットは、期限が切れるまでそれらのブロックを保持します。