Bug 1296212

Summary: rpm db warnings going to stdout, breaking some install scripts
Product: Red Hat Enterprise Linux 6 Reporter: David Zambonini <redhat-e27>
Component: rpmAssignee: Packaging Maintenance Team <packaging-team-maint>
Status: CLOSED ERRATA QA Contact: Stefan Dordevic <sdordevi>
Severity: low Docs Contact:
Priority: unspecified    
Version: 6.7CC: lkardos, sdordevi
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: All   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 1297793 (view as bug list) Environment:
Last Closed: 2016-05-11 00:54:17 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: 1297793    
Attachments:
Description Flags
rpm db4 messages should go to stderr none

Description David Zambonini 2016-01-06 15:43:59 UTC
Created attachment 1112210 [details]
rpm db4 messages should go to stderr

Description of problem:

Some rpm pre/post scripts rely on a shell out to rpm to determine pre-existing installed package information/versioning. (e.g. `rpm -q --provides mysql-server 2> /dev/null`)

Unfortunately some non-fatal warnings can be output if, for example, a read lock on the rpmdb is held open at this time, leading to the warning picked up as the output and causing breakage:

Freeing read locks for locker 0x49e: 482061/47810768245328 
mysql-server-5.1.73-5.el6_6.x86_64

(both lines on stdout)

Putting aside the question of what is holding the read lock open for a second, this behaviour is obviously erroneous -- warnings/errors should be output to stderr, not stdout. 

How reproducible:

`rpm -q --provides mysql-server 2> /dev/null` 

While read lock held open on rpmdb. Cannot provide a reproducer for this as unfortunately is enivornment dependent.

Actual results:

Freeing read locks for locker 0x49e: 482061/47810768245328 
mysql-server-5.1.73-5.el6_6.x86_64

Expected results:

Freeing read locks for locker 0x49e: 482061/47810768245328 (on stderr)
mysql-server-5.1.73-5.el6_6.x86_64 (on stdout)

Additional info:

The behaviour is caused by db4, which if no msgfile is specified, defaults to stdout. There is a simple fix, however, which without modifying default db4 behaviour that merely involves rpm passing stderr as the msgfile at initialisation (patch supplied).

Comment 2 Ľuboš Kardoš 2016-01-12 13:25:31 UTC
In upstream fixed as 243fadeaecdd5b1231091ef5f15b58fd7959b0e7.

Comment 10 errata-xmlrpc 2016-05-11 00:54:17 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2016-0936.html