portsというのは、FreeBSDのソフトウェア・パッケージ管理システムのことです。事前にコンパイルされたバイナリパッケージをインストールすることもできますが、基本的には、ソースファイルをコンパイルして、インストールするようになっています。ちなみに、ソースからコンパイルするほうが、共有ライブラリのバージョン不一致とかの問題がなくて、個人的には好きです。
日々バージョンアップされてていく多くのソフトウェアにあわせて、portsも、常に更新されつづけています。そのため、portsを利用するならば、常にportsを最新の状態に更新しなければなりません。
portsを更新する方法として、これまではcvsupというツールが使われていました。しかし、cvsupは、プロキシーサーバを使ってくれないため、ファイアウォールを超えるのが容易ではありません。SOCKS5か、もしくはsshのポートフォワーディングが使えれば、cvsupを使うこともできるのですが、SOCKSやSSHが使えなくなっているネットワークでは、cvsupの利用の道は閉ざされます。FTPサイトにtar+gzでアーカイブされたports全部のファイルがあるので、それをダウンロードして展開すればいい・・・んですが、portsってファイルの個数がものすごく多くて、全ファイルの削除&展開だけで、けっこう時間がかかるんですよね。
そんな中、最近推奨されているのが、portsnapというツールです。これ、ちゃんとHTTP/FTPプロキシーサーバを使ってくれます。というのも、実際にファイルをダウンロードするのは、fetchというコマンドを使っているからのようです。
■ portsnapをインストールする
FreeBSD 6.0-RELEASEと、最近の5-STABLEでは、すでに/usr/sbin/portsnapとして最初からインストールされています。
それ以前のFreeBSD(5.4-RELEASEを含む)の場合は、portsnapをバイナリパッケージか、portsの/usr/ports/sysutils/portsnap/からインストールすればOKです。
■ portsnapの設定
portsnapの設定ファイルが、/etc/portsnap.confにあります。たぶん、何も書き換える必要はないんじゃないかと思います。
パッケージやportsでインストールしたportsnapの場合は、/usr/local/etc/portsnap.confになります。たしか最初は、portsnap.conf.sampleというファイルしかないので、portsnap.confという名前でコピーすればOKだと思います。
portsはやたらとファイルの個数が多く、ぜったいにインストールしそうもないものも多数あります。portsnapで、自分にとって不要なものをダウンロードしないように設定することができます。これは、portsnap.confでREFUSEというキーワードで指定します。たとえば、こんな感じです。
REFUSE arabic chinese french german hebrew hungarian
REFUSE korean polish portuguese russian ukrainian vietnamese
これで、/usr/ports/arabic、/usr/ports/chineseなどのファイルが展開されなくなります。
デフォルトでは、/usr/portsにportsファイルが展開されます。portsnap.confで変更することもできますが、個人的には、わかりづらい(というか忘れてしまうので)、別ディレクトリに展開したい場合は、/usr/portsからシンボリックリンクをはるようにしています。
freebsd# ln -s /disk1/ports /usr/ports
あと、portsnapが使う作業ディレクトリが必要です。portsnap.confにWORKDIRという名前で定義されているので、そのディレクトリを事前に作成しておきます。
freebsd# mkdir /var/db/portsnap
■ プロキシーサーバの指定
fetchコマンドでファイルをダウンロードするので、fetchコマンド用の設定をすればよいのですが、ちょっと独特です(昔にくらべたらましになったんですけど)。こんな感じです。
freebsd# setenv HTTP_PROXY http://192.168.0.21:3128
環境変数HTTP_PROXYに、「http://プロキシーサーバ名:ポート番号」という書式で指定します。
詳しく情報は、「man 3 fetch」を実行してマニュアルを見ることができますが・・・わかりづらいです。最後の方の、使用例を見るだけで十分かも知れませんが。
■ portsnapを実行する
まずは、「portsnap fetch」を実行します。
freebsd# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... using portsnap1.FreeBSD.org.
Fetching public key... done.
Fetching snapshot tag... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Jan 24 09:08:50 JST 2006:
5ff69d98845e7080524eea545565dee007a139eb55be1e 0% of 38 MB 140 kBps
(以下略)
次ですが、はじめてportsnapを実行した場合は、「portsnap extract」を実行します。
freebsd# portsnap extract
2回目以降は、portsnap fetchを実行したあと、「portsnap update」を実行します
freebsd# portsnap fetch
freebsd# portsnap update
と以上のようなかんじです。ほかに、cronからportsnapを実行するための「portsnap update」というのがあります。
portsnapのマニュアルやヘルプメッセージでは表示されないみたいですが「--debug」というオプション引数を指定することもできます(その名のとおりの機能ですが、1度、役に立ちました)。