rpm file name generated from spec

Todd Rinaldo toddr at cpanel.net
Wed Jan 6 16:55:08 UTC 2010

On Jan 5, 2010, at 8:07 PM, Jeff Johnson wrote:

> On Jan 5, 2010, at 7:15 PM, Todd Rinaldo wrote:
>> I'm building rpms from an srpm across multiple distributions. I ran into a problem on FC11 32bit which shows I don't fully understand how rpm filenames are generated. When the rpm file is generating, it's generating it as .i586.rpm but when I do rpm -E '%_arch' on that system, it comes back as i386.
> Well there's actually several questions there ...
> 1) Q: How are *.rpm filenames generated?
>   A: Output filenames are generated using this macro
> 	$ rpm -E '%{_rpmfilename}'
>      which usually has some value (when as a macro) like
> 	%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}
>      The doubled %% chars stop macro expansion, the remaining
>      string with single % chars is filled in from header tags
>      same as
> 	$ rpm -q --qf '%{NAME{-%{VERSION}-%{RELEASE}.%{ARCH}' bash
> 2) Q: How is RPMTAG_ARCH chosen for package headers?
>   A: There's multiple ways. E.g.
> 	BuildArchitecture: noarch
>      is what sets architecture for *.noarch.rpm.
>      For your specific i386 != i586 architectire question, there's
>      a "preferred" output of "i586" and there's a "canonical" architecture of "i386".
>      The values are being set in build configuration which you can inspect with
> 	rpm --showrc
>      There's also a means yo specify architecture using --target when building.
> 3) Q: What determines the platform architecture?
>   A: Usually the CPU-VENDOR-OS-GNU string in /etc/rpm/platform, but (if missing)
>      uname(2) values (with a minor translation like s/powerpc/ppc/) is used.

Jeff, thanks for your detailed responses

Q1: When running rpm --showrc |grep 86 on FC11/32, the only variable that seems to match the how my RPMs are being generated here is %_target_cpu. Would this be a better predictor of the arch of the RPM that was generated? At the moment, of the 50 Red Hat derivative systems I'm testing, only FC11/32 %_arch does not match the RPM file name %%ARCH.

Q2: Does the arch in the file name serve a purpose? if I rename a i586 RPM to i386, does the install of the RPM file behave differently? Most RPMs are compiled for a specific distribution and major version of that distribution. Was arch name something put into RPM file names long ago that in this day and age lacks a use other than knowing 32/64 bit-ness?

Q3: You mentioned:
	A. /etc/rpm/platform (not there)
        B. uname(2) -- perl -mPOSIX -e 'print join("\n", POSIX::uname()) . "\n"' implies i686, not i586
if A and B != i586, what is happening here? 

I see from other responses that this was an intentional change by the fedora folks, but at the moment, I'm at a loss to figure out what was changed to make rpm file generation behave this way.


More information about the Rpm-list mailing list