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 に依存関係を無視させます)。これを実行すると後で問題が発生するため、実行しないでください。