MacPorts

提供: MacWiki
移動: 案内検索

MacPorts とは?[編集]

MacPorts は MacOSX 上で利用可能なパッケージシステムの一つで、 主に UNIX 向けに開発されたオープンソース・ソフトウェアを手軽にインストールすることができます。 OpenDarwin プロジェクトの一部として 2002 年より始められ、 Landon Fuller, Kevin Van Vechten, Jordan Hubbard といった Apple inc. の従業員も多数参加しています。

以前は DarwinPorts と呼ばれていましたが、OpenDarwin プロジェクトの休止に伴い、MacPorts と改称(2006 年 8 月~)されました。 そのため、一部の配布物にはまだ DarwinPorts という表記が残っていますが、これらは全く同じものを指します。

2005 年 4 月 28 日にバージョン 1.0 がリリースされ、その当時でおよそ 2500 本のソフトウェア (ports) が導入可能でした。 最新版は 2015 年 10 月にリリースされたバージョン 2.3.4 で、25,000 以上の ports が利用可能となっています。

MacPorts を使って新しくソフトウェアをインストールするには、ターミナル上で「sudo port install パッケージ名」などと入力します。 これによりアーカイブのダウンロード、展開、パッチの適用、コンフィグ、ビルドといった各段階を経て、 指定したソフトウェアのインストールが行われます。 このとき、他のパッケージに対する依存関係があれば、自動的にそれらの必要となるパッケージもインストールされます。


MacPorts の特徴[編集]

MacPorts は以下のような特徴を持つ、先進的なパッケージシステムです。

variants のサポート[編集]

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

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

具体的な例を挙げるならば、 たとえば Fink の ImageMagick は jpeg2000 をサポートしておらず、 info ファイルを直接書き換えることでしかこれを有効にする術はありません。 (註: Fink にも variant 自体はあります。)

$ fink install ImageMagick (←jpeg2000 の使えない単一バージョンとしてしかインストールされない)

これに対して MacPorts の ImageMagick では、 "+jpeg2" という variant をインストール時に指定することにより、 jpeg2000 の読み書きが可能な ImageMagick を導入できます。

$ sudo port install ImageMagick +jpeg2

さらに pTeX (ptetex3) などでは、複数の variants の指定が可能です。

$ sudo port install pTeX +euc +babel +motif

このように MacPorts は variants の機能により、 パッケージシステムの枠内から逸脱することなく、 利用者に対して最大限の選択肢の提供を可能としています。

なお、指定できる variants の種類は、次のようにして調べることができます。 各 Ports で事前に用意されていない variants は指定できません。

$ port variants pTeX

構造化された Portfile[編集]

MacPorts では、ソフトウェアのインストール手順は fetch, extract, patch, configure, build, destroot, install, activate の各フェーズからなる 一連のシークエンスとして表現されます。

それぞれのフェーズの前と後には、さらに pre-* と post-* のサブフェーズが用意されており、 ソフトウェアのインストール方法が記された Portfile には、 これら各々のフェーズにおいて行うべき処理がブロック構造の形で記述されます。

また、Portfile は tclsh 上で動作するソースコードでもあるため、その中で if {} else {}, foreach {} などの制御構造や変数を用いることも可能です。

MacPorts の Portfile には構造化プログラミングを可能とするための機構が備わっており、 可読性・保守性に優れているといえます。 万一、利用者の側で Portfile を新規作成したり、既存のものを書き換えたりする必要が生じたとしても、その作業は比較的容易です。

port コマンドの使い方[編集]

以下のページが参考になります。

Q & A[編集]

MacPorts は FreeBSD の ports を移植したもの?[編集]

いいえ。MacPorts は FreeBSD の ports collection を参考にしていますが、 システムとしては全く別物です。 たとえば、FreeBSD の ports は makefile として実現されているため、拡張性に乏しい面もあります。 対して MacPorts では殆どが tcl により記述されており、 Portfile 中で柔軟な処理を行うことができます。

MacPorts では用意されているソフトウェアが少ない?[編集]

