この RPM が「アンインストール可能」なのはなぜですか?

この RPM が「アンインストール可能」なのはなぜですか?

Zypper に何かをインストールするように指示すると、次のようなメッセージが表示されることがあります。

Problem: foo-tools requires foo-lib, but this requirement cannot be provided

Problem: foo-tools requires foo-lib, but this requirement cannot be provided
  uninstallable providers: foo-lib.7.31.13.x86_64
Solution 1: do not install foo-tools
Solution 2: break foo-tools by ignoring some of its dependencies

なぜZypperは、私が意図的にこの理由で提供したRPMを「インストールできないプロバイダ」だと判断するのでしょうか?このメッセージは何を意味しているのでしょうか?平均? RPM ファイルが読み取れませんか? アーキテクチャが間違っていますか? バージョンが間違っていますか?何が怒ってるんですか??

答え1

それ自体に満たされていない依存関係があることが判明しましたfoo-lib。これらを追加すると問題は解決しました。

しかし、疑問は...なぜジッパーは言うそれが問題だったのでしょうか? 通常、依存関係の問題が発生した場合、見つからなかった特定のパッケージについて通知されます。なぜこのわかりにくい「インストールできないプロバイダー」というメッセージが表示されるのでしょうか?

答え2

RPM は、インストールされたファイル (バイナリ実行可能ファイルや共有ライブラリなど) のデータベースをシステム内に保持します。

foo-tools などの一部のソフトウェアは、正常に機能するために他のソフトウェア (foo-lib など) を必要とします。この依存関係情報は、RPM パッケージャーによって決定されます。

foo-lib と foo-tools が RPM ファイルとして利用可能であるが、どちらもインストールされていない場合は、両方 (すべて) を RPM のコマンド ライン (または zypper と同等の方法) に提供して、すべての依存関係が満たされていることを RPM に認識させることができます。別のオプションは、前提条件パッケージを最初にインストールすることです。

foo-lib に独自の依存関係がある場合は、それらも満たされる必要があります。そうでない場合、foo-lib は foo-lib のインストール可能なプロバイダーではありません。

非推奨: 他の手段で前提条件が満たされていることを確認してください (必要なものを手動で、おそらくソースからインストールし、Zypper に依存関係を無視させます)。これを実行すると後で問題が発生するため、実行しないでください。

関連情報