Java 8以降のJavaバージョンが必要なRPMをパッケージ化しようとしています。 Javaがインストールされていない場合、またはJRE / JDK for 8がインストールされている場合、RPMは正常に機能します。ところで、OpenJDK 11をインストールすると、RPMのインストール時にJava 8を再インストールしようとします。
私のパッケージと互換性のあるJava 11インストールがすでにあることをRPMで検出するにはどうすればよいですか?すでにJava 11がある場合は、パッケージからJava 8をインストールしたくありません。
私はRed Hat 7.5を実行していますが、CentOS7でもこれが起こります。単純なhello worldパッケージを使用してこの問題を再現できました。
Name: hello-world
Version: 1
Release: 1
Summary: Most simple RPM package
License: FIXME
Requires: jre-headless >= 1.8
%description
%prep
%build
cat > hello-world.sh <<EOF
#!/usr/bin/bash
echo Hello world
EOF
%install
mkdir -p %{buildroot}/usr/bin/
install -m 755 hello-world.sh %{buildroot}/usr/bin/hello-world.sh
%files
/usr/bin/hello-world.sh
%changelog
建設する:
rpmdev-setuptree
rpmbuild -ba hello-world.spec
次にOpenJDK11をインストールします。sudo yum -y install java-11-openjdk
最後に、私のパッケージをテストすると、次のrpm -i --test <FILE>.rpm
ものが提供されます。
error: Failed dependencies:
jre-headless >= 1.8 is needed by hello-world-1-1.x86_64
sudo yum localinstall <FILE>.rpm
また、Java8のインストールを試みました。
sudo yum deplist <FILE>.rpm
提案はjava-11-openjdk
私に必要なものを提供しなければなりません。
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.heanet.ie
* extras: ftp.heanet.ie
* updates: ftp.heanet.ie
package: hello-world.x86_64 1-1
dependency: /usr/bin/bash
provider: bash.x86_64 4.2.46-31.el7
dependency: jre-headless >= 1.8
provider: java-11-openjdk-headless.x86_64 1:11.0.ea.28-7.el7
provider: java-11-openjdk-headless.i686 1:11.0.ea.28-7.el7
provider: java-1.8.0-openjdk-headless.x86_64 1:1.8.0.201.b09-2.el7_6
provider: java-1.8.0-openjdk-headless.i686 1:1.8.0.191.b12-1.el7_6
provider: java-1.7.0-openjdk-headless.x86_64 1:1.7.0.211-2.6.17.1.el7_6
(Java 7がJava 8のプロバイダである理由はわかりません)。
jre
要件を設定しようとしましたが、java
運がありません。特にプレインストールも試しましたが、java-11-openjdk-headless
違いはありませんでした。
このようだブール依存関係この問題を解決することもできますが、残念ながら、エンドユーザーが十分に新しいバージョンをインストールしたことを保証することはできませんrpm
。
私が何を間違っているのかわかりません。
Java 11で依存関係を満たすJava 8以降を要求するようにRPMパッケージを設定するにはどうすればよいですか?
答え1
現在、RHEL 7および8のOpenJDK 11パッケージは、バージョン管理されていないJavaパッケージを提供していませんjava-headless
。jre-headless
(私が理解しているように、OpenJDK 11がOpenJDK 8を置き換え、すべての場合に互換性を維持するという保証はありません。)これは、OpenJDK 11がシステムJDKになると変わります。このエラー変更通知を受け取ります。
jre-headless
残念ながら、現在のRPMパッケージがOpenJDK 11に依存し、ブール依存関係(および効果的にRHEL 8)を使用せずにOpenJDK 11を介してのみインストールできるようにする方法はないと思います。一般的な回避策は、パッケージ要件の代わりにファイル要件を使用することです。しかし、信頼できる共通ファイルを提供java-8-openjdk-headless
せずにjava-11-openjdk-headless
ファイル要件のバージョンを管理できないと思います。
jre-headless
あなたのクエリはOpenJDK 11パッケージがこの要件を満たしていることを示唆していますが、これは初期アクセスパッケージがデフォルトパッケージを誤って提供するためです。
yum whatprovides jre-headless
OpenJDK 8 および OpenJDK 11 パッケージが一覧表示されますが、後者はインストールできなくなります。