D. J. Bernstein [translated to Japanese by Yusuke Shinyama, 2002-09-06]
UNIX
/package の階層

パッケージの管理

パッケージマネージャは、 どのファイルがどのパッケージに含まれているかを示す データベースを管理しています。これは、そのデータベースに対する 何らかの有用なバッチ処理を提供します。ひとつはパッケージを tarball から展開し、同時にそのパッケージのファイルを データベースに加えることです。もうひとつはパッケージに含まれている すべてのファイルを削除し、同時にそのパッケージのファイルを データベースからとり除くことです。

ほとんどのパッケージマネージャは、これ以外の動作 -- たとえば新しいファイルをパッケージに加えたり、すでに存在している ファイルからパッケージを作ったりすること -- をサポートしていません。 ある開発者がプログラムをコンパイルし、インストールしたとして、 そのプログラムをパッケージマネージャに登録したいと思った場合、 何が起こるでしょうか? その開発者はインストールされたファイルをひとつの tarball にまとめて それらのファイルを削除し、それからパッケージマネージャにその tarball を インストールさせる必要があります。そのプログラムに別のなにかを加える場合、 開発者はまた同じことをくり返す必要があるでしょう。

これに対して、 /package はファイルシステム自体をデータベースとして使います:

パッケージ用のディレクトリは次のように識別されます: /package 内の non-sticky な (sticky ビットが立っていない) サブディレクトリか、 /package 内の sticky な (sticky ビットが立っている) サブディレクトリ以下の non-sticky なサブディレクトリか、 /package 内の sticky なサブディレクトリ以下の sticky なサブディレクトリ以下の non-sticky なサブディレクトリ …などなど。 たとえば /package/admin は sticky なサブディレクトリであり、 /package/admin/daemontools-0.76 はそうではありません。 したがって、/package/admin/daemontools-0.76 はパッケージ用のディレクトリです。 スクリプトを単純にするため、/package 自身もまた sticky になっています。

慣例として、パッケージの tarball は /package 内で展開します。 これらにはすべての必要なサブディレクトリが含まれているので、 システム管理者が前もってディレクトリを作っておく必要はありません。 たとえば admin/daemontools-0.76 tarball は admin/daemontools-0.76 の階層とともに sticky な admin ディレクトリも 持っています。 tarball は tar -xpf で展開する必要があることに注意してください。 tar -xf では sticky ビットが反映されません。