.pkgでインストールしたパッケージを削除した時のメモ

訳あって,Homebrewでインストールしたgfortranを削除して.pkgからgfortranをインストールしてみたんですが,元に戻そうと思ってふと思いました.

「.pkgでインストールしたパッケージってどうやってアンインストールするの??」

インストールしたら /Library/Receipts/ に hoge.bom ってファイルが作成されるから,lsbom hoge.bom でインストールされたファイルを確認して,それを元に削除すればいいという記事を結構見かけたんですが,/Library/Receipts には拡張子が bom のファイルなんて一つもありませんでした.
Snow Leopardから管理体制が変わったということでしょうか.

いろいろ調べてみたところ,pkgutil ってコマンドでパッケージの情報が取得できるみたいですね.
gfortranのパッケージIDを確認するには次のようにします.

$ pkgutil --pkgs=.*gfortran.*
com.gnu.gfortran

インストールされたファイルを確認するには次のようにします.

$ pkgutil --files com.gnu.gfortran | head -n 15
gfortran.pkg
gfortran.pkg/Contents
gfortran.pkg/Contents/Archive.bom
gfortran.pkg/Contents/Resources
gfortran.pkg/Contents/Resources/BundleVersions.plist
gfortran.pkg/Contents/Resources/English.lproj
gfortran.pmproj
usr
usr/local
usr/local/gfortran
usr/local/gfortran/bin
usr/local/gfortran/bin/cpp
usr/local/gfortran/bin/g++
usr/local/gfortran/bin/gcc
usr/local/gfortran/bin/gcov

なんか usr がちょっとひっかかりますね.

っで,インストールされたファイルを削除するには unlink コマンドを使うみたいです.

$ echo y | sudo pkgutil --unlink com.gnu.gfortran 2>&1 | tail
Unable to unlink 'usr/local/gfortran/include'. Error 1: Operation not permitted.
Unable to unlink 'usr/local/gfortran/lib'. Error 1: Operation not permitted.
Unable to unlink 'usr/local/gfortran/libexec'. Error 1: Operation not permitted.
Unable to unlink 'usr/local/gfortran/share'. Error 1: Operation not permitted.
Unable to unlink 'gfortran.pkg/Contents/Resources'. Error 1: Operation not permitted.
Unable to unlink 'usr/local/gfortran'. Error 1: Operation not permitted.
Unable to unlink 'gfortran.pkg/Contents'. Error 1: Operation not permitted.
Unable to unlink 'usr/local'. Error 1: Operation not permitted.
Unable to unlink 'gfortran.pkg'. Error 1: Operation not permitted.
Unable to unlink 'usr'. Error 1: Operation not permitted.

※”Do you really want to delete these files?”と聞かれるので”y”と答えるためにechoをしていますが,–forceオプションを付けてもいいです

削除できませんね.相対パスになってるからルートディレクトリで実行すれば削除されるんじゃないかと思うんですが,

Unable to unlink ‘usr’. Error 1: Operation not permitted.

これ,ヤバくないですか??
ルートディレクトリで実行すると /usr が削除されちゃうんじゃないかと思うんですが,どうなんでしょう?
(興味のある人は試してみてください)
※Ubuntuで誤って /usr/bin を削除してしまったことのある身としては怖くてできません

ということで,/usr が削除されてしまうのが怖かったんで,ファイルだけ削除しましょう.

$ cd /
$ sudo pkgutil --unlink com.gnu.gfortran --only-files

インストールの際に作成されたという確信があれば大元のディレクトリを削除するのもいいと思います.

$ sudo rm -r /gfortran.pkg /usr/local/gfortran

最後にパッケージ情報を削除します.

$ sudo pkgutil --forget com.gnu.gfortran

“pkgutil –unlink” でググっても233件しかヒットしないので,あまり pkgutil は認知されてないんじゃないかと思うんですが,どうなんでしょう?

参考