Bug 30776

Summary: urpmi fail to install from release media when backport is enabled
Product: Mageia Reporter: Morgan Leijström <fri>
Component: RPM PackagesAssignee: Mageia tools maintainers <mageiatools>
Status: RESOLVED INVALID QA Contact:
Severity: normal    
Priority: Normal CC: davidwhodgins, mageia
Version: 8   
Target Milestone: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Source RPM: urpmi-8.125-1.mga8.src.rpm CVE:
Status comment:

Description Morgan Leijström 2022-08-25 18:39:47 CEST
Version-Release number of selected component (if applicable):
urpmi v8.125

 I stumbled on this for preparing to test gnucash 4.11 backport update.
 (at writing it is in core backport testing)
 I did not have gnucash installed, so first install our release version.

Steps to Reproduce:

1. Do not have gnucash packages installed

2. Have core backport / backport testing enabled (but not set as update)

3. $ sudo LC_ALL=C urpmi --test gnucash-4.4-2.mga8.x86_64
A requested package cannot be installed:
gnucash-4.4-2.mga8.x86_64 (due to unsatisfied lib64gnucash0[== 4.4-2.mga8])

(And of course, same message in drakrpm, where I first noticed the problem)

4. Disable core backport / backport testing

5. $ sudo LC_ALL=C urpmi --test gnucash-4.4-2.mga8.x86_64
To satisfy dependencies, the following packages are going to be installed:
(test only, installation will not be actually done)
  Package                        Version      Release       Arch    
(medium "Core Release")
  gnucash                        4.4          2.mga8        x86_64  
  guile3.0                       3.0.4        3.mga8        x86_64  
  lib64gnucash0                  4.4          2.mga8        x86_64  
  libdbi-drivers-dbd-sqlite3     0.9.0        12.mga8       x86_64  
  perl-Date-Manip                6.820.0      1.mga8        noarch  
  perl-DateTime                  1.540.0      1.mga8        x86_64  (recommended)
  perl-DateTime-Format-Strptime  1.780.0      2.mga8        noarch  (recommended)
  perl-DateTime-Locale           1.310.0      1.mga8        noarch  (recommended)
  perl-Finance-Quote             1.490.0      2.mga8        noarch  (recommended)
  perl-HTML-Element-Extended     1.180.0      9.mga8        noarch  (recommended)
  perl-HTML-TableExtract         2.150.0      4.mga8        noarch  (recommended)
  perl-JSON-Parse                0.590.0      1.mga8        x86_64  (recommended)
  perl-String-Util               1.310.0      1.mga8        noarch  (recommended)
  perl-Text-Template             1.590.0      1.mga8        noarch  (recommended)
  slib                           3b6          1.mga8        noarch

(And removing --test, it installs and works.)
Comment 1 Jani Välimaa 2022-08-25 19:51:23 CEST
Should work with 'urpmi gnucash --excludemedia Backports'.
Comment 2 Morgan Leijström 2022-08-25 19:59:05 CEST
--excludemedia is a probable workaround.

But having backport enabled should not make urpmi blind of what is available in release...
Comment 3 Jani Välimaa 2022-08-25 21:30:00 CEST
I'd say it's how urpmi works. Select newest pkg from available media if multiple versions exists with the same name. Urpmi doesn't know that same and specific EVRD is also wanted for reqs than was given for the pkg to be installed. Unless deps with specific EVRD are also passed to urpmi via cmd.

I have had no problems ever to install something from Core Release either by excluding unwanted media with '--excludemedia Update' or by searching only from Core Release with '--media Release'
Comment 4 Morgan Leijström 2022-08-25 21:43:12 CEST
What if this gnucash 4.11 now in backports testing, was instead put in updates.

A user that then install gnucash would land in this problem, I guess?

Dependencies are in release media, so probably simplest workaround is then to exclude/disable updates repo, install gnucash, and then update.  Normal users would not know that, especially with a bogus error message to "help"...


Anyway at least the error message is wrong or strongly misleading; "unsatisfied lib64gnucash0[== 4.4-2.mga8]", while it is even in the release media, which is enabled.
Comment 5 David Walser 2022-08-25 22:11:04 CEST
urpmi is working as it should.  You shouldn't just leave backports enabled.  Only enable it momentarily when installing something from backports, then disable it.

Status: NEW => RESOLVED
Resolution: (none) => INVALID

Comment 6 Morgan Leijström 2022-08-25 22:22:10 CEST
My fear is if urpmi have this quirk also for other repos?