一概には言えませんが、 7000+ というパッケージの総数だけを見てそのように判断されているのでしたら、 まずその間違った先入観を先に捨てる必要があるでしょう。

前に述べた通り、MacPorts には variants のサポートがありますので、 他のパッケージシステムでは複数に分割される場合でも、 一つの port としてまとめられていることがあります。 また、原則として一つのソフトウェアにつき一つの port が対応するため、 パッケージの総数は常に少な目に見積られる傾向があります。

具体的な例を示しますと、たとえば Fink における qt3 パッケージは以下のように細分化されていますが、MacPorts ではこれらのパッケージを全て含めたものが、 たった一つの Portfile から導入できるようになっています。

qt3 Cross-Platform GUI application framework
qt3-bin Cross-Platform GUI application framework.
qt3-designer Cross-Platform GUI application framework
qt3-dev Cross-Platform GUI application framework
qt3-doc Cross-Platform GUI application framework
qt3-linguist Cross-Platform GUI application framework
qt3-mysql Cross-Platform GUI application framework (MySQL Plugin)
qt3-postgresql Cross-Platform GUI application framework (PostgreSQL Plugin)
qt3-shlibs Cross-Platform GUI application framework

結局のところ、考慮の基準とすべきものはパッケージの総数ではなく、

  • 自分の使いたいアプリケーションが用意されているかどうか
  • 万一用意されていなくとも、新規に ports 化することが容易かどうか
  • 既存 ports を基に、新しい variants を容易に作り出せるかどうか

ではないでしょうか。

darwinports.com は MacPorts (DarwinPorts) プロジェクトのサイト?[編集]

いいえ。darwinports.com は MacPorts (DarwinPorts) プロジェクトとは無関係のサイトです。 掲載されている情報が不正確であったり、古かったりする場合があります。 正確な情報を得るため、www.macports.org をブックマークするようにしてください。

MacPorts を再インストールしたい[編集]

MacPorts でアップグレードを繰り返していった場合、まれにライブラリとそれに依存するコマンドのバージョンの不整合が生じてしまい、コマンドが動作しなくなることがあります。こうした場合には以下のような手順で MacPorts をアンインストールし、再度インストールしなおすのが最も簡単な対処方法です。

1. ログインシェルをデフォルトに戻す

ログインシェルを OS 標準の /bin/bash から MacPorts で導入したシェルに変更しているなら、コマンドライン上から

$ chpass -s /bin/bash

としてログインシェルをデフォルトに戻しておきます。 何らかのトラブルで MacPorts で導入したシェルが起動できず、ターミナルが開けないといった場合には、以下の方法を試みてください。

  • Mac OS X 10.5 Leopard の場合:
    1. 「システム環境設定」より「アカウント」を開く。
    2. ウインドウ左下に表示される鍵のアイコンをクリックし、編集可能にする。
    3. 画面左部のアカウント一覧から変更したいアカウントを選び、右クリックで表示されるメニューより「詳細オプション」を選択する。
    4. ログインシェルを /bin/bash に戻す。
  • Mac OS X 10.4 Tiger の場合:
    1. 「アプリケーション」→「ユーティリティ」より「NetInfo マネージャ」を開く。
    2. ウインドウ左下に表示される鍵のアイコンをクリックし、編集可能にする。
    3. 「/」「users」の配下から変更したいアカウントを選ぶ。
    4. プロパティ「shell」の値を「/bin/bash」に戻す。
    5. メニューより「ドメイン」→「変更内容を保存 ⌘S」をおこなう。

2. デーモンを取り除く

MacPorts で導入したデーモン(dbus, canna, etc.)があれば、以下のようなコマンドで全て停止させておきます。

$ sudo port unload canna

インストールされていないデーモンについては unload が失敗した旨のエラーが表示されますが、問題ありません。

3. ディレクトリを削除する

以下のようにしてインストール済みの ports を全て取り除いたあと、/opt/local ディレクトリを削除します。

$ sudo port -f uninstall installed

ここで /opt/local ディレクトリの削除前に uninstall しているのは、 /opt/local ディレクトリの外部にファイルをインストールする ports が若干存在することへの配慮からです。

