Debian JP Project

(for vocal browsers: toc, main)

Google
WWW 全体 www.debian.or.jp 検索


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

The Debian Policy Mailing List