[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 )