We’ve been signing RPM packages in local repos for a while now, and this has been working nicely (see previous posts about rpm signing)… until today.
The Intel Fortran 2015 installer provides RPMs which are already signed by Intel and which install and work fine, so we push these out with Puppet from our local (private) repo. However, even though I’d signed them myself they were failing to verify the signature…
Original RPM before re-signing locally:
=> rpm --checksig intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#7a5a985f) => rpm -qpi intel-fcompxe-187-15.0-3.noarch.rpm warning: intel-fcompxe-187-15.0-3.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID 7a5a985f: NOKEY Name : intel-fcompxe-187 ... Signature : RSA/SHA1, Fri 10 Apr 2015 13:23:59 BST, Key ID 27fbcd8d7a5a985f
So I go ahead and sign the package:
=> rpm --addsign intel-fcompxe-187-15.0-3.noarch.rpm Enter pass phrase: [type passphrase] Pass phrase is good. intel-fcompxe-187-15.0-3.noarch.rpm:
All looks fine, so lets check the signature again:
=> rpm --checksig intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: RSA RSA sha1 sha1 ((MD5) PGP) ((MD5) PGP) md5 md5 NOT OK (MISSING KEYS: (MD5) PGP#7a5a985f (MD5) PGP#262a742e) => rpm -qpi intel-fcompxe-187-15.0-3.noarch.rpm warning: intel-fcompxe-187-15.0-3.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID 7a5a985f: NOKEY Name : intel-fcompxe-187 ... Signature : RSA/SHA1, Fri 10 Apr 2015 13:23:59 BST, Key ID 27fbcd8d7a5a985f
Odd, it hasn’t changed… Let’s try removing the signature instead:
=> rpm --delsign intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: => rpm --checksig intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: RSA RSA sha1 sha1 sha1 ((MD5) PGP) ((MD5) PGP) md5 md5 md5 NOT OK (MISSING KEYS: (MD5) PGP#7a5a985f (MD5) PGP#262a742e)
That’s very odd, it’s added tags to the signature header. And if you try a few more times (just to be sure, right? :), it adds more tags to the header:
=> rpm --delsign intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: ... Packager : http://www.intel.com/software/products/support Summary : Intel(R) Fortran Compiler XE 15.0 Update 3 for Linux* Description : Intel(R) Fortran Compiler XE 15.0 Update 3 for Linux* => rpm --checksig intel-fcompxe-187-15.0-3.noarch.rpm intel-fcompxe-187-15.0-3.noarch.rpm: RSA RSA sha1 sha1 sha1 sha1 sha1 sha1 ((MD5) PGP) ((MD5) PGP) md5 md5 md5 md5 md5 md5 NOT OK (MISSING KEYS: (MD5) PGP#7a5a985f (MD5) PGP#262a742e)
If you do this a few more times then rpm can’t read the package at all anymore!
=> rpm --checksig intel-fcompxe-187-15.0-3.noarch.rpm error: intel-fcompxe-187-15.0-3.noarch.rpm: rpmReadSignature failed: sigh tags: BAD, no. of tags(33) out of range => rpm -ql -v -p intel-fcompxe-187-15.0-3.noarch.rpm error: intel-fcompxe-187-15.0-3.noarch.rpm: rpmReadSignature failed: sigh tags: BAD, no. of tags(33) out of range error: intel-fcompxe-187-15.0-3.noarch.rpm: not an rpm package (or package manifest)
Ooops!
Workaround: Add the vendor keys as you should do, rather than re-signing. Appending the public key to the required RPM-GPG_KEY-*
file is all that’s required, and then you can install the packages just fine.
Future work: Submit bug report about this to the rpm-sign developers…