如何从一个.spec生成特定于平台和平台的RPM子包?

时间:2015-01-09 14:29:30

标签: rpm rpmbuild

我的dunno.spec文件具有以下结构:

Name:                   dunno
Vesion:                 1.0
...
BuildArch:              x86_64

%description
...
%package common
Summary:                Shared files
BuildArch:              noarch

我想在运行rpmbuild -ba dunno.spec之后我应该得到两个二进制包:

  • dunno-1.0.x86_64.rpm
  • dunno-common-1.0.noarch.rpm

然而我得到了:

  • dunno-1.0.x86_64.rpm
  • dunno-common-1.0.x86_64.rpm

如果我从规范中删除了行BuildArch: x86_64,那么我得到

  • dunno-1.0.noarch.rpm
  • dunno-common-1.0.noarch.rpm

如何解决这个问题?

RPM v4.4.2.3。

3 个答案:

答案 0 :(得分:6)

将构建拆分为2个包,一个是x86_64,另一个是noarch。

您可以使用%ifarch逻辑从单个规范执行2个构建(但是 它通常更容易/更清洁,使用2个规格文件即使烦人)。

在其中包含与平台无关的内容也没有任何损失 一个x86_64子包而不是一个noarch子包。

答案 1 :(得分:2)

您可以rpmbuild运行rpmbuild --target=x86_64,noarh ...,然后rpmbuild将为每个拱门构建两次传递包。

答案 2 :(得分:0)

您应该将dunno-common做成子包

您的规格应如下所示

Name:                   dunno
Version:                 1.0
# next line is not needed
BuildArch:              x86_64

%package common
BuildArch:              noarch
Summary: ...
%description common
%files 
# ...

%files common
# ...