[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]
Debian ポリシーマニュアル
Appendix G - 退避バージョン - あるパッケージに含まれるファイルを上書きするには (旧 Packaging Manual より)
パッケージを再インストールする時、その中のあるファイルを dpkg
によって上書きさせないようにして、そのファイルをどこか他の場所に置くことができます。
この方法は、あるパッケージに含まれるファイルをローカルに入れ替える場合や、あるパッケージが別のパッケージに含まれるファイルを置きかえる (または、そのプログラムのラッパーを提供する) 場合に利用できます。
退避バージョン (diversion) の使用を決定する前に、代替バージョンへのインターフェース -
update-alternatives
(旧 Packaging Manual より), Appendix F
を読んでください。
本当に、あるプログラムに対して複数の代替バージョンを提供するよりも、退避バージョンを使用する方が適切であること確認してください。
退避操作専用のプログラムである dpkg-divert
は、退避されたファイルの一覧を更新します。また、dpkg
はこの一覧を使用します。この操作に関する詳細は、 dpkg-divert(8)
をご覧ください。
あるパッケージが、別のパッケージに含まれるあるファイルを退避したい場合、
preinst スクリプト中から、dpkg-divert
を呼ばなければいけません。
dpkg-divert
は、退避ファイル一覧にエントリを追加し、既存のファイルの名前を変更します。
例えば、smailwrapper
というパッケージが、
/usr/sbin/smail
を包含するラッパーをインストールしようとしている場合を考えます。
dpkg-divert --package smailwrapper --add --rename \ --divert /usr/sbin/smail.real /usr/sbin/smail
オプション --package smailwrapper は、smailwrapper
に含まれる /usr/sbin/smail
が、退避バージョンではなく本来のバージョンとしてそのままインストールされることを保証します。
アップグレード時に退避バージョンを無条件に指定することは問題ありません。
これは、もし既に存在していた場合には変更は行われず、dpkg-divert
がメッセージを表示するだけとなるためです。このメッセージを抑止する場合には、
コマンドをアップグレードしようとするバージョンを条件とするものとしてください。
if [ upgrade != "$1" ] || dpkg --compare-versions "$2" lt 1.0-2; then dpkg-divert --package smailwrapper --add --rename \ --divert /usr/sbin/smail.real /usr/sbin/smail fi
以上の例では、1.0-2 が、最初にパッケージに退避バージョンが追加されたバージョンです。 abort-upgrade 時にこのコマンドを実行することに意味はありませんが、害もありません。
postrm の場合はちょうどこの逆を行ないます。
if [ remove = "$1" -o abort-install = "$1" -o disappear = "$1" ]; then dpkg-divert --package smailwrapper --remove --rename \ --divert /usr/sbin/smail.real /usr/sbin/smail fi
特定のバージョン以降で退避バージョンが導入されている場合、postrm はそれ以前のバージョンからのアップグレード失敗の場合を扱えなければいけません (旧バージョンがあまりにも古く、直接のアップグレードがすでにサポートされていない場合は除きます)。 以下に例を示します。
if [ abort-upgrade = "$1" ] && dpkg --compare-versions "$2" lt 1.0-2; then dpkg-divert --package smailwrapper --remove --rename \ --divert /usr/sbin/smail.real /usr/sbin/smail fi
ここでは、1.0-2 が退避バージョンの追加がおこなわれたバージョンです。 アップグレードの際の postrm ではいずれの退避バージョンも削除してはいけません。 これは、直後に再度追加するために退避バージョンを削除する理由がないこと、および古いパッケージの postrm が展開後に走った場合、退避バージョンの削除は失敗するためです。
システムの運用に必須となるファイルに、退避バージョンを用いようとはしないで下さい。
dpkg-divert
の使用時には、ファイルの退避が行われた後に
dpkg
が新しいバージョンをインストールするまでの間、そのファイルが存在しないタイミングがあるのです。
conffile に待避バージョンを用いようとはしないでください。
このような指定を行った場合、dpkg
は適切に処理できません。
[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]
Debian ポリシーマニュアル
バージョン 3.9.5.0, 2014-07-03The Debian Policy Mailing List