web-dev-qa-db-ja.com

依存関係と事前依存関係の違いは何ですか?

「依存」と「事前依存」の意味と、Ubuntuに何かをインストールするときのこれら2つのパッケージ要件の違いは何ですか?

12
Bruno Pereira

このリンクから: https://www.debian.org/doc/debian-policy/#document-ch-relationships

5種類の依存関係があります。

5つの依存関係フィールドの意味は次のとおりです。

依存

  • これは絶対的な依存関係を宣言します。パッケージは、「依存」フィールドにリストされているすべてのパッケージが正しく構成されていない限り構成されません。依存パッケージがかなりの量の機能を提供するために依存パッケージが必要な場合、依存フィールドを使用する必要があります。また、postinstまたはprermスクリプトで実行するために依存パッケージをアンパックまたは構成する必要がある場合は、Dependsフィールドも使用する必要があります。 postinst configureの場合、依存パッケージが最初に解凍されて構成されます。

  • Prermまたは他のpostinstアクションの場合、パッケージの依存関係は通常少なくともアンパックされますが、依存関係の以前のアップグレードが失敗した場合にのみ「ハーフインストール」されます。最後に、postrmスクリプトがパッケージの削除後に完全にクリーンアップするために依存パッケージが必要な場合は、Dependsフィールドを使用する必要があります。 postrmの実行時にパッケージの依存関係が利用できるという保証はありませんが、パッケージが依存関係を宣言している場合(特にpostrm removeの場合)、依存パッケージが利用できる可能性が高くなります。 postrmスクリプトは、依存関係が利用できない場合、依存関係を必要とするアクションを適切にスキップする必要があります。

推奨事項

  • これは、絶対ではなく強い依存関係を宣言します。 「推奨」フィールドには、通常とは異なるインストールでこのパッケージと一緒に見つかるパッケージがリストされているはずです。

提案

  • これは、1つのパッケージが他の1つ以上のパッケージよりも有用であることを宣言するために使用されます。このフィールドを使用すると、パッケージシステムとユーザーに、リストされたパッケージがこのパッケージに関連し、おそらくその有用性を高めることができるが、パッケージなしでこのパッケージをインストールすることは完全に合理的であることがわかります。

強化

  • このフィールドはSuggestsに似ていますが、反対方向に機能します。パッケージが別のパッケージの機能を強化できることを宣言するために使用されます。

事前依存

  • このフィールドはDependsに似ていますが、事前依存関係を宣言するパッケージのインストールを開始する前に、dpkgが指定されたパッケージのインストールを強制することを強制します、これは次のように機能します。事前依存関係を宣言するパッケージがアンパックされる直前に、依存パッケージが完全に構成されている場合、または依存パッケージが過去のある時点で正しく構成されていた(その後、削除または部分的に削除されなかった)場合にのみ、アンパックまたは「Half-Configured」状態になります。

  • この場合、以前に構成されたバージョンと現在アンパックされているバージョン、または「半分構成された」バージョンの両方が、Pre-Dependsフィールドのバージョン節を満たす必要があります。事前依存関係を宣言するパッケージが構成されようとしているとき、事前依存関係は通常の依存関係として扱われます。依存パッケージが正しく構成されている場合にのみ、満足と見なされます。ただし、Dependsとは異なり、Pre-Dependsでは循環依存関係を解除できません。 Pre-Dependsを尊重しようとしているときに循環依存関係が検出されると、インストールは中止されます。

  • Preinstスクリプトが名前付きパッケージに依存する場合、Pre-Dependsも必要です。可能であれば、この状況を回避するのが最善です。 Pre-Dependsは控えめに使用する必要があります。できれば、アップグレードまたはインストールが早すぎると、進行中のアップグレードを続行するシステムの機能が妨げられるパッケージでのみ使用してください。

より小さなバージョン:

  • dependspre-dependsの両方が、インストールする前にパッケージに必要な依存関係について言及していますただし、pre-dependsは、依存関係を必要とするパッケージを開始する前に、依存関係パッケージのインストールと構成を強制します。 dpkgは、すべての事前依存パッケージが処理されるまでメインパッケージを解凍しません。 dependを使用すると、依存関係パッケージとメインパッケージの順序は重要ではありません。 pre-dependsでは、これと、pre-dependsパッケージが構成およびインストールされているかどうかの検証も考慮されます。これがないと、メインパッケージは展開、構成、またはインストールされません。メインパッケージを使用するプロセスを開始する前に、依存関係をインストールする必要があります。そうでない場合は、先に進む前にまずダウンロード/設定/インストールする必要があります。 pre-dependsは通常、パッケージの安定性が重要で、システムまたはプログラムに非常に悪い影響を与えない場合に使用されますが、上記のリンクでも言及されているいくつかの規範によりこのケースは回避されます。
