[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PocketBSD packages



itojun wrote:
 > 	- pkg_add hoge-1.0.tar.gz core dev
 > 	  とかやるとcoreとdevだけ入れる、または
 > 	  pkg_add hoge-1.0.tar.gz -man
 > 	  とやるとmanだけ除外
 > 	- databaseにはhoge-1.0を登録する
 > 	  (+CONTENTSは実際インストールされたファイル分だけ)
 > 	- 「後からmanpageだけいれたい」とかいうのは複雑になるだけなので無視。
 > 	  pkg_deleteしてからpkg_addすればよい
 > 	くらいでいいのでは?

私が実装することまで考えるとまさに↑この程度が良さそうです。
参照カウントとかはやっぱりナシ。ナシ。

サブセットには必ず指定できる決まったものがいくつか必要だと
思います。たとえば core, ext, dev, sample, man, doc とか。
これらはどのパッケージに指定しても似たような結果が得られる
ように意味を決めておく必要があります。
そして、どこかの設定ファイルに default を指定しておくようにすると
良いですね。
設定ファイルに default subset = core, ext と書いてあれば
pkg_add hoge-1.0.tar.gz とだけすれば man などはコピーされないとか。
もちろんほとんどのユーザは HDD に余裕があるので、
default subset = ALL とするでしょう。(ALL については後述)
またはなにも設定しなければ ALL でしょう。

#用語
#  サブセット
#      パッケージの一部または全部 mini=core ext のような別名も含む
#  アトミックサブセット
#      別名ではないサブセット @beginsubset〜@endsubset で定義される

この仕組みをうまく動作させるために、mini=core ext のような
別名機能は残したいと思います。で、ALL という特別なサブセットと
REST という特別なアトミックサブセットを導入します。
REST は明示的にはどのサブセットにも属さないファイル全てを
含みます。(現在の pkgsrc の PLIST では全てのファイルが REST に
属することになります。)
ALL は(ALL自身以外の)全てのサブセットを含みます。

例1:現在の pkgsrc の PLIST
  @name hoge
  usr/bin/hoge
  usr/lib/hoge.a
  usr/man/man1/hoge.1

  REST={hoge, hoge.a, hoge.1}, ALL={REST, core, dev, man},
  core=REST, dev=REST, man=REST
  → 当然 pkg_add すれば全てのファイルがコピーされる

例2:ちょっと書き換えた PLIST
  @name hoge
  usr/bin/hoge
  usr/lib/hoge.a
  @beginsubset man
  usr/man/man1/hoge.1
  @endsubset

  REST={hoge, hoge.a}, ALL={REST, core, dev, man},
  core=REST, dev=REST, man={hoge.1}
  → pkg_add のターゲットが ALL なら全てコピーされる
  → pkg_add のターゲットが core dev なら hoge, hoge.a だけ
     コピーされる
  → pkg_add hoge-1.0.tar.gz -man としたばあい ALL を展開中に
     man というサブセットが現れたらそれを除外する
     ALL -> REST, core, dev, man
         -> REST, core, dev         ← man は除外
         -> REST, REST, REST        ← core=REST, dev=REST を展開
         -> REST                    ← 一つにまとめる
     hoge, hoge.a がコピーされる

itojun wrote:
 > 	- databaseにはhoge-1.0を登録する

これにしてデータベースは現在と互換にしたいと思います。

itojun wrote:
 > 	- 「後からmanpageだけいれたい」とかいうのは複雑になるだけなので無視。
 > 	  pkg_deleteしてからpkg_addすればよい

+CONTENTS には「@target REST」のようにインストールした
アトミックサブセットを記録しておいて、将来的にがんばれば
「後からmanpageだけいれたい」という要望に答えられる余地を
残しておくというのはどうでしょうか。

+CONTENTS:
  @target REST
  @name hoge
  usr/bin/hoge
  usr/lib/hoge.a
  @beginsubset man
  usr/man/man1/hoge.1
  @endsubset

pkg_add と pkg_delete をちょっと変更するだけでなんとかなりそう(?)

ところで、OpenBSD も見に行かないと>自分
だれか見に行きました?

Takemura