[OpenBSD]

Ports と Packages のこと

そもそもの動機

 OpenBSD はそれだけでかなり完全なシステムではあるけれど、でも追加したいようなソフトは世の中にいっぱいある。でも、どこまで含めるかという一線を決める問題があるし、さらにはときどきライセンスの問題と輸出規制がからんでくることもある。OpenBSD は小さなスタンドアローンの UNIX-系 OS ということになっているので、システムといっしょに出荷できないものはどうしても出てくる。

ports と packages のコレクションは、OpenBSD が行うセキュリティ監査を経ていない。パッケージの品質はなるべく高くするように日夜努力のわれわれではありますがぁ、本体と同じだけの堅牢さやセキュリティを確保するだけの人材は、どこを叩いても出てこないのである。

port コレクションはもともとFreeBSD から拝借したものだけれど、このギャップを埋めてくれるものだ。考え方としては、サードパーティのソフトごとに、以下のようなものをコントロールする Makefile を作っておこうではないのということだ:

 この情報は、/usr/ports ディレクトリ以下におさめられている。

Packages というのは、portsのバイナリ版だと思って欲しい。コンパイル済みの port がパッケージになって、これはシステムに pkg_add(1)を使って登録できる。

Package はただの .tgz のかたまりみたいだけれど、でも必ず pkg_add(1)を使ってインストールしてほしい。 pkg_add(1) しか扱いを知らない追加情報があったりするのだ。
豆知識:package とただの .tgz を見分けるには pkg_info(1)を使うといいぞ。

packagesの入手

 コンパイル済みの packages が、ほとんどの主要アーキテクチャ向けには用意されている。

 パッケージの追加は簡単だ:

pkg_add pkgname.tgz.

 もし package を一つのソース(package repository) からしか取得しないのであれば、PKG_PATH をその repository URL にセットしておいて、依存関係も取得できるようにしよう。

 たとえば、i386 マシン上で、OpenBSD2.7 用の gimp package をインストールするには、次のようにする:

    # setenv PKG_PATH ftp://ftp.openbsd.org/pub/OpenBSD/2.7/packages/i386/
    # pkg_add ${PKG_PATH}gimp-1.1.17.tgz

インストールした packageの管理

 packages(7) man ページは、インストール済みのパッケージ管理、衝突(すでに存在するファイル)の解決、依存関係の処理について便利な情報が書いてある。

 OpenBSD 2.7 以来、パッケージのアップデートには次のようにしなくてはならない:

 これはちょっと不便だ。package 一つで依存関係がいろいろ出てきて、アップデート一つするのに、大量のパッケージを除いてから追加しなおすはめにはるかもしれない。

ports を使う

 もし自分のアーキテクチャ向けにある package が存在しなければ、port をコンパイルすればいい。それに、一部のユーザは諸般の理由で、すべてソースからコンパイルしなおしたいと思うだろう。

 リリースバージョン用の port ツリーはftp ミラーサイトのどこでも pub/OpenBSD/[バージョン] ([バージョン] はリリース番号) ディレクトリから取ってこられる。リリースバージョンはわれわれが CDROM 上で出荷して、スナップショットよりもたくさんのテストを経たものだ。詳しくは ports(7) man ページを見よう。

OpenBSD リリース用の ports アップデート

ports ツリーは、ほかの OpenBSD の部分と同じく、絶えず変わり続けている。ports ツリーのふつうのライフサイクルは以下の通りだ:

 ステータスの変化はメーリングリストで広くアナウンスされる。

 いったん OpenBSD -current を追いかけるように切り替わったら、current のports tree を前のリリースといっしょに使ってはけない。これはport の make プロセスに関わる各種の変更によるものだ。make プロセスの多くは、OpenBSD-current ソースツリーに基づくコードを必要としている。前のリリースで使える最新の ports ツリーを手に入れるには:

 2.7 でビルドできるports は、独自のブランチにもおかれている。日付を元に ports を持ってくるかわりに、以下のようにしてもいい:

    $ cd /usr/ports
    $ cvs -q -d anoncvs@some.anon.server:/cvs up -r OPENBSD_2_7 -Pd

 OPENBSD_2_7 のタグは、このportsが「安定版」だと示すものではまったくない。単にそれが 2.7 システム上でビルドされるというだけだ。セキュリティ上のフィックスがこのブランチに追加されることもある。

 ports ツリーは全体として一つの存在として機能する。その中のディレクトリ一つだけをアップデートしても、うまく動く保証はない。パッケージの依存関係のために、portsツリーのかなりの部分を更新してコンパイルしなおすハメになるかもしれないからだ。いろいろな問題に直面する覚悟がない限り、ports-current を追いかけるのはおすすめできない。source-changes@openbsd.orgtech@openbsd.org などのメーリングリストがたぶんとても役にたつだろう。

 ports-current ツリーの入手には以下の方法がある:

Ports と XFree

 OpenBSD XFree 設定ファイルには特別なおまじないがあって、portsツリーが imake-ベースのアプリケーションを /usr/local以下にインストールするようにしてくれる。

OpenBSD はいまのところ、各種の理由から XFree 4.0.x で出荷しない。この ports のおまじないは XFree 4.0.x ディストリビューションでは機能しない。これが OpenBSD ports ツリーで使えるようにするには、デフォルトのバイナリ XFree 4.0.x ディストリビューションに /usr/ports/infrastructure/patches/patch-xfree-4.0 のパッチをあてる必要がある。

Ports ツリーの使用例

 かりに port ツリーを手に入れて、圧縮用ユーティリティ unzipをコンパイルしてインストールしたかったとしよう。こんな具合にすればいいはず:

    % cd /usr/ports/archivers/unzip
    % su
    # make
    # make install
    # exit

 簡単、でしょ? 特にバックで起こったいろんなことを考えると感動するよね:

 OpenBSD 2.7 では、ports のかなりの部分がインストール時に自動的にpackagesをビルドする。OpenBSD current では、ほとんどすべての ports がその標準にしたがう。

 ports がビルドされるにつれて /usr/ports/distfiles ディレクトリはプログラムのソースでいっぱいになって、/usr/ports/packages はバイナリパッケージでいっぱいになる。ネットへの低速接続しかでいない人は、すべての distfile をいっぺんにもってくる効率よい方法について mirror-distfiles(7) を参照するといいだろう。なお、OpenBSD CD には ports ツリーと主要 packageしか入っていない。 distfiles もほしければ、別個に入手するしかない。

新しい portsをつくる

 もし OpenBSD ports ツリーの拡張を手伝うのに興味があるんなら、まず porting.htmlを読んで欲しい。このページは、 FreeBSD handbookの移植セクションを参照すると同時に、OpenBSD 固有の方針やヒントも書いてある。

問題があればご一報を

 いまある ports でトラブルがあったり、新しい ports をつくるのに情報がほしければ、OpenBSD ports メーリングリストにメールを送って欲しい:ports@openbsd.org
 訂正はいつも大歓迎だけれど、必ず以下のものを連絡してほしい:


OpenBSD Valid XHTML 1.0! www@openbsd.org 翻訳上の問題はhiyori13@alum.mit.edu

$OpenBSD: ports.html,v 1.43 2000/11/23 19:06:20 jufi Exp $