NetBSDにも、1998年初めにリリースされたNetBSD-1.3にいたってようやく本格的なpackageシステムが導入された。FreeBSD、Linuxという二大PC-UNIXでは常識となっているpackageシステムであるが、我らがNetBSDにはなく、とっつきにくいとされる最大の原因となってきた。今までサードパーティ製のフリーソフトウェアなどのプログラムをインストールする際には、いちいち附属のドキュメント (たいていは英文である) を読み、場合によっては苦労してファイルに修正を加える必要があったが、これでその苦労からもある程度解放される訳である。早速これを試してみたので、その手順をメモしてみる。
NetBSDのpackageシステムは、FreeBSD上で開発され、OpenBSDでも導入されているシステムを利用している。Berkeley makeを利用しており、コンパイル済み (バイナリ) パッケージの他にNetBSDにインストールするための手順やパッチなどをまとめたソースパッケージ (FreeBSDではportと呼んでいるが、これはNetBSDでは既に別な意味で使われている言葉なので、ソースパッケージとに呼ぶ) に重点が置かれているなどの特徴がある。NetBSDでは1998年1月上旬現在、i386用のコンパイル済みパッケージはまだ一部しか配布が始まっていないので、ソースパッケージによるパッケージ導入を試みた。他のアーキテクチャ、m68kファミリやsparcなどではコンパイル済みパッケージが利用できる。
パッケージは、各プログラムの種類によってカテゴライズされている。ソースパッケージがあれば、カテゴリごとのディレクトリの下にある、プログラムごとのディレクトリに格納されている。このディレクトリでmake installを実行するだけで、該当ソフトウェアおよびそれが依存するプログラムのオリジナル配布ファイル (distfile) をannonymous ftpサイトなどから入手し、コンパイル、インストールまで自動的に行うことができる。なお、現在のところソースパッケージの全ファイルサイズは、全て合わせても4MBに満たない。
NetBSD packageシステムの利用するディレクトリ構造は以下の通り。
| /usr/pkg | package をコンパイルした結果のインストール先となるサブツリー。実行ファイルは /usr/pkg/bin に、オンラインマニュアルは /usr/pkg/man に... インストールされる。 |
| /usr/pkgsrc | ソースパッケージの標準ディレクトリ。同時にコンパイル用の作業ディレクトリとしても利用される。 |
| /usr/pkgsrc/distfiles | 各プログラムのオリジナル配布ファイルが保存される。 |
| /usr/pkgsrc/packages | コンパイル済みパッケージが置かれる。 |
| /var/db/pkg | パッケージのインストール状況を保持するデータベース |
ソースパッケージの入手法には、ftpで一括して取ってくる方法と、supを利用する方法があるが、ここではsupを利用した。一度設定しておけば、定期的にsupを実行することにより、更新されたpkgsrcをいつでも入手できるからだ。また、私の場合はすでにsupを利用してNetBSD-currentを引き込んでいたというのも大きい。
supの設定は、supfileというファイルで行う。以下にsupfileの例を示す (→ で改行しているが、実際には続けて1行に書く)。
current release=pkgsrc base=/export/NetBSD-current → host=sup.netbsd.org hostbase=/ftp/pub delete → use-rel-suffix compress
これを適当なディレクトリに作成し、
# mkdir /export/NetBSD-current # sup [supfile のファイル名]
を実行することにより、/export/NetBSD-current/pkgsrc以下にソースパッケージが展開される。あとは、ln -s /export/NetBSD-current/pkgsrc /usr/pkgsrcのようにシンボリックリンクを張れば/usr/pkgsrcが準備できる。もちろん、ディスク容量に余裕があれば、/usr/pkgsrcの下に直接supしてきても構わない。
各distfileは、原則として一次配布元から直接入手される設定になっている。しかしながら、XのcontribやGNUなどメジャーなアーカイブに関しては、各地のミラーサイトから入手するよう設定することができるようになっている。例えば、Xのcontribに含まれるソフトウェアをftp.tokyonet.ad.jpから入手するようにするには、makeの変数MASTER_SITE_XCONTRIBをftp://ftp.tokyonet.ad.jp/pub/X/contrib/%SUBDIR%/と設定する。makeの変数を設定するには、make起動時のコマンドラインで指定する。
% make MASTER_SITE_XCONTRIB=ftp://ftp.tokyonet.ad.jp/pub/X/contrib/%SUBDIR%/
あるいは環境変数で設定することも出来るはずだ。/etc/mk.confに書いても大丈夫にするべきであるような気がするのだが、どうやらダメらしい。
その他、GNU用にMASTER_SITE_GNU、PerlのCPAN (Comprehensive Perl Archive Network) 用にMASTER_SITE_PERL_CPANなどの設定ができるようになっている。/usr/share/mk/bsd.port.mkにあるデフォルト値を参考にして、最も近いサイトのURLを指定する。
こうしたサイトからの入手に失敗した場合、ftp.netbsd.orgやftp.freebsd.orgから入手できるようになっているが、これもミラーサイトを利用するよう設定変更するべきであろう。
さて、これらの設定が一度終了すると、あとは非常に簡単である。例として、www/lynxをインストールしてみた。
% su Password: # cd /usr/pkgsrc/www/lynx # make install
これだけの手順でlynxのアーカイブ入手、展開、configure、コンパイル、インストールまで全て自動で行ってくれる。lynxは、ncursesというライブラリを利用するが、このncursesも自動的にインストールされる。
あとは個人環境でPATHに/usr/pkg/binを追加するだけである。
インストールされているパッケージは、pkg_info(1) コマンドで容易に確認できる。
% pkg_info lynx-2.7.1ac-0.102 An alphanumeric display oriented World-Wide Web Client. ncurses-1.9.9g CRT screen handling and optimization package % pkg_info lynx-2.7.1ac-0.102 Information for lynx-2.7.1ac-0.102: Comment: An alphanumeric display oriented World-Wide Web Client. Description: lynx is a program which allows a user to access World-Wide Web servers and other information servers. It uses only ascii representation so that it can be used from ascii-terminals and dialin-lines.
削除もpkg_delete(1) で容易に可能なはず。
インストール先は、特に指定しない限り/usr/pkgになる。コンパイル済みパッケージもここに入ることになると思われ、理由がない限り変える必要はないだろう。私のマシンには/usrに余裕がないため、/usr/pkg -> /usr/local/pkgのsymlinkを張り、実体は/usr/local/pkgに置いている。
なぜかこのlynx、ktermやxtermからだと表示がボロボロだ (泣)。
あとはktermとかkinput2とかの日本語周りをどう取り込んでくかだなぁ。
おお今見たらm68kファミリ向けのコンパイル済みパッケージは妙に充実している。遅いマシンにはコンパイル済みパッケージは便利だろうねぇ。