20
Luis Alvarado

「依存」という用語は、「依存」および「事前依存」関係(および場合によっては他の弱い関係)を包含するために広く使用されるか、「依存」の同義語として狭く使用されます。

「Depends」と「Pre-Depends」パッケージの関係の違いは、Xdependson Yの場合、Xを構成する前にYを完全に構成する必要があることです。 。 (構成とは、ファイルが適切な場所に解凍されると(つまり、「インストール」されると)、パッケージが提供するソフトウェアを実際に使用できるように、他の必要な変更が行われるインストール手順です。たとえば、 、HTTPサーバーの設定には、適切な権限を持つwwwユーザーと適切な権限を持つ/var/wwwディレクトリが存在することを確認する必要があります。これに対して、Xpre-dependsYの場合、Yをインストールし、(通常)完全に構成してからXを偶数にインストールする必要があります

詳細については Debianポリシーマニュアルのセクション7.2 をご覧ください。ここで最も関連性の高い2つのセクションを引用しますが、そのセクション(およびより一般的な第7章)には、依存関係がどのように機能するかを明らかにするのに役立つ情報があります。


Depends

これは絶対的な依存関係を宣言します。パッケージは、そのDependsフィールドにリストされているすべてのパッケージが正しく構成されていなければ、構成されません(上記のような循環依存関係がない限り)。

依存パッケージが大量の機能を提供するために依存パッケージが必要な場合は、Dependsフィールドを使用する必要があります。

Dependsフィールドは、postinstまたはprermスクリプトで実行するために依存パッケージをアンパックまたは構成する必要がある場合にも使用する必要があります。 postinst configureの場合、依存パッケージが最初に解凍されて構成されます。 (両方のパッケージが依存関係ループに関与している場合、これは期待どおりに動作しない可能性があります。数段落前の説明を参照してください。)prermまたは他のpostinstアクションの場合依存関係の以前のアップグレードが失敗した場合にのみ、「ハーフインストール」されます。

最後に、パッケージを削除した後に完全にクリーンアップするためにDependsスクリプトが依存パッケージを必要とする場合は、postrmフィールドを使用する必要があります。 postrmの実行時にパッケージの依存関係が使用できるという保証はありませんが、パッケージが依存関係を宣言する場合(特にpostrm removeの場合)、依存パッケージが使用される可能性が高くなります。 postrmスクリプトは、依存関係が利用できない場合、依存関係を必要とするアクションを適切にスキップする必要があります。


Pre-Depends

このフィールドはDependsに似ていますが、次のように、事前依存関係を宣言するパッケージのインストールを開始する前に指定されたパッケージのインストールをdpkgに強制することを除きます。

事前依存関係を宣言するパッケージがunpackedになりそうな場合、依存パッケージが完全に構成されている場合、事前依存関係は満たされますまたは、依存パッケージがアンパックされているか、「Half-Configured」状態にある場合でも、過去のある時点で正しく構成されていた場合(および削除されていないか部分的に削除されていない場合) )。この場合、以前に構成されたバージョンと現在アンパックされているバージョン、または「半分構成された」バージョンの両方が、Pre-Dependsフィールドのバージョン句を満たす必要があります。

事前依存関係を宣言するパッケージがconfiguredになりそうな場合、事前依存関係は通常のDependsとして扱われます。依存パッケージが正しく構成されている場合にのみ、満足と見なされます。ただし、Dependsとは異なり、Pre-Dependsは循環依存関係の解除を許可しません。 Pre-Dependsを尊重しようとしているときに循環依存関係が発生した場合、インストールは中止されます。

preinstスクリプトが名前付きパッケージに依存する場合は、Pre-Dependsも必要です。可能であれば、この状況を回避するのが最善です。

Pre-Dependsは控えめに使用する必要があります。できれば、アップグレードまたはインストールが早すぎると、進行中のアップグレードを続行するシステムの機能が妨げられるパッケージでのみ使用してください。

Pre-Dependsメーリングリストで議論される前に、パッケージのdebian-develエントリを指定してはいけません。 依存関係、セクション3.5 を参照してください。

3
Eliah Kagan