その他[編集]

トラブルシューティング[編集]

port selfupdate / sync に失敗する[編集]

MacPorts は、ファイルの取得に rsync プロトコルを利用しているため、 LAN / ファイアーウォールの設定によっては、port selftupdate や port sync に失敗することがあります。

例えば、下は -v オプションで詳細ログを出力した場合の結果です。

$ sudo /opt/local/bin/port -v selfupdate
Synchronizing from rsync://rsync.darwinports.org/dpupdate/dports
rsync: failed to connect to rsync.darwinports.org: Operation timed out (60)
rsync error: error in socket IO (code 10) at /SourceCache/rsync/rsync-24/rsync/clientserver.c(94)
Error: /opt/local/bin/port: selfupdate failed: Couldn't sync dports tree: sync failed doing rsync

こういう場合は、次のようにすれば、Ports ファイルを更新することができます。

  • 1)LAN 管理者に相談して、rsync ポートの利用を許可してもらう
  • 2)rsync ポートが閉じられていない別のネットワークに移動する
  • 3)Subversion で ports tree を 取得する
  • 4)rsync の通信をトンネリングする

Intel Mac で subversion のメッセージが文字化けする[編集]

APR まわりの設定がおかしいのが原因です。 環境変数 LANG=ja_JP.UTF-8 を設定すると正しく日本語のメッセージが表示される一方、 LANG を設定していない素の OS X では文字化けが発生します。

$ svn
使用方法を知りたいときは 'svn help' と打ってください。
$ unset LANG
$ svn
?\228?\189?\191?\231?\148?\168?\230?\150?\185?\230?\179?\149?\227?\130?\146?\231?\159?\165?\227?\130?\138?\227?\129?\159?\227?\129?\132?\227?\129?\168?\227?\129?\141?\227?\129?\175 'svn help' ?\227?\129?\168?\230?\137?\147?\227?\129?\163?\227?\129?\166?\227?\129?\143?\227?\129?\160?\227?\129?\149?\227?\129?\132?\227?\128?\130
$ uname -a
Darwin pc192168000058.local.network 8.8.1 Darwin Kernel Version 8.8.1: Mon Sep 25 19:42:00 PDT 2006; root:xnu-792.13.8.obj~1/RELEASE_I386 i386 i386
  • gettext 周りはよく知らないのですが、どうしてもこの問題を回避したい場合には以下のパッチが有効かも知れません。おそらく、内部エンコードを明示的に UTF-8 にすると、きちんとフォールバックが働かないことがあるのでしょう。(もう少し調べてみないことには、確かなことは言えませんが、gettext の不具合かな?)-たちゃな
--- subversion/libsvn_subr/nls.c.orig   2006-02-16 06:30:49.000000000 +0900
+++ subversion/libsvn_subr/nls.c        2007-01-30 02:25:37.000000000 +0900
@@ -119,7 +119,7 @@
 #else
   bindtextdomain(PACKAGE_NAME, SVN_LOCALE_DIR);
 #ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-  bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
+  //bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
 #endif
 #endif
 #endif
  • 基本的なところですが、このパッチの使い方がわかりません。/opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/subversion/files/ に置いて Port を編集すれば良いのでしょうか... 今回の件は、ちょっと根が深そうなので、LANG=... で誤魔化せばそれで良いと思っています。(ただ、この対策は FAQ に加えるべき)- ぜ
  • その方法でも構いませんが、よりアドホックに済ます方法もあります。sudo port patch subversion をおこなうと、

${worksrcpath} (/opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/subversion/work/subversion-1.4.3) 以下にソースが展開され、標準のパッチがあればそれらが適用された状態で停止します。このとき手動でソースツリーに変更を加えて構いません。その後、sudo port install subversion するとインストールまで自動で進みます。patch フェーズで一旦停止というこの方法は、FreeBSD の ports collection などでも同様に有効です。-たちゃな

関連サイト[編集]

その他、参考になりそうなサイトがあれば自由に追加してください。

Wiki内の関連ページ[編集]