(In reply to Morgan Leijström from comment #4)
> What if this gnucash 4.11 now in backports testing, was instead put in
> updates.
> 
> A user that then install gnucash would land in this problem, I guess?


And anyway there is a bug:

> the error message is wrong or strongly misleading;
> "unsatisfied lib64gnucash0[== 4.4-2.mga8]", while it is even in the release
> media, which is enabled.
Comment 7 Dave Hodgins 2022-08-25 22:45:59 CEST
It sounds similar to bug 2317, which was fixed to allow updates to require
packages from release repo. Prior to that being fixed every update had to
include a copy of any unchanged packages it required in the update.

So a regular update shouldn't be affected.

CC: (none) => davidwhodgins

Comment 8 Dave Hodgins 2022-08-25 22:59:36 CEST
Anyway, the cause is improper use of backports.

Proper use is to enable the backports repo, install the desired packages,
and then disable the backports repo.
Comment 9 Martin Whitaker 2022-08-25 23:40:18 CEST
(In reply to Dave Hodgins from comment #8)
> Anyway, the cause is improper use of backports.
>
> Proper use is to enable the backports repo, install the desired packages,
> and then disable the backports repo.

If you are using urpmi to install backports, the proper use is not to enable the backports media at all, but to use the --search-media option, e.g.

  urpmi --search-media 'Backports Testing' gnucash

CC: (none) => mageia

Comment 10 Martin Whitaker 2022-08-25 23:51:04 CEST
The cause of Morgan's original issue can be seen by using the urpmi --debug option:

[root@localhost ~]# urpmi  --debug --test gnucash-4.4-2.mga8
getting lock on urpmi
parsing: /etc/urpmi/mediacfg.d/Official-8-x86_64
loading mirrors cache
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
using mirror http://www.mirrorservice.org/sites/mageia.org/pub/mageia/distrib/8/x86_64
examining synthesis file [/var/lib/urpmi/Core Release (distrib1)/synthesis.hdlist.cz]
examining synthesis file [/var/lib/urpmi/Core Updates (distrib3)/synthesis.hdlist.cz]
examining synthesis file [/var/lib/urpmi/Core Backports (distrib7)/synthesis.hdlist.cz]
examining synthesis file [/var/lib/urpmi/Core Backports Testing (distrib9)/synthesis.hdlist.cz]
examining synthesis file [/var/lib/urpmi/Nonfree Release (distrib11)/synthesis.hdlist.cz]
examining synthesis file [/var/lib/urpmi/Nonfree Updates (distrib13)/synthesis.hdlist.cz]
getting exclusive lock on rpm
search_packages: found gnucash-4.4-2.mga8.x86_64 matching gnucash-4.4-2.mga8
found package(s): gnucash-4.4-2.mga8.x86_64
opening rpmdb (root=, write=)
selecting gnucash-4.4-2.mga8.x86_64
requiring guile3.0,lib64gnucash0[== 4.4-2.mga8],libboost_program_options.so.1.75.0()(64bit),libboost_regex.so.1.75.0()(64bit),libdbi-drivers-dbd-sqlite3,libgnc-app-utils.so()(64bit),libgnc-backend-sql.so()(64bit),libgnc-backend-xml-utils.so()(64bit),libgnc-core-utils.so()(64bit),libgnc-engine.so()(64bit),libgnc-generic-import.so()(64bit),libgnc-gnome.so()(64bit),libgnc-module.so()(64bit),libgnucash-guile.so()(64bit),libguile-3.0.so.1()(64bit),libguile-3.0.so.1(GUILE_2.0)(64bit),perl(Date::Manip),slib for gnucash-4.4-2.mga8.x86_64
chosen lib64gnucash0-4.11-1.mga8.x86_64 for libgnc-module.so()(64bit)
selecting lib64gnucash0-4.11-1.mga8.x86_64

Because lib64gnucash0-4.11-1.mga8.x86_64 satisfies the unversioned dependency "libgnc-module.so()(64bit)", urpmi can happily select it to meet that dependency. But once urpmi has done that, it can't then select lib64gnucash0-4.4-2.mga8.x86_64 to satisfy the hard-versioned dependency "lib64gnucash0[== 4.4-2.mga8]".

Yes, the error message is not helpful in this case, but that's often the way with conflicting dependencies.
Comment 11 Dave Hodgins 2022-08-26 00:16:46 CEST
So in the backport gnucash should have had a version specific requires for
the lib{64}gnucash0 package.
Comment 12 Morgan Leijström 2022-08-26 10:09:57 CEST
Thank you for the explanations.

It is probably generally good it selects latest version when there is no restriction.  I was in the thinking it should evaluate other selections if the initial choice do not lead to a full solution - not just give up.  I could dream, but not code... :)

How do dnf compare in this situation?
Comment 13 Morgan Leijström 2022-08-29 18:24:27 CEST
(In reply to Martin Whitaker from comment #9)
> If you are using urpmi to install backports, the proper use is not to enable
> the backports media at all, but to use the --search-media option, e.g.
> 
>   urpmi --search-media 'Backports Testing' gnucash

Cool :)   Entered:

https://wiki.mageia.org/en/URPMI#Install_from_non_enabled_media.2C_i.e_Backports
Comment 14 Dave Hodgins 2022-08-30 18:23:45 CEST
For a non-enabled repository, the meta data will only show what was available when the repositories were set up, whether that's from the system installation or from switching mirrors.

To update the metadata for both enabled and non-enabled repositories, I use
"urpmi.update e". The letter e has no special significance to urpmi. It works
because the words core, nonfree, and tainted, all have the letter e in them.
Comment 15 Morgan Leijström 2022-08-30 18:55:57 CEST
:)
added to https://wiki.mageia.org/en/URPMI#urpmi.update