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 패키지가 나열되지만 후자는 더 이상 설치할 수 없습니다.