Bug 834326 - yum changed behavior when installing/updating circular obsoleted packages
yum changed behavior when installing/updating circular obsoleted packages
Status: CLOSED CURRENTRELEASE
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: yum (Show other bugs)
7.0
Unspecified Unspecified
medium Severity medium
: rc
: ---
Assigned To: James Antill
Karel Srot
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2012-06-21 10:46 EDT by Patrik Kis
Modified: 2014-06-13 06:31 EDT (History)
3 users (show)

See Also:
Fixed In Version: yum-3.4.3-48
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2014-06-13 06:31:25 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Patrik Kis 2012-06-21 10:46:30 EDT
Description of problem:
Test /CoreOS/yum/Regression/bz448772-circular-requires-obsoletes is failing in " ./Update-packages-from-obsoletes-loop" part.

Version-Release number of selected component (if applicable):
yum-3.4.3-27.el7.noarch

How reproducible:
always

Steps to Reproduce:

1. There are two packages with these attributes: 
# rpm -qp --obsoletes test-ddd-0.2-2.x86_64.rpm
test-ccc  
# rpm -qp --obsoletes test-ccc-0.2-2.x86_64.rpm
test-ddd  

2. It is not possible to install the circular obsolete packages and yum return 0.

# yum -d 9 install test-ccc test-ddd
Loading "product-id" plugin
Loading "subscription-manager" plugin
Running "config" handler for "subscription-manager" plugin
Updating certificate-based repositories.
Unable to read consumer identity
Config time: 0.077
Yum Version: 3.4.3
COMMAND: yum -d 9 install test-ccc test-ddd 
Installroot: /
Ext Commands:

   test-ccc
   test-ddd
