【问题标题】:How to produce platform-specific and platform-independent RPM subpackages from one .spec?如何从一个 .spec 生成特定于平台和独立于平台的 RPM 子包?
【发布时间】:2015-03-07 21:42:20
【问题描述】:

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

Name:                   dunno
Version:                 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.

【问题讨论】:

  • 好问题。如果那不起作用,我不确定你能做到。虽然它看起来在比 CentOS 5 更新的 RPM 版本中是可能的。
  • @EtanReisner:您能否将链接分享给例如“什么是新的”,它描述了该功能在哪个 RPM 版本中实现?
  • 我不知道。我提到这只是因为 CentOS 6 glib2.spec 中有一个 noarch -doc 包。 This 似乎是 Fedora 规范文件的第一个标记版本。所以介于 CentOS 5 4.4.2.3 和 F18 之间。看起来像4.10.3.1。但这是一个很大的范围,它可能在其中的任何地方。
  • 是的,确实glib2 包在repo 中有几种风格。希望这个功能不是由补丁引入的(有超过 10 个,但似乎都无关)。看来 v4.4 的唯一解决方案是运行 rmpbuild 两次。

标签: rpm rpmbuild


【解决方案1】:

将构建分成 2 个包,一个 x86_64,另一个 noarch。

您可以使用 %ifarch 逻辑从单个规范进行 2 次构建(但是 即使烦人,使用 2 个规范文件通常也更容易/更干净)。

在其中包含独立于平台的内容也没有什么坏处 一个 x86_64 子包而不是 noarch 子包。

【讨论】:

  • 在拆分的情况下,我需要维护其他常见字段,例如VersionUrlLicense。另外困难是在构建周期中安装了普通人员,因此两个规格将导致两个完整的构建周期(不好)。我当然可以欺骗构建以便运行“轻”构建周期,但在概念上是正确的吗?包含并没有什么坏处,但我隐藏了故事的一部分:spec 生成 3 个依赖于平台的二进制包,所有这些包都依赖于共享的独立于平台的人员(例如设置)。
  • %ifarch 有什么帮助?例如,如果我添加%ifarch noarch,那么我需要再次运行rpmbuild 两次(rpmbuild --target=x86_64rpmbuild --target=noarch)。
  • 我只会使用所有 x86_64 子包,而不是尝试使用 noarch 子包。许多 x86_64 软件包只有 noarch 内容。
  • 是的 %ifarch 需要构建两次,一次用于 x86_64,一次用于 noarch。但是 Version: etc 将是相同的并且易于维护。
  • 感谢 cmets。我认为我放弃并拥有所有软件包的.x86_64 是合理的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你应该把 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
    # ...
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2012-01-25
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多