🦭

pkgのインストールが失敗するときの原因の調べ方

2023/06/08に公開


エラー内容を教えないダメなインストーラ

環境

  • macOS: ventura 13.4

目的

Google Drive を macOS にインストールしたい。

現象

  • brew 経由で入れると失敗する
  • dmg をポチポチしても失敗する
  • いくらググっても同様の症状の人はいない
  • とはいえ /Applications/Google Drive.app はできている

調査手順

dmg をマウントする。

$ hdiutil mount GoogleDrive.dmg
(snip)
/dev/disk5s2 Apple_HFS /Volumes/Install Google Drive 1
(snip)

移動する。

cd '/Volumes/Install Google Drive'

展開する。

pkgutil --expand GoogleDrive.pkg /tmp/GoogleDrive

マウントを閉じる。

hdiutil detach '/Volumes/Install Google Drive'

postinstall を探す。

$ cd /tmp/GoogleDrive
$ fd postinstall
GoogleDrive_arm64.pkg/Scripts/postinstall
GoogleDrive_x86_64.pkg/Scripts/postinstall
Google_Software_Update.pkg/Scripts/postinstall

中を見てみる。

$ cat /tmp/GoogleDrive/Google_Software_Update.pkg/Scripts/postinstall
(snip)
if [[ ! -f Keystone.tbz || ! -f ksinstall ]]; then
    # Corrupt package? Use that error code.
    exit 2
fi
(snip)

と、ksinstall の存在チェックをしている。このファイルは postinstall と同じディレクトリにある。ということは同じディレクトリで実行しないといけないようだ。

移動して実行する。

$ cd /tmp/GoogleDrive/Google_Software_Update.pkg/Scripts
$ ./postinstall
2023-06-08 11:33:05.403 ksinstall[15883/0x1e7039e00] [lvl=3] -[KeystoneInstallTool main] Google Software Update installer could not determine the installation directory. [com.google.Keystone.InstallationErrorDomain:8 - 'KSInstallTool.m:3035'] (KSPaths file in the way of subdirectory. - '/Users/alice/Library/Google/GoogleSoftwareUpdate' [com.google.Keystone.SharedErrorDomain:1003])

~/Library/Google/GoogleSoftwareUpdate に問題があるのがわかる。

もう一方も同様に実行してみる。

$ cd /tmp/GoogleDrive/GoogleDrive_arm64.pkg/Scripts
$ ./postinstall
(snip)
./postinstall: line 93: /Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin: Not a directory
(snip)

こちらは /Library/Google/GoogleSoftwareUpdate に問題があるのがわかる。

原因

思い当たるふしがあった。以前、Google Chrome を絶対に自動更新させたくなかったので両ディレクトリを破壊したのだった。こんなことをするやつはそういないので、そりゃググっても出てこないはずである。

対策

trash /Library/Google
trash ~/Library/Google

たいしたものは入っていなかったので根元から削除した。

結果

まとめ

  • pkg ファイルは pkgutil で展開できる
  • preinstall や postinstall を読んで手動実行すればどこでこけたかわかる

Discussion