Reading Local RPMDB
rpmdb time: 0.001
Setting up Package Sacks
pkgsack time: 0.050
Obs Init time: 0.092
Resolving Dependencies
--> Running transaction check
---> Package test-ccc.x86_64 0:0.2-2 will be installed
Checking deps for test-ccc.x86_64 0:0.2-2 - u
---> Package test-ddd.x86_64 0:0.2-2 will be installed
Checking deps for test-ddd.x86_64 0:0.2-2 - u
Building updates object
putting libdb-utils in simple update
putting cryptsetup-libs in simple update
putting libXdamage in simple update
putting libblkid in simple update
putting glibc-devel in simple update
putting libnl in simple update
putting attr in simple update
putting popt in simple update
putting libXfixes in simple update
putting libXtst in simple update
putting tcl in simple update
putting cracklib-dicts in simple update
putting gtk2 in simple update
putting libcap-ng in simple update
putting postgresql in simple update
putting ghostscript-cups in simple update
putting cracklib in simple update
putting libpng in simple update
putting elfutils in simple update
putting freetype in simple update
putting libstdc++ in simple update
putting nss-util in simple update
putting bzip2 in simple update
putting device-mapper-event-libs in simple update
putting tcp_wrappers-libs in simple update
putting libXrandr in simple update
putting binutils in simple update
putting libudev in simple update
putting rpm-build in simple update
putting gamin in simple update
putting libpciaccess in simple update
putting libXrender in simple update
putting redhat-lsb-core in simple update
putting libXi in simple update
putting valgrind in simple update
putting expat in simple update
putting python-libs in simple update
putting systemtap in simple update
putting bzip2-libs in simple update
putting nspr in simple update
putting openssl-libs in simple update
putting libgudev1 in simple update
putting device-mapper-event in simple update
putting libXinerama in simple update
putting dbus in simple update
putting qt3 in simple update
putting mysql-libs in simple update
putting aspell in simple update
putting audit-libs in simple update
putting lvm2 in simple update
putting libselinux in simple update
putting libsepol in simple update
putting pixman in simple update
putting libX11 in simple update
putting gdk-pixbuf2 in simple update
putting libSM in simple update
putting libthai in simple update
putting xz-libs in simple update
putting qt-x11 in simple update
putting libcap in simple update
putting libXcursor in simple update
putting qa-tools in simple update
putting pciutils-libs in simple update
putting file-libs in simple update
putting libtasn1 in simple update
putting alsa-lib in simple update
putting ncurses-base in simple update
putting perl-macros in simple update
putting perl-devel in simple update
putting openssl in simple update
putting libselinux-utils in simple update
putting rpm-libs in simple update
putting libtool-ltdl in simple update
putting openldap in simple update
putting polkit in simple update
putting libpcap in simple update
putting lcms-libs in simple update
putting libtiff in simple update
putting libgcc in simple update
putting gcc in simple update
putting libgomp in simple update
putting pango in simple update
putting libXxf86vm in simple update
putting redhat-lsb-printing in simple update
putting cups in simple update
putting libxcb in simple update
putting postgresql-libs in simple update
putting libglade2 in simple update
putting redhat-lsb-submod-security in simple update
putting util-linux in simple update
putting gpgme in simple update
putting systemd in simple update
putting elfutils-libs in simple update
putting rpm in simple update
putting ncurses-libs in simple update
putting kmod-libs in simple update
putting libacl in simple update
putting libjpeg-turbo in simple update
putting cyrus-sasl-lib in simple update
putting poppler in simple update
putting pam in simple update
putting procps-ng in simple update
putting zlib in simple update
putting perl-libs in simple update
putting libutempter in simple update
putting glibc-headers in simple update
putting curl in simple update
putting perl-Compress-Raw-Zlib in simple update
putting redhat-lsb-cxx in simple update
putting readline in simple update
putting cairo in simple update
putting libattr in simple update
putting systemtap-client in simple update
putting mesa-libGL in simple update
putting gdbm in simple update
putting newt in simple update
putting poppler-glib in simple update
putting xz in simple update
putting python in simple update
putting nss-softokn-freebl in simple update
putting libmount in simple update
putting systemd-sysv in simple update
putting redhat-lsb-languages in simple update
putting p11-kit in simple update
putting mesa-libGLU in simple update
putting device-mapper in simple update
putting rpm-python in simple update
putting avahi-libs in simple update
putting libXext in simple update
putting db4 in simple update
putting libunistring in simple update
putting libXft in simple update
putting libmng in simple update
putting redhat-lsb-submod-multimedia in simple update
putting audit in simple update
putting systemtap-devel in simple update
putting libuuid in simple update
putting qt in simple update
putting gnutls in simple update
putting parted in simple update
putting redhat-lsb in simple update
putting tk in simple update
putting NetworkManager in simple update
putting acl in simple update
putting glibc-common in simple update
putting e2fsprogs-libs in simple update
putting gmp in simple update
putting libdrm in simple update
putting ncurses in simple update
putting lvm2-libs in simple update
putting rpm-build-libs in simple update
putting libXau in simple update
putting pciutils in simple update
putting libmpc in simple update
putting xfsprogs in simple update
putting systemtap-runtime in simple update
putting lua in simple update
putting fontconfig in simple update
putting perl in simple update
putting systemtap-sdt-devel in simple update
putting libnl3 in simple update
putting libgpg-error in simple update
putting keyutils in simple update
putting mesa-libglapi in simple update
putting libassuan in simple update
putting krb5-libs in simple update
putting libssh2 in simple update
putting iptables in simple update
putting sqlite in simple update
putting libXt in simple update
putting pcre in simple update
putting libidn in simple update
putting rpm-debuginfo in simple update
putting avahi-autoipd in simple update
putting pth in simple update
putting NetworkManager-glib in simple update
putting glibc in simple update
putting libffi in simple update
putting jasper-libs in simple update
putting lcms2 in simple update
putting keyutils-libs in simple update
putting cpp in simple update
putting libxml2-python in simple update
putting cups-libs in simple update
putting nss-softokn in simple update
putting libdb in simple update
putting nss-tools in simple update
putting nss in simple update
putting glib2 in simple update
putting atk in simple update
putting libcroco in simple update
putting libpng-compat in simple update
putting libyaml in simple update
putting libgcrypt in simple update
putting openjpeg-libs in simple update
putting dbus-glib in simple update
putting libxml2 in simple update
putting dbus-libs in simple update
putting mpfr in simple update
putting kmod in simple update
putting device-mapper-libs in simple update
putting libdaemon in simple update
putting libss in simple update
putting nss-sysinit in simple update
putting ghostscript in simple update
putting slang in simple update
putting elfutils-libelf in simple update
putting libcom_err in simple update
putting libICE in simple update
putting ruby-libs in simple update
putting udev in simple update
putting redhat-lsb-desktop in simple update
putting libcurl in simple update
putting postgresql-server in simple update
putting e2fsprogs in simple update
putting libXcomposite in simple update
up:simple updates time: 0.032
up:obs time: 0.003
up:condense time: 0.000
updates time: 0.145
--> Restarting Dependency Resolution with new changes.
---> Loop Number: 2
Restarting Loop
--> Running transaction check
---> Package test-ccc.x86_64 0:0.2-2 will be installed
Checking deps for test-ccc.x86_64 0:0.2-2 - u
---> Package test-ddd.x86_64 0:0.2-2 will be installed
Checking deps for test-ddd.x86_64 0:0.2-2 - u
--> Finished Dependency Resolution
Dependency Process ending
Depsolve time: 0.387
# echo $?
0
# rpm -qa | grep ^test
#

