Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

eficheckにファームウェアが違うと注意されました

f:id:siroanko:20181007151835p:plain

コンピュータに問題が発生している可能性があることが検出されました

というダイアログパネルが先週唐突に現れました。Mojaveにアップデートしてからだいたい1週間目のことです。正確には604,800秒後のことです。

Appleのサポートに公式の説明があります。

support.apple.com

このメッセージは、Mac に実際にインストールされているファームウェアと、macOS で必要とされるファームウェアとの間に違いが認められた場合に表示されます。

(略)
macOS High Sierra 10.13 から、Macファームウェアが変更されていないか定期的にチェックし、そうした変更点について Apple に情報を送信できるようになりました。 

そういえば1年以上前、High Sierraのベータ版が出た頃にこの新機能が話題になっていました。このチェックを定期的に行なっているのはeficheckというプログラムです。本体は、

/usr/libexec/firmwarecheckers/eficheck/eficheck 

にあります。

MacEFIファームウェアチェックサムを、Apple社の何処かにあるデータベースと比較して、違っている場合には安定性やセキュリティに問題があると判断して、警告を出してくれるプログラムだそうです。Hackintoshの場合は、当然のことながらEFIファームウェアは本物のMacと違うので、警告出まくりになるだろうと、当時は話題になっていました。でも一度も警告は出たことがなく、すっかり忘れていました。ネットで調べても、警告が出たという報告はすごく少ないです。私も初めてです。なんで出たのか不明ですが、Mojaveにアップデートしたことと関係がありそうです。

eficheckの動く仕組み

eficheckはコンピュータに常駐して動き続けるデーモンと呼ばれるタイプのプログラムです。macOSではデーモンの起動と設定を、

/System/Library/LaunchDaemons/

ディレクトリで行います。この中に一つのデーモンを設定する.plistファイルを置くと、Macの起動時に動くようになります。今回のeficheckを設定しているのは、

/System/Library/LaunchDaemons/com.apple.driver.eficheck.plist

というファイルです。書き換えて遊んでみましょう。

ただ、SIPを有効にしている場合、/System以下のファイルはSIPで保護されています。sudoコマンドでも書き換えることができません。その場合は、SIPを無効にしてから作業します。書き換え作業した後はSIPを有効に戻しても大丈夫です。

siroanko.hatenablog.com

com.apple.driver.eficheck.plistの中身を見てみましょう。以下は抜粋です。

<key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/firmwarecheckers/eficheck/eficheck</string>
        <string>--integrity-check-daemon</string>
    </array>

 略

<key>com.apple.driver.eficheck</key>
    <dict>
        <key>Interval</key>
        <integer>604800</integer>
    </dict>

最初の方に、eficheckへのフルパスと、起動の引数が書かれています。真ん中あたりに、間隔が604,800と書かれています。単位は秒です。割り算してみると、ちょうど7日間になります。つまり、1週間ごとにEFIが正しいものであるかどうかをチェックして、警告を出してくれるようです。

1週間待って次の警告が出るかどうか確認するのは大変でしたので、

<key>com.apple.driver.eficheck</key>
    <dict>
        <key>Interval</key>
        <integer>180</integer>
    </dict>

と書き換えて再起動してみました。3分くらいで警告が出ました。やはりこのまま毎週警告が出てしまうようです。

eficheckを止める

なんにせよ厄介なので、起動しないようにしてみました。

cd /System/Library/LaunchDaemons/

sudo mv com.apple.driver.eficheck.plist com.apple.driver.eficheck.plist.org 

としました。オリジナルというつもりでorgという拡張子に変更しましたが、oldでもbackupでもなんでも好きな名前で良いです。いずれにせよ、plistという拡張子ではなくなったので、多分大丈夫なはずです。結果は来週以降報告します。 plistという拡張子ではなくなったことで起動しなくなります。1週間後、2週間後にも起動しませんでした。

EFICheckDisabler.kextを使う

コメントで紹介していただいた

www.insanelymac.com

でRehabManさんが配布しているEFICheckDisabler.kextを使ってみました。これをESPに入れるだけでも、エラーメッセージは止まりました。