[Momonga-devel.ja:00426] mphについて


あかがきです。
はじめまして。

最近なんとなくmphをいじってしまっているので、この辺で一度メモを投げます。
興味のある方は読んでみてください。

なお、以下 mph-0.12.14 以前を "旧mph" mph-0.13.99 以降を "新mph" とします。
一時、 0.12.99 というものもありましたが、新旧のあいの子のようなもので、
ややこしいので無視します。
新mphの最新のリリースは0.13.99.4で、mphのCVSではもう少し更新されています。

旧mph から 新mph への変更点
1. パッケージの更新の判定
   旧mph では、パッケージの version,release,epoch を rpmdb と比較して、
   rpmdb に登録されてる version,release,epoch より新しければ対象パッケージ
   は更新されているとして入れ替え対象に上っていました。(この"新らしければ"
   というルールもmphのバージョンによりまちまちだったわけですが..)
   新mph では、ここは大幅に簡略化して、パッケージの md5 署名が同じであるか
   どうかのみを見るようになっています。md5署名が異なれば、なんらかの理由で
   配布元の方でリビルドされたということになりますので、version,release,epoch
   が同じであっても入れ替え対象になります。
   新mphでの mph-get upgrade の最初の一回目は、このルールの変更により、
   大量のパッケージをインストールしなおすことになると思います。

2. .mph ファイルの変更
   .mph ファイルに DependsVer DependsFlags ObsoleteVer ObsoleteFlags
   ProvidesVer ProvidesFlags Conflicts ConflictsVer ConflictsFlags
   Epoch 以上10個のタグを追加しています。旧mphで過去一時期利用されて
   た(っぽい) Epoch タグと今回追加した Epoch タグは互換性があります。
   旧mphでは、新mphの.mph ファイルは問題なく読み込めます。
   新mphで旧mphの .mph ファイルは読めるようにしたいのですが、現状未試験
   ですので、 mph-scanpackages -r で .mph は再作成した方がよいです。

3. インストールするパッケージの選定方法の変更
   旧mph では、例えば fuga に依存している hoge というパッケージがあって
   fuga も hoge も更新されている場合、 mph-get install hoge を実行すると
   hoge -> hogeが依存しているfuga -> fuga に依存しているあらゆるパッケージ
   と伝播して、大量のパッケージを入れ替えることになっていました。
   新mph では、(2)で追加したタグを利用して新hogeの動作に新fugaが必要なのか
   それとも新hogeは旧fugaでも動作可能なのかを調べて、新fugaが必要な場合に
   のみ fuga をアップデートするようになっています。
   glibc や glib のような底辺のパッケージが更新されたときに
   mph-get install hoge と mph-get upgrade でほぼ差のない動作をしてしまう
   ということがなくなるはずです。
   Provide: Obsolete: についても、同じようなチェックがはいっています。

4. Conflicts のチェック
   Conflicts: 指定を調べるようになりました。

5. mph-get remove の改善
   旧mph では、 mph-get remove のときに Provides をあまり真面目に調べて
   いませんでした。例えば、artsクライアントライブラリの libartsc.so.0 は
   kdelibs2(KDE2用) と arts-artsc(KDE3用) の両方で provide されているの
   ですが、旧mph で mph-get remove kdelibs2 すると KDE3 一式まきこんで
   remove されてしまいます。新mphでは、このような動作は抑止しています。

6. mph-get の分割
   旧mph では、mph-scanpackages 以外の全ての機能を mph-get という
   スクリプト一本で提供していたのを、新mph では 
    mph-get                  mph-get-hoge を呼ぶドライバ
    mph-get-clean            mph-get clean 本体
    mph-get-remove           mph-get remove 本体
    mph-get-install          mph-get install upgrade get get-all 本体
    mph-get-search           mph-get noinstall noexist whatprovides 本体
   と機能ごとにスクリプトを分割しています。
   また、全スクリプトで共通の機能を mph.rb というモジュールにまとめて
   います。

7. mph-scanpackages のパラメータの変更
   mph-scanpackages /home/dora/PKGS/i586 /home/dora/PKGS/noarch
   のように、複数のディレクトリを同時に指定できるようになっています。

と、まあ思いつくとこを羅列してみただけですが、今回はこのへんで。

--------------
Shingo Akagaki
dora@xxxxxxxxxxxxxxxxxx