RPMパッケージを設定するにはJava 8以降が必要であり、その依存関係はJava 11で満たすことができます。

RPMパッケージを設定するにはJava 8以降が必要であり、その依存関係はJava 11で満たすことができます。

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-headlessjre-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 パッケージが一覧表示されますが、後者はインストールできなくなります。

関連情報