Bug 1670435
Summary: | Installing perl-5.24 breaks updates due to interference from perl-5.26 packages | ||||||
---|---|---|---|---|---|---|---|
Product: | Red Hat Enterprise Linux 8 | Reporter: | Stephen Tweedie <sct> | ||||
Component: | perl-5.24-module | Assignee: | Petr Pisar <ppisar> | ||||
Status: | CLOSED CURRENTRELEASE | QA Contact: | RHEL CS Apps Subsystem QE <rhel-cs-apps-subsystem-qe> | ||||
Severity: | unspecified | Docs Contact: | |||||
Priority: | unspecified | ||||||
Version: | 8.0 | CC: | bgollahe, bnater, jorton, jwboyer, packaging-team-maint, ppisar, psabata | ||||
Target Milestone: | rc | Keywords: | Patch | ||||
Target Release: | 8.0 | ||||||
Hardware: | Unspecified | ||||||
OS: | Unspecified | ||||||
Whiteboard: | |||||||
Fixed In Version: | perl-5.24-820190207164249.ee766497 | Doc Type: | No Doc Update | ||||
Doc Text: |
undefined
|
Story Points: | --- | ||||
Clone Of: | Environment: | ||||||
Last Closed: | 2019-06-14 01:40:45 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: | |||||||
Attachments: |
|
Description
Stephen Tweedie
2019-01-29 14:17:04 UTC
There three possible fixes: (1) Remove the Obsoletes from 5.26 perl-interpreter. The Obsoletes comes from Fedora to swap perl and perl-interpreter packages when upgrading to newer Fedora. This use case is not applicable to RHEL. Except when a RHEL user switches from perl:5.24 stream to a different stream. Not swapping the packages only results into a fatter installation (5.26 perl package has many additional dependencies). (2) Add (a dummy) perl-interpreter package to perl:5.24 stream. Having a same-named package in an enabled module will mask the bare 5.26 perl-interpreter. (3) This is a bug in libdnf solver. If I'm not mistaken Obsoletes were considered only if they were in an installed or being installed package. Obsoletes semantics was to uninstall a package that has been replaced by another already installed one. I noticed recently that DNF started to apply Obsoletes defined in packages that are not installed. E.g. in this case perl:5.24 stream does not contain any perl-interpreter package and is not installed. (Although 5.24 perl package Provides: perl-interpreter.) Yet DNF wants to install perl-interpreter package and obsolete perl package. I'd like to hear a clarification from package management team regarding (3). If this is not a bug in DNF, I'd probably choose (2). (2) papers the issue but is future proof since Fedora will contain the Obsoletes and newer perl streams in RHEL will inherit it. (I.e. the issue would recurrent with adding any new perl stream.) There is no need to install a profile. This can be reproduced with enabling perl:5.24 stream and having installed the perl package: # dnf module list |grep 'perl[^-]' perl 5.24 [e] common [d], minimal Practical Extraction and Report Language perl 5.26 [d] common [d], minimal Practical Extraction and Report Language # rpm -q perl perl-5.24.4-401.module+el8+2464+d274aed1.x86_64 # rpm -q perl-interpreter package perl-interpreter is not installed # dnf upgrade [...] Problem: package perl-interpreter-4:5.26.3-416.el8.x86_64 requires libperl.so.5.26()(64bit), but none of the providers can be installed - package perl-interpreter-4:5.26.3-416.el8.x86_64 requires perl-libs(x86-64) = 4:5.26.3-416.el8, but none of the providers can be installed - cannot install the best update candidate for package perl-4:5.24.4-401.module+el8+2464+d274aed1.x86_64 - package perl-libs-4:5.26.3-416.el8.x86_64 is excluded ========================================================================================== Package Arch Version Repository Size ========================================================================================== Skipping packages with broken dependencies: perl-interpreter x86_64 4:5.26.3-416.el8 rhel-8-base 6.3 M Transaction Summary ========================================================================================== Skip 1 Package However there is definitely something fishy in DNF: # dnf upgrade --allowerasing Last metadata expiration check: 2:57:34 ago on Thu 31 Jan 2019 10:29:47 AM CET. Dependencies resolved. Nothing to do. Complete! # dnf upgrade --allowerasing --best Last metadata expiration check: 2:58:23 ago on Thu 31 Jan 2019 10:29:47 AM CET. Dependencies resolved. ========================================================================================== Package Arch Version Repository Size ========================================================================================== Removing: perl x86_64 4:5.24.4-401.module+el8+2464+d274aed1 @rhel-8-appstream 13 M Removing dependent packages: perl-Errno x86_64 1.25-401.module+el8+2464+d274aed1 @rhel-8-appstream 9.1 k perl-File-Path noarch 2.12-367.module+el8+2464+d274aed1 @rhel-8-appstream 57 k perl-IO x86_64 1.36-401.module+el8+2464+d274aed1 @rhel-8-appstream 138 k perl-PathTools x86_64 3.63-367.module+el8+2464+d274aed1 @rhel-8-appstream 180 k perl-Socket x86_64 4:2.027-2.module+el8+2464+d274aed1 @rhel-8-appstream 122 k perl-Text-Tabs+Wrap noarch 2013.0523-395.module+el8+2464+d274aed1 @rhel-8-appstream 24 k perl-Unicode-Normalize x86_64 1.25-1000.module+el8+2464+d274aed1 @rhel-8-appstream 622 k perl-constant noarch 1.33-1000.module+el8+2464+d274aed1 @rhel-8-appstream 26 k perl-threads x86_64 1:2.21-2.module+el8+2464+d274aed1 @rhel-8-appstream 107 k perl-threads-shared x86_64 1.58-2.module+el8+2464+d274aed1 @rhel-8-appstream 77 k python3-rpkg noarch 1.57-2.el8eng @rhpkg 579 k rhpkg noarch 1.35-7.el8eng @rhpkg 385 k rpmlint noarch 1.10-13.el8 @rhel-8-appstream 725 k Transaction Summary ========================================================================================== Remove 14 Packages So forcing the highest versions uninstalls perl package, but does not any replacement, namely perl-interpreter package. This is not how Obsoletes should be handled. Moreover distr-sync is confirms the system is up-to-date: # dnf distrosync Last metadata expiration check: 3:03:06 ago on Thu 31 Jan 2019 10:29:47 AM CET. Dependencies resolved. Nothing to do. Complete! But: # dnf distrosync --best Last metadata expiration check: 3:03:54 ago on Thu 31 Jan 2019 10:29:47 AM CET. Error: Problem: package perl-interpreter-4:5.26.3-416.el8.x86_64 requires libperl.so.5.26()(64bit), but none of the providers can be installed - package perl-interpreter-4:5.26.3-416.el8.x86_64 requires perl-libs(x86-64) = 4:5.26.3-416.el8, but none of the providers can be installed - cannot install the best update candidate for package perl-4:5.24.4-401.module+el8+2464+d274aed1.x86_64 - package perl-libs-4:5.26.3-416.el8.x86_64 is excluded Reports the same issue. What's the difference between "distrosync" and "distrosync --best"? In my opinion there should not be any. As I don't have any respond from DNF maintainer, I'm going to update perl:5.24 stream by adding an empty perl-interpreter subpackage to perl.spec. Created attachment 1525487 [details]
Proposed fix for perl.spec
dmach confirmed off-line that the new DNF behavior (an Obsoletes from noninstalled packaged affects system) is intentional. So we indeed need to fix it in the perl:5.24 module. Some tests actually expect installing "perl" package also installs "perl-interpreter" RPM symbol. To make this change less obtrusive I will make the dependency between perl and perl-interpreter symmetric. |