以前からのアップデートで必ずと言っていいほど出るエラー、
「リカバリーHDのアップデートスクリプトエラー」
今回の「Security Update 2018-003」でも同様にエラーが発生しアップデートに失敗します。
もうどうせ失敗するのならはじめから
リカバリーHDのアップデートスクリプトなんて除外してしまえ!
と思い、パッケージ内容を変更してインストールしてみました。
経緯
10.13.5、10.13.6などバージョンナンバーが変わるアップデートが出た時にはコンボアップデート(統合アップデート)も一緒にリリースされ、そちらを使えば特に問題なくアップデートすることができました。
が、10.13.6以降のセキュリティアップデート2018-002、そして今回の2018-003ではそうもいかず、必ず同じところでエラーが出るという悩ましい問題を抱えています。
それでも一応セキュリティアップデート自体は完了します。
再起動後にOSのバージョン横に表示される「ビルド番号」が変わることで確認できます。
ただしセキュリティアップデートのみで、同梱されている他のパッケージについてはインストール出来ているのかどうかはっきりしません。
問題への対処
毎回エラーが出るのはリカバリーHDのアップデートスクリプト。
(今回は「SecUpd2018-003HighSierra.RecoveryHDUpdate.pkg」)
それならば”パッケージ内の実行スクリプトを骨抜きにしてやろう!”というやり方がフォーラムに投稿されました。
当該パッケージ内の Scripts > replaceRecovery にある実行スクリプトをことごとく消去、
つまりインストールパッケージ自体は実行するものの、実際には何もせず終了する、という形です。
インストールは成功し、エラーもなく完了したと報告されています。
それでもいいのですが、
そもそもそのパッケージだけインストールリストから外せばいいのでは?と思い、
今回も前回(2018-002)と同様、Distributionファイルの方を変更してインストールしてみました。
Security Update 2018-003を変更
前回の記事と一部内容が重複しますが、念のため一連の手順を記します。
1、セキュリティアップデート2018-003をダウンロード
まずはAppleのサイトからファイルをダウンロードします。
→ Download Security Update 2018-003 (High Sierra)
サイズは1.7GBあります。
2、パッケージを展開
このままではインストールできませんので中の設定ファイルを書き換える必要があります。
デスクトップ上に適当なフォルダを作成します。
ダウンロードした「SecUpd2018-003HighSierra.dmg」を開き、
中にある「SecUpd2018-003HighSierra.pkg」を新たに作ったフォルダにコピーします。
フォルダを右クリックして
サービス > フォルダに新規ターミナル
でターミナルを開き、
pkgutil --expand SecUpd2018-003HighSierra.pkg ~/Desktop/Expanded
と入力、リターンキーを押せば「Expanded」というフォルダにパッケージの中身が展開されます。
3、機種ID、BoardIDを調べる
機種ID(Macモデル)を調べる
りんご > このMacについて から、システムレポート → ハードウェア > 機種ID を見ると記載されています。
BoardIDを調べる
ターミナルを開き、
ioreg -l | awk -F\" '/board-id/ { print $4 }'
と打てば BoardID が表示されます。
4、Distributionファイルを変更する
Expanded フォルダ内に Distribution というファイル(xml)があるのでこれをテキストエディタで開きます。
まず44行目にある番号の一つを自分の BoardID に書き換えます。
var boardIds = ['Mac-06F11F11946D27C5','Mac-031B6874CF7F642A','Mac-A5C67F76ED83108C',...
さらに52行目から自分の機種IDを探して削除します。
var nonSupportedModels = ['MacBookPro4,1','MacPro2,1','MacBookPro5,1',...,'iMac9,1',...
パッケージリストからの削除
次に RecoveryHDUpdate.pkg に関するものを削除していきます。
32行目
<pkg-ref id="com.apple.pkg.SecUpd2018-003HighSierra.RecoveryHDUpdate.17G4015" auth="Root" packageIdentifier="com.apple.pkg.SecUpd2018-003HighSierra.RecoveryHDUpdate.17G4015" active="RecoveryHD10(my.target.mountpoint)" installEnvironment="ClientOS">#SecUpd2018-003HighSierra.RecoveryHDUpdate.pkg</pkg-ref>
185行目
<pkg-ref id="com.apple.pkg.SecUpd2018-003HighSierra.RecoveryHDUpdate.17G4015" installKBytes="0" version="1.0.0.0"/>
この2箇所を削除します。
19-21行目の
<system-image id="SecUpd2018-003HighSierra.RecoveryHDUpdate"> <pkg-ref id="com.apple.pkg.SecUpd2018-003HighSierra.RecoveryHDUpdate.17G4015"/> </system-image>
も削除してよかったかもしれませんが、今回は残しました。
<system-image>
というものが何を設定してどう使われているのかわからないのと、
他のパッケージからの参照なんかがあった場合に困るので。(ないとは思いますけど)
ちなみにこれらの内容については
Distribution Definition XML Schema Reference から確認できます。
ちょっと情報が古くて載っていないものもありますが。(2012-12-13が最終更新)
終わったら上書き保存。
5、パッケージを再びまとめる
Distributionファイルから記述は消しましたがファイル自体(SecUpd2018-003HighSierra.RecoveryHDUpdate.pkg)はそのまま残しています。
ターミナルから
pkgutil --flatten ~/Desktop/Expanded ~/Desktop/Modified.pkg
と入力。
これで Modified.pkg というファイルが出来上がります。
変更したアップデータをインストール
出来上がった Modified.pkg を開いてインストールします。
特に問題ないとは思いますが、
万が一問題が起きた時のため、復旧できるようタイムマシーンなどでバックアップは取っておきましょう。
また、High SierraのインストーラUSBも消さずに取っておきましょう。
リカバリーHDが使えなくなる以上、何かあった時にリカバリーモードで(と同様に)起動するのに必要になります。
インストール後のビルド番号は「10.13.6(17G4015)」に。
App Storeの更新履歴には出てきませんが、
システムレポートのインストール履歴にはちゃんと表示されています。
パッチの再インストール
再起動後には画面が暗くなるなど、以前当てたパッチが外れています。
アプリケーション > ユーティリティ > Patch Updater.app
から再インストールしていきます。
ただし、「Night Shift」パッチだけは入れない方が良いかもしれません。
パッチを当てた後にシステム環境設定パネル内で問題が起こることが報告されています。
コンフリクトは解消されたようです。(2019/01/24)
アップデート後のパフォーマンスについて
実を言うと前回の2018-002を適用以降、パフォーマンスがガッタガタに落ちました。
ちょっとしたことでレインボーカーソルになって引っかかる。
そして今回もまた同じような状態に。
どうやらメモリにプレッシャーがかかっている模様。
アクティビティモニタで確認してみると、メモリの使用量がはじめから多い。
色も緑から黄色へと変わり、それでブラウザのタブ一つ開くだけで引っかかるようになっているみたい。
でもこのiMacには8GBまでしかメモリは積めない。そしてもう目一杯積んでいる。
しばし悩んだ後、SMC(システム管理コントローラ)リセットをしてみることに。
やり方はこちら
→ Mac の SMC (システム管理コントローラ) をリセットする方法
基本的には電源引っこ抜いてしばらく待ってから起動するだけ。
そしたらなんと!!!
治りました。
もはやタブ一つで引っかかるようなことはありません。メモリプレッシャーも元の健全な状態に。
前回もそうすればよかったんだなきっと。
まとめ
ということで無事にアップデートすることができました。
実を言うと前回の2018-002適用後に酷くパフォーマンスが落ちてから、
我慢できずに結局すぐ前の状態に戻して使っていました。
セキュリティは気になるけれどあの状態では使い物にならなかったし・・・。
が、今回はそんなことはありません。
普通に使えています。少なくとも今のところは。
これでとりあえず・・・大丈夫かな?
あくまでも自己責任で、ということにはなりますが、
この記事が少しでも参考になれば幸いです。
追記:手動でリカバリーHDのアップデート(2019/01/17)
その後、手動でリカバリーHDのアップデートを試みました。
SecUpd2018-003HighSierra.dmg をダウンロードして「~/Desktop/Expanded」フォルダに展開しておいてください。
さてターミナルを開いたら以下を入力。(#行は説明です。入力不要)
#一時的にパスを通しておきます export PACKAGE_PATH=~/Desktop/Expanded/EmbeddedOSFirmware.pkg/RecoveryHDMeta.dmg #スクリプトフォルダへ移動 cd ~/Desktop/Expanded/SecUpd2018-003HighSierra.RecoveryHDUpdate.pkg/Scripts #スクリプトを実行 ./replaceRecovery / / #最後のスラッシュをスクリプトにターゲットボリュームとして渡しています。(スクリプト内の TARGET="$2") #故に一つ目のスラッシュはダミーで特に意味はありません。
ただ実際にやってみたところ、
アップデートスクリプトは問題なく完了してアップデートされたはずなのですが、いざリカバリーモードで起動しようとすると丸ペケマークが出て起動できませんでした。
まぁ通常使う分には支障ありませんし、USBインストーラーもあるので心配はしていませんが。
【さらに後日の追記】
・・・とか言って
Post Install のパッチの存在をすっかり忘れておりました。
High SierraのUSBインストーラーから起動して「macOS POST Install」を開き、「Recovery Partition Patch」にだけチェックを入れてボリュームを選択、「Patch」ボタンでパッチを当てたらOKです。
リカバリーHD(復旧-10.13.6)から起動できました。
コメント