パッケージメンテナーの事前インストールスクリプト `install` と `upgrade`

パッケージメンテナーの事前インストールスクリプト `install` と `upgrade`

Debianパッケージによるとメンテナースクリプトのドキュメント、プレインストール スクリプトは、installまたはupgrade最初の引数のいずれかを使用して呼び出すことができます。

スクリプトpreinstは次の方法で呼び出すことができます。

  • new-preinstインストール
  • new-preinstインストール旧バージョン 新バージョン
  • new-preinstアップグレード旧バージョン 新バージョン

install old-version new-versionとの違いは何ですかupgrade old-version new-version? 最初の形式 ( のみ) は明らかなようですが、古いバージョン番号と新しいバージョン番号も指定されている と の違いinstallがわかりません。installupgrade

答え1

これについては、「詳細」セクション:

  • パッケージがすでに完全にインストールされている場合は、古いバージョンと新しいバージョンとともにpreinstが呼び出されます。upgrade
  • パッケージが以前にインストールされていて、設定ファイルがまだ残っている場合(「Config-Files」状態の場合)、つまりrcこれは の出力では として表示されますdpkg -l)、が と古いバージョンおよび新しいバージョンpreinstで呼び出されます。install
  • パッケージが新しくインストールされる場合、または以前に削除された場合は、バージョン情報なしpreinstで が呼び出されます。install

preinstは解凍フェーズの前に実行されるため、upgradeパッケージの内容の以前のバージョンが利用可能であることを示します。一方、はinstallパッケージの内容のバージョンが存在しないことを示します (構成ファイルを除く)。また、バージョン情報が提供されている場合は、処理する必要がある構成ファイルが存在する可能性があることを示します。

upgradeとの違いinstallが重要なシナリオは多くありませんが、思い浮かぶのはデータのエクスポートを伴うアップグレードです。たとえば、upgradeモードでは、slapdpreinstデータベースをエクスポートするinstall;適切なツールが存在しないため、モードではそれを実行できません。

答え2

考慮する:

  1. パッケージ A、バージョン x をインストールします。
  2. パッケージ A を削除しますが、パージは行わないため、conffiles、ユーザー、グループなどは残ります。
  3. パッケージ A、バージョン y をインストールします。

厳密に言えば、アップグレードではなくインストールだけであるにもかかわらず、メンテナ スクリプトはこれらの conffiles、ユーザー、グループなどを処理する必要があります。これは、次の 2 番目のフローチャートで確認できます。「以前削除されたが、削除されていないパッケージをインストールする」

関連情報