我正在从单一来源构建一系列rpms,并且只想构建子包;即我不想创建一个空的主包,只需要子包。
我该怎么做?它是一个rpmbuild开关还是我放入spec文件的东西?
感谢
答案 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