MacPorts で自家製 ports を使う方法

MacPorts は 1万2000以上のソフトウェアを ports としてサポートしています*1.しかも,MacPortsports は sudo port selfupdate するだけで最新のものを入手できるので便利です.MacPortsports は種類も豊富で便利なので,普段は MacPortsports だけで十分です.

しかし,不幸にして,使いたいソフトウェアが MacPortsports に入っていなかったり,メンテナが忙しくて port ファイルが古いままだったり,ということがあります.そんなときには既存の port ファイルをちょっといじって自家製 ports としてインストールするのが便利です.

自家製 ports を使うための方法は MacPorts Guide4.6. Local Portfile Repositories に詳しいのですが,簡単にまとめてみます.手順は,

となります.

1. ローカルリポジトリの作成

ローカルリポジトリといっても,ただのディレクトリです.ここでは,ホームディレクトリに ports ディレクトリを作成します.

% mkdir ~/ports

2. sources.conf にローカルリポジトリを追加

sources.conf ファイルにローカルリポジトリの URL を追加します.

% sudo vi /opt/macports/etc/macports/sources.conf
% diff -U3 /opt/macports/etc/macports/sources.conf.default /opt/macports/etc/macports/sources.conf
--- /opt/macports/etc/macports/sources.conf.default	2011-09-07 06:48:34.000000000 +0900
+++ /opt/macports/etc/macports/sources.conf	2011-09-07 14:06:15.000000000 +0900
@@ -28,4 +28,5 @@
 # If an rsync URL points to a .tar file, a signed .rmd160 must exist next to
 # it on the server and will be used to verify its integrity.
 
+file:///Users/passingloop/ports
 rsync://rsync.macports.org/release/tarballs/ports.tar [default]

ここで,/opt/macportsMacPorts のインストール先ディレクトリ (prefix) です.デフォルトでは /opt/local になっています.また,passingloop はユーザ名です.それぞれ,お使いのものに置き換えてください.

3. ローカルリポジトリに port ファイルを作成

例として,devel カテゴリに yajl1 を port ファイルとして作成します.

% mkdir -p ~/ports/devel/yajl1
% cd ~/ports/devel/yajl1
% vi Portfile

参考までに、作成した Portfile を gist にして貼り付けておきます.

4. ローカルリポジトリで portindex コマンドを実行

何のためにあるのか分からなかった portindex コマンドの使い道がようやく分かりました.

% cd ~/pots
% portindex
Creating port index in /Users/passingloop/ports
Adding port devel/yajl1

Total number of ports parsed:	1 
Ports successfully parsed:	1 
Ports failed:			0 
Up-to-date ports skipped:	0
% ls 
PortIndex	PortIndex.quick	devel

ローカルリポジトリに PortIndex が作成されました.これで,port コマンドでローカルリポジトリports を操作できます.

% port search yajl1
yajl1 @1.0.12 (devel)
    Yet Another JSON Library.
% sudo port install yajl1

おわりに

今回は自家製 port ファイルを使えるように MacPorts を設定してみました.せっかく MacPorts を使っているのだから,MacPorts の port に含まれていないソフトウェアをインストールするときにも,Portfile を用意して MacPorts で管理できるようにしたいです.

*1:2011年9月現在