ttt

getttyent

(FreeBSD) portsnapでportsを最新に

2006-01-24 23:49:04 | デジタル・インターネット

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度、役に立ちました)。