MacPortsを掃除する

にゃんこ先生のジャンボぬいぐるみを購入して、毎日もふもふしているわさびです。今回はタイトルの通り、MacPortsの掃除のお話です。

きっかけ

先日、MacBookさんのHDDの空き容量が1.16GBという危機的状況になりました。いろいろソフトウェアを削除しても、すでに何度も掃除をしていたので、ほとんど変わらず、頭を悩ませていました。そして、ふと思ったのが、

「よく考えたら、MacPortsのダウンロードファイルとか全然掃除いてないんじゃね?」

ということです。

MacPorts利用のスタンス

自宅で使っているMacBookはほとんど個人で利用してるため、ソフトウェアのバージョンはなるべく最新のものを利用しているだけで、ほとんど特定バージョンへのこだわりはありません。*1なので、MacPortsでインストール済みのソフトウェアで2種類以上のバージョンの同一ソフトウェアがインストールされていたら、古いバージョンのものはいらないのでは?ということになります。

MacPortsの何をどうして掃除できるのか

掃除について触れる前に、ソフトウェアのインストールとアップグレードについてです。

MacPortsを用いてソフトウェアをインストールする仕組み

MacPortsを用いてソフトウェアをインストールする場合、内部的にやっていることは、大まかには以下の3点だと思います。

  1. ソフトウェアのソースコードをダウンロードする
  2. ダウンロードしたソースコードをコンパイルする
  3. コンパイルしたものを特定ディレクトリにインストールする

インストール作業が終了すれば、ダウンロードしたソースコードと、コンパイルしたものはいらなくなりますね。これは掃除できそうです。でも、それだけじゃないんです。

MacPortsを用いてソフトウェアを更新する仕組み

今まで僕は、以下のようなport_upgrade.shを作っておいてソフトウェアを更新してきました。

port selfupdate
port sync
port outdated
port upgrade installed

やっていることは至ってシンプルで、

  1. MacPorts自体のアップグレード
  2. Portsツリーの更新
  3. アップグレードされるパッケージの表示
  4. パッケージのアップグレード

だけです。

上記のようなport_upgradeスクリプトを用いると更新を完全に自動化できるわけですが、あるソフトウェアAのバージョン1.14から1.15へのアップグレードの際に、MacPortsは古いバージョン(1.14)を削除しません。インストールした新しいバージョン(1.15)はアクティブという状態になり、古いバージョンはインアクティブという状態になります。コマンドを打って使われるのはアクティブなソフトウェアです。古いバージョンのソフトウェアを利用したければ、新しいバージョンをインアクティブにして、古い方をアクティブにすれば、アップグレード後に不具合があっても、もとの環境に戻すことができるようです。親切なんだけど、僕の利用方法だとあまり古いソフトウェアに戻すことは少ないような気がします^^;

インアクティブなソフトウェアの削除と不要ファイルの掃除

というわけで、作成したのが以下のport_clean.sh。

port -u uninstall
port clean --all installed

上記のスクリプトでは、

  1. インアクティブなソフトウェアのアンインストール
  2. インストール済みソフトウェアのソースコードと作業ファイルを削除

という流れをやっています。

掃除の結果

# sudo sh port_clean.sh

というコマンドを用いて、空き容量は1.16GBから15GBに増加したのでした。
これで当分もちそうです。いらないインアクティブなソフトウェアはたまには掃除しないといけませんね。*2

*1:特に特定バージョンを使う制約もありませんし。

*2:upgradeでcオプションとか使っても良いかもしれません。