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

[debian-devel:15602] diversion (was: current xdvi-pl depends on perl-5.8)



>> On Mon, 10 Mar 2003 20:59:43 +0900
>> dancer@xxxxxxxxxxxxx (Junichi Uekawa) said as follows:

>バージョンを見て新しいパッケージのpreinstでdpkg --divertを呼ぶのと、
>postrmでもdpkg --divert を呼ぶのが良いのではないでしょうか

>rm -f /usr/bin/xdvi とするよりも、"xdvi" が存在しないはずの時に行うの
>が良いかと。

それはその通りなんですが….

諸悪の根源は,古いパッケージ(22.40u-j1.12-0.3)の postrm で

    case "$1" in
        purge|remove)
            dpkg-divert --package xdvik-ja --remove --rename --divert \
                /usr/bin/xdvi.nonja /usr/bin/xdvi

としてしまったために upgrade 時には diversion が解除されないことにあり
ます.

そのため,新しいパッケージ側で面倒を見てなんとか diversion を解除する
必要があるのですが,(debian policy manual によると)通常のインストール
手順は

        1) old-prerm upgrade new-version
        2) new-preinst upgrade old-version
        3) unpack files
        4) old-postrm upgrade new-version
        5) postinst configure most-recently-configured-version

となっていますから,preinst の段階では,まだ新しいファイルは展開されて
おらず,かつ古いファイルは待避されていませんから,/usr/bin/xdvi は存在
していると思うのです.

;; 手元で preinst で dpkg-divert --remove するパッケージを作って試して
;; みましたが,やっぱり失敗しました.

この観察が正しいなら,新しいパッケージでは diversion を解除することが
有り得るということを考えると,preinst では,

       if [ install = "$1" -o upgrade = "$1" ]; then
          dpkg-divert --package smailwrapper --add --rename \
             --divert /usr/sbin/smail.real /usr/sbin/smail
       fi

として,更に postrm では

       if [ remove = "$1" -o upgrade = "$1" ]; then
          dpkg-divert --package smailwrapper --remove --rename \
             --divert /usr/sbin/smail.real /usr/sbin/smail
       fi

とするようにして,パッケージの upgrade 時も常に diversion の解除と設定
を行うようにしておくべきなんじゃないかなあと思うのですが,policy
manual の6章の実例はそうはなっていません.そうすると,もっとまっとうな
やり方があるのだろうと思うのですが,ご存じの方は教えていただけないでしょ
うか?

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )