如何让rpmbuild只构建子包?

时间:2014-03-22 06:05:02

标签: rpmbuild

我正在从单一来源构建一系列rpms,并且只想构建子包;即我不想创建一个空的主包,只需要子包。

我该怎么做?它是一个rpmbuild开关还是我放入spec文件的东西?

感谢

4 个答案:

答案 0 :(得分:9)

通常,您通过没有“%files”部分来执行此操作。只有'%files 子包'部分应该出现在spec文件中。

背景: '%files'部分生成主RPM。 '%files'子包部分生成子包RPM。

答案 1 :(得分:3)

简短的回答,rpmbuild不会直接允许这样做,即使有可能,就减少构建时间而言,它也不会真正为你买单。 rpm规范文件中的%build部分对子包没有任何了解,因此它无论如何都会构建所有内容。子包仅在%files部分中发挥作用(超出诸如Requires,Provide等的元数据),其中rpmbuild将知道哪个子包应该发送已经在%buildroot中正确构建和安装的文件。所以基本上你也可以从SRPM构建整套软件包并删除你不需要的软件包。

如果您的问题是希望缩短构建时间,那么您可以首先在正在编译的软件包的构建脚本中引入支持,以便仅选择性地构建程序包的子集(即{{1 },make library等)。然后,您可以使用条件宏[1]将spec文件的某些部分括起来,然后从命令行定义这些宏:

make documentation

那么例如specfile中的这样的东西应该可以工作:

rpmbuild -ba --define '_build_library' somespecfile.spec

毋庸置疑,这并不是非常优雅。

[1] http://backreference.org/2011/09/17/some-tips-on-rpm-conditional-macros/

答案 2 :(得分:1)

你能发布你的spec文件吗?我使用子包,它永远不会构建主包。这些是我在规范中放置的字段(在%准备之前):

Name: xxx 
Version: %{_version}.%{_build}
Release: %{_drop}
Summary: xxx
Group: Applications/Communications
License: xxx
URL: xxx
BuildArch: x86_64

Requires: jpackage-utils
Requires: java

Distribution: CentOS Linux
Vendor: xxx
Packager: xxx

%description
xxx

答案 3 :(得分:0)

这不是你必须在你的规范中提出的,你必须要放弃的东西。我不确定你必须遗漏哪些字段,但我怀疑它是主程序包的%scriptlets和%文件。

以下规范构建了两个子包,没有根包:

Summary : subpackage only rpms
Name    : root
Version : 0.0.1
Release : 1
License : Whatever
Group   : Whatever
URL     : http://stackoverflow.com/questions/22574102/how-do-i-make-rpmbuild-only-build-subpackages

%description

%prep
%build
%install
touch $RPM_BUILD_ROOT/subpackage-{1,2}

%package subpackage-1
Summary : subpackage-1
%description subpackage-1
%files subpackage-1
/subpackage-1

%package subpackage-2
Summary : subpackage-2
%description subpackage-2
%files subpackage-2
/subpackage-2