m1 mac "/Library/SystemExtensions" のファイルを削除する

f:id:hate_nattou:20210213225906j:plain:w480

概略

macPlaystation4のコントローラーを認識させたくて、ソフトウェアをインストール。

ソフトウェアが期待どおりの動作とならなかったので、アンインストールしようとしました。

残存した "/Library/SystemExtensions" にあるファイルを削除するのに手間取ったので、簡単な手順をまとめておきます。

環境

問題となった経緯

macOSPS4のコントローラーを認識させたいと思って、USB Overdriveというソフトウェアをインストール。

Big Sur向けなのでver5.1をインストールした -> しかし、動作せず。

ネットを見ると、古いバージョンなら動作するとのこと。

古いバージョンはCatalina向け。なんとかなるかな?と、とりあえずインストールを試みたが、インストールが途中で失敗。

途中で失敗しているため、アンインストールのスクリプトなどもインストールされず、OSの中に色々とゴミが残るという状態になってしまった。

システム環境設定の中で見つけたUSB Overdriveのアイコンは右クリックで削除に成功。

他にインストールされたファイルは、/Library/SystemExtensionsのディレクトリにあった。(findコマンドで検索した)

ただし、削除しようとしても、PermissionErrorで消せず。sudoで実施してもエラーになった。

解決方法

SystemExtensionsで確認

専用のコマンドで確認すると、たしかにUSB Overdriveが残っています。

systemextensionsctl list

アンインストールのコマンドを実行。

systemextensionsctl uninstall <teamId> <bundleId>

できません。sudoで実行してもNG。

これ、SIP(System Integrity Protection)というmacOSのセキュリティが原因。

SIPの無効化

SIPのステータスを確認。

% csrutil status
System Integrity Protection status: enabled.

たしかに有効になっている。

これを無効化するには、macOSリカバリーモードでOSを立ち上げる必要がある。

M1 macだとcmd+Rによるリカバリーモードは使えないので、以下の方法で立ち上げる。

  1. システム終了
  2. 起動時に電源ボタンを長押し
    (10秒以上。途中「起動オプションを表示するには押し続けてください」と表示されていればOK。)
  3. 復旧ユーティリティの表示 -> ユーザーを選択 -> 次へ -> パスワード入力
  4. ユーティリティ -> ターミナル を選択
    参考: 下のページのターミナル部分 support.apple.com

  5. SIPを無効化するコマンドを入力
    sh csrutil disable

  6. 起動ディスク -> システム終了 を選択

SystemExtensions アンインストール

SIPが無効になっていることを確認。

% csrutil status
System Integrity Protection status: disabled.

アンインストールのコマンドを実行。

systemextensionsctl uninstall <teamId> <bundleId>

今度は成功。

macOSを再起動するとディレクトリごと削除されている。

SIPの有効化

SIPの無効化とほぼ同じ手順を実施して、csrutilのコマンドだけdisable -> enable に変更。

csrutil enable

再起動後

SIPのステータスを確認。

% csrutil status
System Integrity Protection status: enabled.

enabledに戻っていればOK。

まとめ

USB Overdriveの残りファイルには、.kextというものがあった。

kextとは、カーネル拡張(Kernel EXTension)のこと。

カーネル絡みだと、不用意な削除をさせないように扱いもデリケートになるのもわかるような。

Intel/M1との情報が錯綜していることもあり、解決が少し難航した。未来の自分 OR 他の誰かのためになるように手順をまとめておいた。