| Summary: | SRPM package should be installed when specified with '-F|--freshen' option ? | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Masaki Furuta ( RH ) <mfuruta> |
| Component: | rpm | Assignee: | Packaging Maintenance Team <packaging-team-maint> |
| Status: | CLOSED WONTFIX | QA Contact: | BaseOS QE Security Team <qe-baseos-security> |
| Severity: | medium | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 7.3 | CC: | ffesti, pmatilai |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2017-07-12 14:42:10 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: | |
| Bug Depends On: | |||
| Bug Blocks: | 1420851 | ||
An installed SRPM is an oxymoron to begin with, they're never installed in the rpm sense, only unpacked. First time I've ever heard anybody throw src.rpm's into -F, but yeah optimally -F should probably not unpack src.rpms. (In reply to Panu Matilainen from comment #1) I agree. Should we note that in the manpage (like "This only works with binary RPMs, not with source RPM") or just leave it as is ? If it's too trivial, please close bz. Fixed upstream as 10c1d10d6389a8389cfaf003365fb70ef4b4e00b. It is still not important enough to fix in the current release IMHO. Closing. |
Description of problem: SRPM package should be installed when specified with '-F|--freshen' option ? Version-Release number of selected component (if applicable): Fedora, RHEL. How reproducible: Always, 100% Steps to Reproduce: 1. customer had extracted all of hotfix packages we provided in the archive. # ls openstack-neutron-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-ml2-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-2015.1.4-11.el7ost.src.rpm openstack-neutron-nec-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-bigswitch-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-nuage-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-brocade-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-ofagent-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-cisco-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-oneconvergence-nvsd-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-common-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-opencontrail-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-embrane-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-openvswitch-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-ibm-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-ovsvapp-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-linuxbridge-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-plumgrid-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-mellanox-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-sriov-nic-agent-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-metaplugin-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-vmware-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-metering-agent-2015.1.4-11.el7ost.noarch.rpm python-neutron-2015.1.4-11.el7ost.noarch.rpm openstack-neutron-midonet-2015.1.4-11.el7ost.noarch.rpm python-neutron-tests-2015.1.4-11.el7ost.noarch.rpm 2. And using '-Fvh' for upgrading, so I think they saw mockbuild error with it. I confirmed as follows that '-Fvh' also install src.rpm, though it's not existing on the box before running. [root@el72-osp7-all-virbr-br0 HOTFIX_CASE-01735001_BZ-1393175]# rpm -Fvh *rpm Preparing... ################################# [100%] Updating / installing... 1:python-neutron-2015.1.4-11.el7ost################################# [ 10%] 2:openstack-neutron-common-2015.1.4################################# [ 20%] <=========== noarch.rpm 3:openstack-neutron-2015.1.4-11.el7warning: /etc/neutron/l3_agent.ini created as /etc/neutron/l3_agent.ini.rpmnew ################################# [ 30%] 4:openstack-neutron-ml2-2015.1.4-11################################# [ 40%] 5:openstack-neutron-openvswitch-201################################# [ 50%] Cleaning up / removing... 6:openstack-neutron-openvswitch-201################################# [ 60%] 7:openstack-neutron-ml2-2015.1.4-2.################################# [ 70%] 8:openstack-neutron-2015.1.4-2.el7o################################# [ 80%] 9:openstack-neutron-common-2015.1.4################################# [ 90%] 10:python-neutron-2015.1.4-2.el7ost ################################# [100%] Updating / installing... 1:openstack-neutron-2015.1.4-11.el7################################# [100%] <========== src.rpm warning: user mockbuild does not exist - using root warning: group mockbuild does not exist - using root warning: user mockbuild does not exist - using root .. ~~~ 3. This is different from customer's expectation which clearly says we won't install packages which is not previously installed on the system. RPM(8) ~~~ rpm {-F|--freshen} [install-options] PACKAGE_FILE ... This will upgrade packages, but only ones for which an earlier version is installed. ~~~ Actual results: SRPM is installed with '-F' option Expected results: We should change documentation or SRPM should not be installed with '-F' option. Looks SRPM is not considered as target package with '-F', and it should be by-design and need to fix doc / manpage. Additional info: We comparing version with INSTALL_FRESHEN. rpm-4.13.0/lib/rpminstall.c 367 /* On --freshen, verify package is installed and newer */ 368 static int checkFreshenStatus(rpmts ts, Header h) 369 { 370 rpmdbMatchIterator mi = NULL; 371 const char * name = headerGetString(h, RPMTAG_NAME); 372 const char *arch = headerGetString(h, RPMTAG_ARCH); 373 Header oldH = NULL; 374 375 if (name != NULL) 376 mi = rpmtsInitIterator(ts, RPMDBI_NAME, name, 0); 377 if (rpmtsColor(ts) && arch) <====== 378 rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_DEFAULT, arch); <====== Iterator is set here, but "src" arch is not defined, so we cannot handle correctly even if stop "continue"ing at #553 379 380 while ((oldH = rpmdbNextIterator(mi)) != NULL) { 381 /* Package is newer than those currently installed. */ 382 if (rpmVersionCompare(oldH, h) < 0) 383 break; 384 } 385 386 rpmdbFreeIterator(mi); 387 return (oldH != NULL); 388 } <...> 403 /** @todo Generalize --freshen policies. */ 404 int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv) 405 { <...> 544 if (headerIsSource(h)) { 545 rpmlog(RPMLOG_DEBUG, "\tadded source package [%d]\n", 546 eiu->numSRPMS); 547 eiu->sourceURL = xrealloc(eiu->sourceURL, 548 (eiu->numSRPMS + 2) * sizeof(*eiu->sourceURL)); 549 eiu->sourceURL[eiu->numSRPMS] = *eiu->fnp; 550 *eiu->fnp = NULL; 551 eiu->numSRPMS++; 552 eiu->sourceURL[eiu->numSRPMS] = NULL; 553 continue; <============ we're "continue"ing here. 554 } 555 556 if (eiu->relocations) { 557 struct rpmtd_s prefixes; 558 559 headerGet(h, RPMTAG_PREFIXES, &prefixes, HEADERGET_DEFAULT); 560 if (rpmtdCount(&prefixes) == 1) { 561 eiu->relocations->oldPath = xstrdup(rpmtdGetString(&prefixes)); 562 rpmtdFreeData(&prefixes); 563 } else { 564 rpmlog(RPMLOG_ERR, _("package %s is not relocatable\n"), 565 headerGetString(h, RPMTAG_NAME)); 566 eiu->numFailed++; 567 goto exit; 568 } 569 } 570 571 if (ia->installInterfaceFlags & INSTALL_FRESHEN) <============ INSTALL_FRESHEN bit is checked here. 572 if (checkFreshenStatus(ts, h) != 1) { 573 headerFree(h); 574 continue; 575 }