
Debianパッケージによるとメンテナースクリプトのドキュメント、プレインストール スクリプトは、install
またはupgrade
最初の引数のいずれかを使用して呼び出すことができます。
スクリプト
preinst
は次の方法で呼び出すことができます。
new-preinst
インストールnew-preinst
インストール旧バージョン 新バージョンnew-preinst
アップグレード旧バージョン 新バージョン
install old-version new-version
との違いは何ですかupgrade old-version new-version
? 最初の形式 ( のみ) は明らかなようですが、古いバージョン番号と新しいバージョン番号も指定されている と の違いinstall
がわかりません。install
upgrade
答え1
これについては、「詳細」セクション:
- パッケージがすでに完全にインストールされている場合は、古いバージョンと新しいバージョンとともに
preinst
が呼び出されます。upgrade
- パッケージが以前にインストールされていて、設定ファイルがまだ残っている場合(「Config-Files」状態の場合)、つまり
rc
これは の出力では として表示されますdpkg -l
)、が と古いバージョンおよび新しいバージョンpreinst
で呼び出されます。install
- パッケージが新しくインストールされる場合、または以前に削除された場合は、バージョン情報なし
preinst
で が呼び出されます。install
preinst
は解凍フェーズの前に実行されるため、upgrade
パッケージの内容の以前のバージョンが利用可能であることを示します。一方、はinstall
パッケージの内容のバージョンが存在しないことを示します (構成ファイルを除く)。また、バージョン情報が提供されている場合は、処理する必要がある構成ファイルが存在する可能性があることを示します。
upgrade
との違いinstall
が重要なシナリオは多くありませんが、思い浮かぶのはデータのエクスポートを伴うアップグレードです。たとえば、upgrade
モードでは、slapd
はpreinst
データベースをエクスポートするinstall
;適切なツールが存在しないため、モードではそれを実行できません。
答え2
考慮する:
- パッケージ A、バージョン x をインストールします。
- パッケージ A を削除しますが、パージは行わないため、conffiles、ユーザー、グループなどは残ります。
- パッケージ A、バージョン y をインストールします。
厳密に言えば、アップグレードではなくインストールだけであるにもかかわらず、メンテナ スクリプトはこれらの conffiles、ユーザー、グループなどを処理する必要があります。これは、次の 2 番目のフローチャートで確認できます。「以前削除されたが、削除されていないパッケージをインストールする」