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
- ファイルがどのパッケージから提供されているかを表示
オプションを指定してインストール
$ 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 が公開されています。
より詳しく
http://lapangan.net/darwinports/index.php?Man%2F1Port
http://lapangan.net/darwinports/index.php?TheMacPortsWiki%2FInstallingMacPorts
MacPorts - MacWiki
Binary ArchivesとかProfileとか
MacPorts の30ページから