Bug 1831665
| Summary: | java-1.8.0-openjdk conflicts with itself when installing multiple versions (using installonlypkgs) | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 8 | Reporter: | jcastran | |
| Component: | java-1.8.0-openjdk | Assignee: | jiri vanek <jvanek> | |
| Status: | CLOSED ERRATA | QA Contact: | OpenJDK QA <java-qa> | |
| Severity: | high | Docs Contact: | ||
| Priority: | unspecified | |||
| Version: | 8.2 | CC: | ahughes, ayadav, jandrlik, jvanek, kbost, kwalker, zzambers | |
| Target Milestone: | rc | Keywords: | ZStream | |
| Target Release: | 8.0 | Flags: | pm-rhel:
mirror+
|
|
| Hardware: | All | |||
| OS: | Unspecified | |||
| Whiteboard: | ||||
| Fixed In Version: | java-1.8.0-openjdk-1.8.0.262.b10-3.el8 | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1861051 1861052 1861053 (view as bug list) | Environment: | ||
| Last Closed: | 2020-11-04 02:43:27 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1861051, 1861052, 1861053 | |||
|
Description
jcastran
2020-05-05 13:01:47 UTC
hi! This is probably first time in update history that the licence files got changed. Because while the files are identical, they can be shared like they were. jcastran we recently released new JDK. Does it occured again? Yes. It still provides the same file and so we get the same conflict. [root@r8 ~]# yum provides /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README | grep java-1.8.0-openjdk-headless-1 java-1.8.0-openjdk-headless-1:1.8.0.201.b09-2.el8.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.212.b04-1.el8_0.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.222.b10-0.el8_0.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.222.b10-1.el8.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.232.b09-0.el8_0.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.232.b09-2.el8_1.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.242.b08-0.el8_1.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.242.b08-4.el8.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.252.b09-2.el8_1.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 : OpenJDK Headless Runtime Environment 8 I already have a version installed. Every version provides it so if the latest had the fix (didn't own /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README) it should work with every previous version. [root@r8 ~]# yum --setopt=installonlypkgs=java-1.8.0-openjdk,java-1.8.0-openjdk-headless,java-1.8.0-openjdk-devel install java-1.8.0-openjdk-1.8.0.262.b10-0.el8_2 file /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README from install of java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 conflicts with file from package java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 Hmm. If you install only java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 and java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 ? Yes. They both provide the same file. [root@r8 ~]# yum provides /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README | grep java-1.8.0-openjdk-headless-1 <snip> java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 : OpenJDK Headless Runtime Environment 8 Error: Transaction test error: file /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README conflicts between attempted installs of java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 and java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 Sure. but the file itself should not meter, while it is same. And it is same in u252 and u262. There is something very wrong, maybe rpm itself got updated somewhere before 2020-05-05? I am providing the output from these installation attempts. As far as I remember, this is how it's always worked. 2 rpms should not provide the same file. With RHEL 7, they were in version specific directories. With RHEL 8, its not. [root@r7 ~]# repoquery -l java-1.8.0-openjdk-headless | grep THIRD_PARTY_README /usr/share/licenses/java-1.8.0-openjdk-headless-1.8.0.262.b10/THIRD_PARTY_README [root@r8 ~]# repoquery -l java-1.8.0-openjdk-headless | grep THIRD_PARTY /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README We can see the files are different between the versions with the size alone. I can extract them to show you whats different if we need to. # rpm -qlvp java-1.8.0-openjdk-headless-1.8.0.2*| grep README -r--r--r-- 1 root root 153250 Apr 19 17:26 /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README -r--r--r-- 1 root root 152996 Jul 12 17:33 /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README ~~~~~~~~~~~~~~~~ This occurs on the oldest and newest version of rpm. All of my results so far are with the newest version. Downgrading to the oldest version of rpm, does not change the result. Downgrading: dnf noarch 4.2.7-7.el8_1 rhel-8-for-x86_64-baseos-rpms 490 k dnf-automatic noarch 4.2.7-7.el8_1 rhel-8-for-x86_64-baseos-rpms 136 k dnf-data noarch 4.2.7-7.el8_1 rhel-8-for-x86_64-baseos-rpms 139 k dnf-plugins-core noarch 4.0.8-3.el8 rhel-8-for-x86_64-baseos-rpms 62 k libdnf x86_64 0.35.1-9.el8_1 rhel-8-for-x86_64-baseos-rpms 606 k python3-dnf noarch 4.2.7-7.el8_1 rhel-8-for-x86_64-baseos-rpms 506 k python3-dnf-plugin-versionlock noarch 4.0.8-3.el8 rhel-8-for-x86_64-baseos-rpms 55 k python3-dnf-plugins-core noarch 4.0.8-3.el8 rhel-8-for-x86_64-baseos-rpms 193 k python3-hawkey x86_64 0.35.1-9.el8_1 rhel-8-for-x86_64-baseos-rpms 96 k python3-libdnf x86_64 0.35.1-9.el8_1 rhel-8-for-x86_64-baseos-rpms 689 k python3-rpm x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 147 k rpm x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 536 k rpm-build x86_64 4.14.2-9.el8 rhel-8-for-x86_64-appstream-rpms 166 k rpm-build-libs x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 149 k rpm-libs x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 333 k rpm-plugin-selinux x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 71 k rpm-plugin-systemd-inhibit x86_64 4.14.2-9.el8 rhel-8-for-x86_64-baseos-rpms 72 k yum noarch 4.2.7-7.el8_1 rhel-8-for-x86_64-baseos-rpms 181 k yum-utils noarch 4.0.8-3.el8 rhel-8-for-x86_64-baseos-rpms 64 k [root@r8 ~]# yum --setopt=installonlypkgs=java-1.8.0-openjdk,java-1.8.0-openjdk-headless,java-1.8.0-openjdk-devel localinstall java-1.8.0-openjdk-headless-1.8.0.2*.rpm Installing: java-1.8.0-openjdk-headless x86_64 1:1.8.0.252.b09-3.el8_2 @commandline 33 M java-1.8.0-openjdk-headless x86_64 1:1.8.0.262.b10-0.el8_2 @commandline 34 M Error: Transaction check error: file /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README conflicts between attempted installs of java-1.8.0-openjdk-headless-1:1.8.0.262.b10-0.el8_2.x86_64 and java-1.8.0-openjdk-headless-1:1.8.0.252.b09-3.el8_2.x86_64 2 packages provide a different file, with the same name in the same location and they conflict with each other. This is expected rpm behaviour. Hmm. Looking to our specfiles:
both:
%global jdkimage j2sdk-image
el7:
%global origin openjdk
%global top_level_dir_name %{origin}
%global buildoutputdir() %{expand:%{top_level_dir_name}/build/jdk8.build%1}
%license %{buildoutputdir %%1}/images/%{jdkimage}/jre/THIRD_PARTY_README
=> openjdk/images/j2sdk-image/jre/THIRD_PARTY_README (if %1 is nil, which it is i our case)
el8:
%define buildoutputdir() %{expand:build/jdk8.build%{?1}}
%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/THIRD_PARTY_README
=> %license build/jdk8.build/images/j2sdk-image/jre/THIRD_PARTY_README (if %1 is nil, which it is i our case)
So unless license macro went go wild a bit between el7 and el8, and chaged from NVR to N only (which I doubt a bit),
the only suspicious element is openjdk x build, whereboth claim to be %buildoutputdir, in case of el8 its path to %build is quite more tricky, but being it followed by images, it is right.
el7"
rpm --version
RPM version 4.11.3
el8:
rpm --version
RPM version 4.14.3
%license is hardcoded macro
@Jiri,
It's that the license file itself is different:
$ rpmdiff java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el8.x86_64.rpm java-1.8.0-openjdk-headless-1.8.0.212.b04-1.el8_0.x86_64.rpm | grep THIRD_PARTY
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
If the files are _not_ different, then you can have multiple RPMs claim the same file in an installonly configuration.
$ ls -1 java*
java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el8.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.212.b04-1.el8_0.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.222.b10-0.el8_0.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.222.b10-1.el8.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el8_0.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.232.b09-2.el8_1.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.252.b09-3.el8_2.x86_64.rpm
java-1.8.0-openjdk-headless-1.8.0.262.b10-0.el8_2.x86_64.rpm
$ PREV=java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el8.x86_64.rpm; for CUR in $(ls java*); do if [[ "$CUR" == "$PREV" ]]; then continue; fi; echo $PREV vs $CUR; rpmdiff $PREV $CUR | grep THIRD; PREV=$CUR; echo; done
With the above:
java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el8.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.212.b04-1.el8_0.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.212.b04-1.el8_0.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.222.b10-0.el8_0.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.222.b10-0.el8_0.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.222.b10-1.el8.x86_64.rpm
..........T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.222.b10-1.el8.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el8_0.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el8_0.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.232.b09-2.el8_1.x86_64.rpm
..........T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.232.b09-2.el8_1.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm
..........T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.252.b09-3.el8_2.x86_64.rpm
..........T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.252.b09-3.el8_2.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.262.b10-0.el8_2.x86_64.rpm
S.5.......T /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
If you install packages that do not differ (java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm) there is no conflict. Note, I am including "--nodeps" so that I don't have to install the full stack, but the outcome is the same:
# rpm -ivh java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm --nodeps
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:java-1.8.0-openjdk-headless-1:1.8################################# [ 50%]
2:java-1.8.0-openjdk-headless-1:1.8################################# [100%]
# rpm -q java-1.8.0-openjdk-headless
java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64
# rpm -qf /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64
You run into difficulties when you start with a dissimilar file (java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64.rpm vs java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm):
# rpm -ivh java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm --nodeps
Verifying... ################################# [100%]
Preparing... ################################# [100%]
file /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README from install of java-1.8.0-openjdk-headless-1:1.8.0.252.b09-2.el8_1.x86_64 conflicts with file from package java-1.8.0-openjdk-headless-1:1.8.0.242.b08-4.el8.x86_64
file /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README from install of java-1.8.0-openjdk-headless-1:1.8.0.252.b09-2.el8_1.x86_64 conflicts with file from package java-1.8.0-openjdk-headless-1:1.8.0.242.b08-0.el8_1.x86_64
You can't install both of these because the file payload is different.
# diff --suppress-common-lines -up java-1.8.0-openjdk-headless-*-unpack/usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README | head
--- java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64.rpm-unpack/usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README 2020-01-15 20:46:35.000000000 -0500
+++ java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el8_1.x86_64.rpm-unpack/usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README 2020-04-14 14:31:02.000000000 -0400
@@ -1712,10 +1712,60 @@ which may be included with JRE 8, JDK 8,
--- begin of LICENSE ---
+ Mesa 3-D Graphics Library v19.2.1
+
+ Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
+
Note, this behaviour is per-design. If you remove one of the packages, which provides the singular file, it will not remove the underlying file:
# rpm -qf /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64
# ll /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
-r--r--r--. 1 root root 148650 Mar 27 01:21 /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
# rpm -e java-1.8.0-openjdk-headless-1.8.0.242.b08-4.el8.x86_64
# ll /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
-r--r--r--. 1 root root 148650 Mar 27 01:21 /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
# rpm -qf /usr/share/licenses/java-1.8.0-openjdk-headless/THIRD_PARTY_README
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el8_1.x86_64
In the event that you want to allow parallel installations, you _have_ to:
- Ensure that the conflicting paths are unchanging across all versions released
- Ensure that any changing files are within non-conflicting paths
For reference:
rpm.org - Multiple Installed Versions
https://rpm.org/user_doc/multiple_versions.html
Hi! Thanx for detailed analyse, it is appreciated. Since the THIRD_PARTY_README have become mutable, to put it to fully-versioned directory is the way to go. However, I really keep wondering, why in rhel7, %license put it to fully versioned NVR dir, but in rhel8 onlyhto packageName dir. While %license remains an mystery, https://src.fedoraproject.org/rpms/java-1.8.0-openjdk/pull-request/127 is solving it for fedora. Will bubble to rhel on its own, or we can manage to get this bug fully acked. I'm not sure how it will "bubble to rhel on its own", but I've reviewed the PR and will dev-ack this for RHEL. Either you or I can port it over once it's stable in Fedora. Should still be able to make eSnap1 for RHEL 8.3. Work is being done on automated reproducer. Unluckily the automation is a bit harder here, as our provider for latest released jdk is not 100% integrated everywhere (zzambers) and jandlik is enhancing our patched tps to catch this. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (java-1.8.0-openjdk bug fix and enhancement update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2020:4656 |