根据 RPM 文档/指南 (http://ftp.rpm.org/max-rpm/ch-rpm-subpack.html)可以使用子包通过单个 SPEC 文件构建多个 RPM 包。在提到的链接中,构建并打包了 foo、foo-server、foo-client 和 bazlib 包。
在示例中,SPEC 文件有一个名为 foo 的基础/父包(服务器、客户端和 bazlib 是子包):
Name: foo
Version: 2.7
Release: 1
Source: foo-2.7.tgz
License: probably not
Summary: The foo app, and the baz library needed to build it
Group: bogus/junque
%description
This is the long description of the foo app, and the baz library needed to
build it...
%package server
Summary: The foo server
Group: bogus/junque
%description server
This is the long description for the foo server...
%package client
Summary: The foo client
Group: bogus/junque
%description client
This is the long description for the foo client...
%package -n bazlib
Version: 5.6
Summary: The baz library
Group: bogus/junque
%description -n bazlib
This is the long description for the bazlib...
...snipped
构建这些包会产生以下包:
# rpmbuild -ba foo-2.7.spec
* Package: foo
* Package: foo-server
* Package: foo-client
* Package: bazlib
...snipped
几个问题:
1.) 基础/父包 foo 是否有一些特殊用途,例如 RPIO 中的一些附加标志/属性?或者从 RPM“角度”来看,包 foo 是否等于它的所有子包?如果是这样,为什么这些包被称为子包(这个词子包暗示着一种特殊的关系)?
2.) 假设我通过子包将一个产品与多个二进制文件(toola、toolb、toolc)打包在一起,有没有办法禁用基本/父包?就我而言,不需要特殊的基础/父包,因为所有工具包都被平等对待(这个问题与问题 1 相关)。
我想有可能只构建工具(基础/父包)和toola,toolb,toolc,但不将工具添加到存储库。但这在某种程度上感觉不对(也许可以使用toola作为基础包,使用toolb和toolc作为子包?)。
答案1
就二进制 RPM 而言,主包及其子包是相同的。我可以想到子包被称为这样的几个原因:它们被描述为主包的“变体”,从中继承许多字段(尽管它们可以被覆盖),甚至默认情况下从中获取它们的名称;从源码包的角度来看,它们是整个源码包的子包,与主包同名。
如果不需要主包,请确保其
%files
列表为空,并且不会生成它。看“使用 %files 列表控制包”部分。