パッケージの依存関係は、あるパッケージのインストールまたは動作に、別のパッケージ、機能、互換バージョンが必要であることを示します。リポジトリを認識するパッケージマネージャーは、このメタデータを使い、各アーカイブを孤立して扱うのではなく、整合した変更の組を計算します。
パッケージ · レッスン 4
パッケージの依存関係
パッケージメタデータが必要な機能、バージョン、競合、共有ライブラリの関係を表す仕組みを学びます。
依存関係の種類
パッケージメタデータは、単純な必須パッケージ名以上の関係を表せます。ディストリビューション形式によっては、次のものが含まれます。
- 必須の依存関係
- 最小、最大、または厳密なバージョン制約
- 複数の提供元のどれか一つで要件を満たせる代替関係
- より弱い意味を持つ推奨または提案
- 競合、破壊、置換の関係
- 複数パッケージが提供できる仮想機能
ソルバーはこれらの規則を使い、設定済みリポジトリ、アーキテクチャ、インストール済み状態と互換性のあるパッケージバージョン群を選びます。解決策としてアップグレード、削除、提供元の選択が必要になる場合があるため、承認前に提案されたトランザクションを確認してください。
リポジトリを認識する依存関係ソルバーが生成しようとするものは何ですか?
依存関係としての共有ライブラリ
共有ライブラリには、複数のプログラムが実行時にマッピングできるコンパイル済みコードが含まれます。共有によって実装の重複を減らし、ディストリビューションが共通ライブラリを独立して更新できますが、プログラムは互換性のあるアプリケーションバイナリインターフェース、つまり ABI に依存します。
ELF を使う Linux システムでは、実行ファイルが SONAME などの必要なライブラリ名を記録できます。プログラム起動時、動的リンカーが一致するインストール済みライブラリを探します。通常、パッケージメタデータは、この要件を互換ライブラリを提供するパッケージまたは機能への依存として表します。
共有ライブラリとは何ですか?
バージョンと ABI の互換性
似た名前のライブラリファイルがあるだけでは不十分です。必要な ABI、アーキテクチャ、シンボル、場合によっては最小バージョンが一致しなければなりません。ファイル名が正しく見えても、ディストリビューションのライブラリを手動で置き換えると、依存するすべてのプログラムを壊す可能性があります。
パッケージ保守者はライブラリの関係を符号化し、ABI が変わるときの移行を調整します。ネイティブライブラリはパッケージマネージャーの管理下に置き、競合するバージョンが必要なソフトウェアには、対応する並行インストール、コンテナ、環境、ビルドの仕組みを使ってください。
似た名前のライブラリファイルが存在しても、プログラムが失敗する場合があるのはなぜですか?
壊れた依存関係の状態
依存関係の問題は、リポジトリの混在、中断された操作、手動インストールしたアーカイブ、保留されたバージョン、削除されたファイル、互換性のない第三者ソフトウェアによって発生します。パッケージデータベースのファイルを削除したり、やみくもに強制インストールしたりして対処してはいけません。
まずパッケージマネージャーの診断を読み、信頼できるリポジトリのメタデータだけを更新し、保留または固定されたバージョンを調べ、提案された修復内容を確認します。低レベルのパッケージインストーラーは依存関係をすべて取得せずにアーカイブを展開できるため、通常のインストールでは完全なトランザクションを解決する高レベルのリポジトリーツールの方が一般に安全です。
低レベルのアーカイブツールで一つのローカルパッケージをインストールする際の一般的な制限は何ですか?
Linux で共有ライブラリを管理するで実行時の関係を調べ、RPM でパッケージを管理するのパッケージメタデータと比較してください。
レッスン完了
パッケージの依存関係 を完了しました
パッケージの依存関係解決を説明できるようになりました。
必須、代替、バージョン付き、競合する関係を認識する。
共有ライブラリパッケージを実行時の ABI 要件へ関連付ける。
ファイル名より、アーキテクチャとインターフェースの互換性を強い証拠として扱う。
修復を適用する前に、パッケージマネージャーの完全なトランザクションを確認する。