YUMを使用していくつかのパッケージをインストールしようとしています。私が使用するコマンドは次のとおりです。
sudo yum repo-pkgs [my repo] install
これにより、次のような結果が生成されます。
Error: Package: [package name] ([my repo])
Requires: jdk >= 2000:1.8.0
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
このエラーは、JDKがすでにインストールされており、/user/java/jdk1.8.0_25
エラーメッセージによれば十分に新しいバージョンである必要があるため、混乱しています。
YUMにJDKを認識させるために必要なことはありますか?
どんな提案でも歓迎します。ありがとうございます。
答え1
@Arthurが言ったように、問題はシステム上のものとRPMDB上のものの間の接続が失われたことです。 RPMDBにはインストールされていることがわかっているJDKがありますが、そのJDKはインストールするパッケージのパッケージの依存関係を満たしていない可能性があります。実際にはそうではありません。それ以外の場合、特定のエラーメッセージは表示されません。ここでどこに行くかは、解決策をどれだけ「きれいに」(「すばやく」と反対)望むかによって異なります。
@Arthurが提案したようにダミーパッケージを作成できます。このパッケージはエポック2000以上に依存し、jdk
それを提供する必要があります。jdk 1.8.0
ペイロードがあってはなりません。 @Arthurの提案が失敗するシンボリックリンクもあってはなりません。
以下を使用して--nodeps
パッケージをインストールすることもできます。
最後に議論した結果によると、このパッケージをビルドしてリポジトリに入れる人はまさにあなたなので仕様ファイルの Requires: 行を変更することができます。
答え2
実際にはJDKがありますが、存在しません。RPMデータベース、yumなどの自動パッケージマネージャは、どのパッケージがインストールされているかを特定し、そのバージョンを取得するために使用されます。
最善の解決策は、おそらく実行してsudo yum install jdk
yumとrpmを含むバージョンを取得することです。
提案されているようにそのオプションを追加することを検討することもできますが、--skip-broken
PSの2番目のポイントと同じ問題があります。
これらのrpm -Va
タスクを実行すると、RPMが見つからないパッケージとファイルを見つけるのに役立ちます。 RPMを介してJavaをインストールしたと思われる場合は、お試しください。
PS:最初はdpkgユーザーのようにダミーパッケージを作成することを検討しましたが、次のようになりました。
- RPMでパッケージを作成するのは非常に長い仕様を書く必要があるため、非常に複雑です。 RPMはまた、ファイルリストを使用してライブラリの依存関係を見つけるため、かなり長いファイルリストを提供する必要があります。
考えられる解決策:多数のシェルを自動的に%files
作成します。find
- 仮想パッケージを作成してインストールしても、パッケージがハードコードされたロジックを使用してJavaがインストールしたjdkパッケージに移動すると、Javaが見つからない可能性があります。 (ほとんどのパッケージ作成者はこのような奇妙なディレクトリを使用せず、
/user
運が悪く、何も知らない人が作成したパッケージを見つけることができる場合java_home
...)
考えられる解決策:シンボリックリンク。
修正する:
JDKのパッケージ名はですjdk1.8.0_25
。すでにRPMを使用してパッケージをインストールしているので、ダミーパッケージを作成する方が簡単でクリーンになります。しかし、それでもやや汚れた方法です。
必要なパッケージバージョンの仕様を作成し、jdk
それを依存関係にしますjdk1.8.0_25
。次に、%files
プログラムが見つかるようにブロックにいくつかのシンボリックリンクを追加します。最後に、シンボリックリンクが実際に作成され実行されますrpmbuild -bb dummy_jdk.spec
。