Problem:
I can’t update software packages through Katello for EL8 clients (e.g. Rocky Linux 8), but when I update them from shell using yum update it works without errors.
Error from Katello job:
Updating Subscription Management repositories.
Rocky Linux 8 - OS (x86_64) 87 kB/s | 2.3 kB 00:00
Rocky Linux 8 - Extras (x86_64) 123 kB/s | 2.0 kB 00:00
epel8 139 kB/s | 2.3 kB 00:00
Rocky Linux 8 - AppStream (x86_64) 159 kB/s | 2.6 kB 00:00
foreman-client-el8 143 kB/s | 2.3 kB 00:00
Error:
Problem: expat-2.2.5-10.el8.i686 has inferior architecture
- cannot install both expat-2.2.5-10.el8_7.1.x86_64 and expat-2.2.5-10.el8.x86_64
- cannot install the best update candidate for package expat-2.2.5-10.el8.i686
- cannot install the best update candidate for package expat-2.2.5-10.el8.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Package action failed, exiting...
Exit status: 1
StandardError: Job execution failed
Unfortunately, it’s many hosts and many software packages:
Example:
Error:
Problem 1: libblkid-2.32.1-38.el8.i686 has inferior architecture
- cannot install both libblkid-2.32.1-39.el8_7.x86_64 and libblkid-2.32.1-38.el8.x86_64
- cannot install the best update candidate for package libblkid-2.32.1-38.el8.i686
- cannot install the best update candidate for package libblkid-2.32.1-38.el8.x86_64
Problem 2: libcurl-7.61.1-25.el8.i686 has inferior architecture
- cannot install both libcurl-7.61.1-25.el8_7.1.x86_64 and libcurl-7.61.1-25.el8.x86_64
- cannot install the best update candidate for package libcurl-7.61.1-25.el8.i686
- cannot install the best update candidate for package libcurl-7.61.1-25.el8.x86_64
Problem 3: libgcc-8.5.0-15.el8.i686 has inferior architecture
- cannot install both libgcc-8.5.0-16.el8_7.x86_64 and libgcc-8.5.0-15.el8.x86_64
- cannot install the best update candidate for package libgcc-8.5.0-15.el8.i686
- cannot install the best update candidate for package libgcc-8.5.0-15.el8.x86_64
Problem 4: libmount-2.32.1-38.el8.i686 has inferior architecture
- cannot install both libmount-2.32.1-39.el8_7.x86_64 and libmount-2.32.1-38.el8.x86_64
- cannot install the best update candidate for package libmount-2.32.1-38.el8.i686
- cannot install the best update candidate for package libmount-2.32.1-38.el8.x86_64
Problem 5: libsmartcols-2.32.1-38.el8.i686 has inferior architecture
- cannot install both libsmartcols-2.32.1-39.el8_7.x86_64 and libsmartcols-2.32.1-38.el8.x86_64
- cannot install the best update candidate for package libsmartcols-2.32.1-38.el8.i686
- cannot install the best update candidate for package libsmartcols-2.32.1-38.el8.x86_64
Problem 6: libstdc++-8.5.0-15.el8.i686 has inferior architecture
- cannot install both libstdc++-8.5.0-16.el8_7.x86_64 and libstdc++-8.5.0-15.el8.x86_64
- cannot install the best update candidate for package libstdc++-8.5.0-15.el8.i686
- cannot install the best update candidate for package libstdc++-8.5.0-15.el8.x86_64
Problem 7: libuuid-2.32.1-38.el8.i686 has inferior architecture
- cannot install both libuuid-2.32.1-39.el8_7.x86_64 and libuuid-2.32.1-38.el8.x86_64
- cannot install the best update candidate for package libuuid-2.32.1-38.el8.i686
- cannot install the best update candidate for package libuuid-2.32.1-38.el8.x86_64
Problem 8: libxml2-2.9.7-15.el8.i686 has inferior architecture
- cannot install both libxml2-2.9.7-15.el8_7.1.x86_64 and libxml2-2.9.7-15.el8.x86_64
- cannot install the best update candidate for package libxml2-2.9.7-15.el8.i686
- cannot install the best update candidate for package libxml2-2.9.7-15.el8.x86_64
Problem 9: sqlite-libs-3.26.0-16.el8_6.i686 has inferior architecture
- cannot install both sqlite-libs-3.26.0-17.el8_7.x86_64 and sqlite-libs-3.26.0-16.el8_6.x86_64
- cannot install the best update candidate for package sqlite-libs-3.26.0-16.el8_6.i686
- cannot install the best update candidate for package sqlite-libs-3.26.0-16.el8_6.x86_64
Problem 10: systemd-239-68.el8.i686 has inferior architecture
- cannot install both systemd-239-68.el8_7.2.x86_64 and systemd-239-68.el8.x86_64
- cannot install the best update candidate for package systemd-239-68.el8.i686
- cannot install the best update candidate for package systemd-239-68.el8.x86_64
Problem 11: systemd-libs-239-68.el8.i686 has inferior architecture
- cannot install both systemd-libs-239-68.el8_7.2.x86_64 and systemd-libs-239-68.el8.x86_64
- cannot install the best update candidate for package systemd-libs-239-68.el8.i686
- cannot install the best update candidate for package systemd-libs-239-68.el8.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
Package action failed, exiting...
Exit status: 1
Why does it work correctly, when using yum update but failing when updating through Katello?
I’m confused. Why do you have both 32bit and 64bit packages installed? Why does yum update expat not complain? Is it because the job is doing just yum update and you are running yum update <packagename> ? Doesn’t explain how both are installed. Either way, if you don’t need the 32bit packages simply uninstall them.
To find all the 32bit packages: rpm -qa --qf "%{n}-%{v}-%{r}.%{arch}\n" | grep "i386$" then pass the list to yum erase. Alternative, rpm can be used to uninstall the packages ignoring dependencies. This could break your system, so take backup if possible.
Thanks for you answer.
As far as I know, Katello should have the capability to deal with both 32bit and 64bit versions of packages, in a way that it is able to upgrade them independently. Correct?
In other words, if this capability doesn’t work - could it be a bug in Katello?
I didn’t willingly install any 32bit packages on systems. Systems were installed from DVD ISO image as “Minimal” and then required software was added.
How can I know if packages such as “libstdc++” is needed by any software component or not? Don’t I risk to break something by removing it?
As pointed out before: Katello doesn’t handle anything here. You run an update command through remote execution, i.e. it simply runs yum update with whatever argument you pass or none at all.
You don’t mention which update you have initiated exactly before, but the same command locally should give the same output.
As suggested, run yum update on the client to see if it can update without issues.
You still haven’t posted what you updated exactly when it failed. The Job page for the host shows the detailed output and you can also toggle the command.
From what you write it’s unclear what you did exactly. Nor is it clear, which command you have actually run.
Again: check the job for the exact command. Go to Monitor - Jobs, click on the link for one of the failed update jobs you have tried before. Click on the hostname to see the output of the task. Press the “Toggle command” button to view the executed command. This shows the exact shell command executed on the host via remote execution…
Yes. That’s exactly why this is a bug. The x86_64 is not upgradable to the i686 rpm. The generated update command from your post before shows, that katello actually assumes the i686 is an upgrade for both architectures which is why it only sends the update command for the i686 which breaks, because you have to keep the installed i686 and x86_64 in sync.