[CentOS] mock gimmicks - experts?

Tue Mar 1 16:16:35 UTC 2022
Johnny Hughes <johnny at centos.org>

On 3/1/22 06:02, lejeczek via CentOS wrote:
> On 28/02/2022 21:48, Johnny Hughes wrote:
>> On 2/28/22 08:49, lejeczek via CentOS wrote:
>>> Hi guys.
>>>
>>> I'm trying something I believe is trivial, on centOS 9 with mock 
>>> version 2.16
>>>
>>> -> $ mock -r centos-stream-8-x86_64 --rootdir=~/mock 
>>> --localrepo=/00.STORAGE/1/var/www/repos --continue --chain 
>>> ./mpfr-4.1.0-7.el9.src.rpm ./libmpc-1.2.1-4.el9.src.rpm
>>>
>>> ...
>>>
>>> CentOS Stream 8 - PowerTools 14 kB/s | 4.4 kB     00:00
>>> Error:
>>>   Problem: cannot install the best update candidate for package 
>>> libmpc-1.1.0-9.1.el8.x86_64
>>>    - problem with installed package libmpc-1.1.0-9.1.el8.x86_64
>>>    - package libmpc-1.1.0-9.1.el8.x86_64 requires 
>>> libmpfr.so.4()(64bit), but none of the providers can be installed
>>>    - cannot install the best update candidate for package 
>>> mpfr-3.1.6-1.el8.x86_64
>>>    - cannot install both mpfr-4.1.0-7.el8.x86_64 and 
>>> mpfr-3.1.6-1.el8.x86_64
>>>    - cannot install both mpfr-3.1.6-1.el8.x86_64 and 
>>> mpfr-4.1.0-7.el8.x86_64
>>> (try to add '--skip-broken' to skip uninstallable packages or 
>>> '--nobest' to use not only best candidate packages)
>>> ERROR: Exception(./libmpc-1.2.1-4.el9.src.rpm) 
>>> Config(centos-stream-8-x86_64) 0 minutes 6 seconds
>>> INFO: Results and/or logs in: 
>>> /00.STORAGE/1/var/www/repos/results/centos-stream-8-x86_64/libmpc-1.2.1-4.el9 
>>>
>>> ERROR: Command failed:
>>>
>>> ...
>>>
>>> Why would it end up asking for 'mpfr-3.1.6' if 'libmpc-1.2.1' 
>>> requires ver. >4.x and..
>>>
>>> why would 'ibmpc-1.1.0-9.1' even show up there I cannot wrap my head 
>>> around it.
>>>
>>> I've only started using 'mock' but this weird stuff have not seen 
>>> until now.
>>>
>>
>> Rather than passing in both SRPMS .. I would try with just one at a time.
>>
>> You are first trying to build mpfr and after that, you are trying to 
>> build libmpc.
>>
>> If I am correct, the newer version of libmpc is required for mpfr. So, 
>> first try building libmpc .. and look at what is necessary to build 
>> that.  Once you have that built, put it in your local repo and rebuild 
>> tehmetadata and thentry to build mpfr by itself.
>>
>> All '--chain' does is retry all failed builds if something actually 
>> builds.
>>
>> As to why the older version of libmpc or mpfr is trying to load .. 
>> look at your root.log and it will tell you.
>>
> That was how I started first, each separately.
> 
> -> $ mock -r centos-stream-8-x86_64 --rootdir=~/mock 
> --resultdir=/00.STORAGE/1/var/www/repos/results/"{{root}}"/libmpc 
> libmpc-1.2.1-4.el9.src.rpm
> 
> ...
> 
> Package gcc-8.5.0-10.el8.x86_64 is already installed.
> Package make-1:4.2.1-11.el8.x86_64 is already installed.
> No matching package to install: 'mpfr-devel >= 4.1.0'
> Not all dependencies satisfied
> 
> '--chain' I believed was some way to "loop" and if one pkg might depend 
> on another it will (with perhaps of addition of '--continue') that would 
> be better alternative to "solve" those dependencies, anyway.
> 
> Having 'mpfr' ver. 4.x built and in repo, following fails the same way:
> 
> -> $ mock -r centos-stream-8-x86_64 --rootdir=~/mock 
> --resultdir=/00.STORAGE/1/var/www/repos/results/"{{root}}"/libmpc 
> libmpc-1.2.1-4.el9.src.rpm 
> --addrepo=http://10.3.1.100/centos-stream-8-x86_64
> ...
> 
> CentOS Stream 8 - PowerTools 113 kB/s | 4.4 kB     00:00
> Error:
>   Problem: cannot install the best update candidate for package 
> libmpc-1.1.0-9.1.el8.x86_64
>    - problem with installed package libmpc-1.1.0-9.1.el8.x86_64
>    - package libmpc-1.1.0-9.1.el8.x86_64 requires libmpfr.so.4()(64bit), 
> but none of the providers can be installed
>    - cannot install the best update candidate for package 
> mpfr-3.1.6-1.el8.x86_64
>    - cannot install both mpfr-4.1.0-7.el8.x86_64 and 
> mpfr-3.1.6-1.el8.x86_64
>    - cannot install both mpfr-3.1.6-1.el8.x86_64 and 
> mpfr-4.1.0-7.el8.x86_64
> (try to add '--skip-broken' to skip uninstallable packages or '--nobest' 
> to use not only best candidate packages)
> 
> 'root.log' does not reveal anything, certainly not an explanation or... 
> I've gone blind.
> 
> My guess - because that would be such a "test" case where 'mock' fails 
> to tell, to explain what/how so I must only guess - is that something 
> else down the chain of dependencies, depends on those "older" versions 
> of 'mpfr' and/or 'libmpc', but..
> 
> if that theorem is true then, again, how to...
> 
> I also fiddled with 'best=' but to no avail.
> 

https://koji.mbox.centos.org/pkgs/packages/libmpc/1.1.0/9.1.el8/data/logs/aarch64/root.log

libmpc.aarch64 is installed in the 'minimal' buildroot for all packages 
built in mock.  So you will have to build a newer first. (The minimum 
build root contains the files starting with:

DEBUG util.py:439:   bash                       aarch64 4.4.19-12.el8 
                build 1.5 M

and going to

DEBUG util.py:439:   xz                         aarch64 5.2.4-3.el8 
                build 151 k

in the below file .. it pulls in all the deps listed below that .. so from:

DEBUG util.py:439:   annobin                    aarch64 9.35-1.el8 
                build 103 k

to

DEBUG util.py:439:   zstd                       aarch64 1.4.4-1.el8 
                build 302 k

One of those "Install  175 Packages" in the minimal build root is 
libmpc.aarch64.


Compounding your problem .. when you build a new libmpc, it requires 
mpfr-devel.  You have a chicken / egg problem.  Minimal buildroot 
requires libmpc .. you will have to figure out how to build and replace 
the libmpc with the newer version before you can do anything else.