NOTE1: The same happen with localinstall.
NOTE2: On RHEL6 booth packages were installed.
NOTE3: "obsoletes = True: in booth RHEL6 and RHEL7 test.
NOTE4: The behavior of rpm has also changed in RHEL7: https://bugzilla.redhat.com/show_bug.cgi?id=804069#c6
NOTE5: The same happen also with update/localupdate, i.e. the packages are not updated and yum exit with 0. On RHEL6 boot packages were updated.

Actual results:

Install/update fail and yum exit with 0.

Expected results:

It is a question is the correct behavior:
 - IMHO, if the the old RHEL6 behavior (booth are installed/updated) are changed in rpm, it should also change in yum.
 - So, I think either install one pkg and return 0 or don't install anything and return error.

Another info:

These is another case, where a package which obsoletes itself. This package is not installed and yum return 0, while on RHEL6 it was installed.
This is most probably the same issue as above, just writing it here, for case it would not be.
Comment 2 James Antill 2012-11-12 14:28:02 EST
 This is fixed upstream, not sure if it's made it into RHEL-7 yet though (tested in 6.4 though).
Comment 3 Karel Srot 2012-11-14 11:06:25 EST
Still failing on current RHEL7  with yum-3.4.3-46.el7.noarch
Switching back to assigned
Comment 4 James Antill 2013-06-18 12:22:32 EDT
 Changelog says it made it into rawhide in -48, should be there now for sure though :).
Comment 5 Karel Srot 2013-08-29 07:39:22 EDT
Hi James, Patrik,

current rpm behavior is that just one package is installed (this is expected as described in bug804069#c7)

current yum behavior is as follows:

Installing:
 test-ccc       x86_64        0.2-2         myrepo          1.6 k
     replacing  test-ddd.x86_64 0.1-1
 test-ddd       x86_64        0.2-2         myrepo          1.6 k
     replacing  test-ccc.x86_64 0.1-1

Transaction Summary
================================================================================Install  2 Packages

Total download size: 3.3 k
Downloading packages:
--------------------------------------------------------------------------------Total                                                                         2.0 MB/s | 3.3 kB     00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : test-ccc-0.2-2.x86_64                                                                      1/3 
  Erasing    : test-ddd-0.1-1.x86_64                                                                      2/3 
  Cleanup    : test-ccc-0.1-1.x86_64                                                                      3/3 


Rpmdb checksum is invalid: dCDPT(pkg checksums): test-ddd.x86_64 0:0.2-2 - u
:: [   FAIL   ] :: Running 'yum --disablerepo='*' --enablerepo=myrepo -y update' (Expected 0, got 1)


So yum somehow detects that one package wasn't installed and reports the rpmdb invalid checksum error and exits with 1.
This is different from the requirement described above but still it makes sense to me.

What do you think?
Comment 6 Patrik Kis 2013-08-29 08:18:15 EDT
It is ok form me if the installation ends with error. Assuming what was said in bug 804069, that these circular obsoleted packages can be considered as packaging error, IMHO returning error and let the admins know that there is something bad with the packages/installation is probably the best option here.
Comment 8 James Antill 2014-04-07 17:09:15 EDT
 Yeh, rpm does it's own thing but tells us what happened ... which is why yum complains (it sees something different happened than what it thought would happen).
 It's far from perfect, but it is what it is.
Comment 10 Ludek Smid 2014-06-13 06:31:25 EDT
This request was resolved in Red Hat Enterprise Linux 7.0.

Contact your manager or support representative in case you have further questions about the request.

Note You need to log in before you can comment on or make changes to this bug.