プログラミング
Apple Silicon Macでmacvdmtoolを使用してDFUリストアを実行する (2021)
Perform DFU Restores on Apple Silicon Macs with Macvdmtool (2021) (bkurtz.io)
要約
この記事では、AsahiLinuxプロジェクトによって開発されたmacvdmtoolというツールを紹介しています。macvdmtoolを使用すると、Apple Silicon搭載MacやT2チップ搭載Intel Macを、煩雑なキーボード操作なしに、簡単なターミナルコマンドでDFUモードに移行させることができます。その後、Apple Configurator 2のcfgutilコマンドとIPSWファイルを用いて、ターゲットMacのリストアや復旧を行う手順を解説しています。
全文翻訳
macvdmtoolとは何か
これはmarcan氏がAsahiLinuxプロジェクトの下で開発したツールです。macvdmtoolを使用すると、Apple SiliconまたはT2チップ搭載のIntel Mac(2018年以降)を、煩雑なキーボード操作を必要とせず、簡単なターミナルコマンドでDFUモードに入れることができます。
注意: macvdmtoolはホストマシンがApple Siliconベースであることを必要とします。Intel Macはホストとしてこのツールをサポートしていないようです。
前提条件
macvdmtoolを利用するには2台のMacが必要です。
1台のMacが「ホストMac」として機能します。このマシンは完全に機能している必要があります。
2台目の「ターゲットMac」は、電源が入り、疑問符またはリカバリモードで起動する限り、機能している必要はありません。
macvdmtoolの設定と使用方法
ホストMacで、Xcodeをインストールし、ターミナルで以下のコマンドを実行してXcodeコマンドラインツールをインストールします:
xcode-select --install
正しくインストールされたか確認します:
xcode-select -p
Mac App StoreからApple Configurator 2をインストールします。
macvdmtoolをクローンします:
git clone https://github.com/AsahiLinux/macvdmtool.git
macvdmtoolディレクトリに移動してツールをコンパイルします:
cd macvdmtool && make
macvdmtoolをパスにコピーします:
sudo cp macvdmtool /usr/local/bin
以下のコマンドを実行して、インストールされパスに追加されたか確認します:
macvdmtool
Apple Configurator 2を起動し、「Automation Tools」をインストールします。
ホストMacとターゲットMacを、公式のApple USB-C充電ケーブルまたはTB3/TB4ケーブルで接続します。ケーブルは両端のDFUポートに接続され、データ転送をサポートしている必要があります。
Apple Siliconマシンでは、DFUポートは左側の画面に最も近い位置にあります。
Intelマシンでは、DFUポートは左側のトラックパッドに最も近い位置にあります。
ターゲットMacをDFUモードにします:
sudo macvdmtool dfu
上記のコマンドは以下のように返されるはずです:
Mac type: J313AP
Looking for HPM devices...
Found: IOService:/AppleARMPE/arm-io@10F00000/AppleT810xIO/i2c0@35010000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm0/AppleHPMARM
Connection: Source
Status: APP
Unlocking... OK
Entering DBMa mode... Status: DBMa
Rebooting target into DFU mode... OK
Exiting DBMa mode... OK
cfgutil を使用したリストア/復旧
あるいは、Apple Configurator 2またはFinderを使用してMacをリストア/復旧することもできます。
注意: このcfgutilを使った方法は、ターゲットMacがApple Siliconの場合にのみ機能します。
Apple Configurator 2を起動して、デバイスがDFUモードになっていることを確認します。以下のような表示になるはずです。(表示されない場合は、ホストとターゲット間のケーブルを抜き差ししてみてください)
リストアしたいIPSWをMr. Macintoshのデータベースから取得します。
cfgutilを使用してそのIPSWをリストアします:
cfgutil restore -I ~/Downloads/UniversalMac_12.1_21C5021h_Restore.ipsw
結果は以下のようになります:
objc[53015]: Class AMSupportURLConnectionDelegate is implemented in both /usr/lib/libauthinstall.dylib (0x1da64c9e8) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x104d782c8). One of the two will be used. Which one is undefined.
objc[53015]: Class AMSupportURLSession is implemented in both /usr/lib/libauthinstall.dylib (0x1da64ca38) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x104d78318). One of the two will be used. Which one is undefined.
cfgutil: restore: target OS is 12.1
Waiting for the device [1/2] [*******************************************] 100%
Step 2 of 2: Installing System [2/2] [**********************************>] 99%
この時点で、ターゲットMacにAppleロゴとローディングバーが表示されるはずです。
数分後、Macは再起動し、標準のセットアップアシスタントが表示されます。
これで完了です。お楽しみください。
将来の自動化拡張
Appleがcom_apple_macOSIPSW.xmlフィードに12.X IPSWを追加したら、最新のIPSWをダウンロードしてmacvdmtoolとcfgutilを実行するスクリプトを作成できます。
最新IPSWをダウンロードし、Munkiでパッケージ化するためのAutopkgレシピ。
これは技術者にIPSWを配布するのに役立つ可能性があります。
質問、明確化、またはコメントがありますか?
私のブログ(https://github.com/discentem/blog-content)でイシューまたはPR(プルリクエスト)を送信するか、MacAdmins Slack経由で連絡してください。
DFUに関するさらなる読み物
DFUリストアに関する詳細については、Mr. Macintoshの優れたブログ記事をご覧ください。