MacPortsをちゃんと使うために調べてみた

インストール

Xcode Tools のインストール

MacPorts には Xcode Tools が必要です。
Xcode Tools は Macに付属する Mac OS X Install DVD からインストールします。

MacPorts のインストール

The MacPorts Project -- Home から dmgファイル をダウンロードします。

PATHはMacPorts優先になっている
MANPATH=/opt/local/share/man:/usr/share/man:/usr/local/share/man:/usr/X11/man
PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

コマンド

$ sudo port selfupdate
MacPorts自身のアップグレード
$ sudo port sync
パッケージ一覧の更新
$ sudo port install foo
パッケージのインストール
$ sudo port uninstall foo
パッケージのアンインストール
$ sudo port upgrade foo
パッケージをアップグレード
$ sudo port deactivate foo
パッケージを一時無効にする
$ sudo port activate foo
無効になっているパッケージを有効にする
$ port list
パッケージの一覧を表示。
$ port search foo
パッケージ名の部分一致検索
$ port info foo
パッケージの情報を表示
$ port variants foo
インストールする際に利用できるオプションを表示*1
$ port deps foo
依存してるパッケージを表示
$ port installed
インストール済みパッケージの一覧を表示
$ port outdated
インストール済みのパッケージのうち、新しいバージョンが提供されているパッケージの一覧を表示
$ port contents foo
パッケージに含まれるファイル名の一覧を表示
$ port provides /opt/local/bin/foo
ファイルがどのパッケージから提供されているかを表示
portsツリー*2を最新にする

$ port version
$ sudo port selfupdate
$ port version
$ sudo port sync

オプションを指定してインストール

$ port variants foo
$ sudo port install foo +bar

インストールオプションを外してインストール

$ port variants foo
$ sudo port install foo -bar

インストールオプション指定の例
$ port variants apache2
apache2 has the variants:
   darwin: Platform variant, selected automatically
   darwin_7: Platform variant, selected automatically
   darwin_9: Platform variant, selected automatically
   eventmpm: Use event MPM (experimental)
     * conflicts with preforkmpm workermpm
   no_startupitem: Do not create a startup item
   openbsd: Platform variant, selected automatically
   openldap: Enable LDAP support through OpenLDAP
[+]preforkmpm: Use prefork MPM
     * conflicts with eventmpm workermpm
   universal: Build for multiple architectures
   workermpm: Use worker MPM
     * conflicts with eventmpm preforkmpm
$ sudo port install apache2 -preforkmpm +workermpm
インストールされている全てのパッケージをアップグレード

$ sudo port upgrade outdated

バージョンを指定してアンインストール

$ sudo port uninstall foo 6.2.114

inactiveなパッケージを全てアンインストール

$ sudo port -u uninstall

inactiveなパッケージを指定してアンインストール

$ sudo port -u uninstall foo

ビルドに使用したファイルを全て削除する

$ sudo port clean --all foo

ビルドに使用したファイルを一部削除
  • 作業ファイル(/opt/local/var/macports/build/)

$ sudo port clean --work foo

  • ダウロードしてきたファイル(/opt/local/var/macports/distfiles/)

$ sudo port clean --dist foo

$ sudo port clean --archive foo

パッケージのバージョンを確認

$ port installed foo

バージョンについて

MacPortsでは、インストール/アップグレードした際に、古いバージョンのパッケージが残る仕組みになっています。
古いパッケージはinactiveになり、新しいパッケージがactiveになります。
deactivate/activate で、一時的に入れ替えが出来たりします。
port -u uninstall/port uninstall foo 6.2.114 で古いパッケージを削除する事も必要になるかもしれません。

variantsについて

従来使われてきたパッケージシステムの多くは、 ソフトウェアのパッケージ化担当者が事前に設定した画一的な仕様でしか ソフトウェアをインストールすることができませんでした。

対して MacPorts では variants と呼ばれる、 ユーザが任意に選択可能なオプションが設けられており、 ソフトウェアの設定をインストール時に選択できるようになっています。

http://macwiki.sourceforge.jp/wiki/index.php/MacPorts#variants_.E3.81.AE.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88

このように、インストールオプションに自由度があるMacPortsですが、落とし穴もあるようです。

MacPorts は依存関係を勝手に解決して必要なものを芋蔓式にインストールしてくれます。しかし、そのように自動でインストールされた port の variants はデフォルトのままになってしまいます。あとで variants を変更しようものなら、それが単に +doc であったとしても、依存する port をすべてインストールし直さなければなりません。

たとえば、git-core を +doc+gitweb+svn+bash_completion でインストールすることを考えてみましょう。+svn を指定することで subversion が (インストール済みでなければ) 自動的にインストールされます。自動インストールされた subversion の variants はデフォルトのままなんですが、これを +mod_dav_svn+tools+bash_completion に変更しようとすると、上記のような問題点によって git-core を一度アンインストールしなければならないのです。自動的な依存関係の解決という便利な特徴が裏目に出てしまっています。

http://d.hatena.ne.jp/mrkn/20081216/port_scheduler

落とし穴とはこれを読んでの通りです。
また、このエントリでその辺を解決する port-scheduler.rb が公開されています。

*1:インストールオプション

*2:リポジトリ