彷徨えるフジワラ

年がら年中さまよってます

旧 Indiana の update 〜 その2

予期せぬ例外浮揚で全然駄目だった image-update だが、登録したバグ報告に付いたコメントによると:

path 属性が複数ある(= 想定外)パッケージがあるんじゃなかろうか?
我々の提供するパッケージには無い筈だけど。

とのことなので、もしや ext2 からの吸い上げのために導入したパッケージなんじゃなかろうか?という予感が。

とりあえず原因パッケージを特定すべく、pkgplan.py ファイルの 143 行目あたりを以下のように改造した上で "pkg image-update" を実施。

    try:
        self.actions = self.__destination_mfst.difference(self.__origin_mfst,
        old_excludes, new_excludes)
    finally:
        print ('planning: %s, %s ....' %
               (self.origin_fmri, self.destination_fmri))
    print "done"

厳密なことを言うなら、print すべきなのは finally 節ではなく try 前なのだけど、ドサクサで出力がロストしないようにとりあえずこの位置で。

で、例外が浮揚した際の最終出力が:

planning: pkg:/SUNWsfman@0.5.11,5.11-0.111:20090508T163519Z, pkg:/SUNWsfman@0.5.11,5.11-0.130:20091219T033829Z ....

は? SUNWsfman?全然関係なかったね > FSWpart/FSWfsmisc for ext2fs

SUNWsfman に対する pkg contents や pkg info -l で同じようなエラーが発生することから、現行版(111b)の manifest がアレしていることが確定 .... orz

release リポジトリ上で 111 版 SUNWsfman の manifest を見ても、path が二重化しているようなエントリは見当たらない。

問題箇所を絞り込むために、更に情報採取コードを追加(file.py の 60 行目)

    self.replace_required = False
    if "path" in self.attrs:
            if isinstance(self.attrs["path"], list):
                    print "unexpected PATH: %s" % (self.attrs["path"])
            self.attrs["path"] = self.attrs["path"].lstrip(
                os.path.sep)

"pkg contents SUNWsfman" で検出されたエラーは以下の様なもの。

unexpected PATH: ['usr/095347', 'usr/share/man/man1/zipinfo.1']

は?なんじゃそりゃ? > 'usr/095347'

"pkg contents SUNWsfman" に truss を掛けて manifest の場所を特定し、実際にファイルを見てみると .... あれ?確かにあるわ > path=usr/095347

っていうか、正規版の manifest と比較してみたら、smb.conf.4 の man ファイルエントリの途中から、zipinfo.1 の man ファイルエントリの途中までがごっそり欠落してる感じ。あれ?manifest 全体で差分取ったら、単なる欠落なんてもんじゃないわ。完全にグチャグチャになってるぞ? > manifest@SUNsfman

正規の manifest ベースで確認した限りでは、インストール自体の漏れは無いみたいなので、保存の際にファイルシステムがアレしたのか?っつーか、file 部分だけ抜き出した manifest.file ファイルは正規版の manifest と一致してるし ....

とりあえず、file 情報部分を manifest.file の内容で復旧したところ、"pkg contents" や "pkg info -l" でも異常終了しなくなったので、その勢いで "pkg image-update" を実行 .... 成功した!

いやぁ、紆余曲折した割に、あんまり応用の利かない原因+解決方法だったなぁ .... orz