brew caskで”was not quarantined properly.”と言われたら

エラーを解決する

macOS Mojaveでdockerをbrew caskでインストールしようとしたのですが、表題のエラーメッセージが表示されてしまいました。

使用したコマンドは以下です:

$ brew cask install docker

以下のようなエラーメッセージが表示されました。

==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/31259/Docker.dmg
################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'docker'.
==> Installing Cask docker
==> Purging files for version 2.0.0.3-ce-mac81,31259 of Cask docker
Error: /Users/uechoco/Library/Caches/Homebrew/downloads/be9b9366a4a96478a04d2711baad17a8d5dc1342a82facd388f211b741965149--Docker.dmg was not quarantined properly.

このエラーメッセージでぐぐってみると、macOS Mojaveで起きていることが多い印象でした。homebrewのgithubのissueがいくつか引っかかる中で、brew cask upgrade / install fails with quarantine error · Issue #51538 · Homebrew/homebrew-caskに書かれていた「–no-quarantine」というオプションを試してみました。

$ brew cask install docker --no-quarantine
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/31259/Docker.dmg
################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'docker'.
==> Installing Cask docker
Warning: macOS's Gatekeeper has been disabled for this Cask
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺 docker was successfully installed!

warningは表示されたものの、どうやらうまくいったようです。実際にDocker.appの起動も確認できました。本当はsudoでも付けたら解決するかもしれないと思ってたんですがsudoの出番はありませんでした。

quarantineについて

解決はしたものの、「quarantine」やwarningに記載されていた「Gatekeeper」が気になったので調べてみました。
新・OS X ハッキング!(187) Sierraで厳しくなった「Gatekeeper」と付き合う | マイナビニュース
Safely open apps on your Mac – Apple Support

まず「quarantine」ですが、日本語では「隔離」という意味です。macではブラウザなどからファイルをダウンロードしたときにそのファイルにつく拡張情報の一種のようです。
例えばブラウザからダウンロードしたファイルをターミナルでlsコマンドで覗くとファイルパーミッションの横に「@」が付いているのが見えます。

この「@」はファイルに拡張情報が付加されていることを示しています。拡張情報を見るには、lsコマンドに「@」オプションを付けるか、xattrコマンドで確認します。

このcom.apple.quarantine拡張属性が付いているアプリケーションは、実行時に「○○は、アプリケーションで、インターネットからダウンロードされました。開いてもよろしいですか?」というダイアログが表示される。そしてこの隔離の拡張属性を付加したり警告を出したりする人がgatekeeperと呼ばれているシステムのようです。

この拡張属性を削除するには先程使ったxattrコマンドを用います。「-d」の後ろに削除したい拡張属性を指定すると、その拡張属性が削除されます。sudoは要求されませんでした。

brew caskの–no-quarantineオプション

「man brew-cask」で「install」の項を見ると以下の記載がありました。

--no-quarantine will prevent Gatekeeper from enforcing its security restrictions on the Cask.

具体的な動作まではわかりませんが、おそらく内部で自動的にcom.apple.quarantine拡張属性を削除し、Gatekeeperによる警告が発生しないようにしてインストール作業が継続できるようにしたのではないかと予想します。

About: uechoco