2.12. 构建 Software Collection
如果您正确地转换了软件集合的传统 spec 文件,如 第 2.10 节 “转换一个一致的 Spec 文件” 所述,您将能够在 Software Collection 和传统的构建根目录中构建生成的软件包。在传统构建 root 中构建转换的软件包将生成传统的基础系统 RPM 软件包,而构建包含 %{scl}-build 的 Software Collection 构建 root 将生成一个 Software Collection 软件包。
要在您的系统中构建 Software Collection,请运行以下命令:
rpmbuild -ba package.spec --define 'scl name'
rpmbuild -ba package.spec --define 'scl name'
上面显示的命令和用于构建传统软件包的标准命令(rpmbuild -ba package.spec)的区别在于,在构建 Software Collection 时必须将
--define 选项附加到 rpmbuild 命令中。
--define 选项定义 scl 宏,它使用 Software Collection spec 文件中配置的软件集合(软件包.spec)。
另外,要使用标准命令 rpmbuild -ba package.spec 来构建 Software Collection,请在
package.spec 文件中指定以下内容:
BuildRequires: software_collection-build
BuildRequires: software_collection-build
其中 software_collection 是 Software Collection 的名称。
2.12.1. 在没有构建子软件包的情况下重建 Software Collection 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当您要重建没有构建子软件包(software_collection-build)的软件集合时,您可以通过重建 Software Collection metapackage 来创建构建子软件包,从而避免使用 rpmbuild -ba package.spec --define 'scl name' 命令。
请注意,您需要在您的系统上安装了 scl-utils-build 软件包,否则使用 rpmbuild 命令重建 Software Collection metapackage 将失败。
有关 scl-utils-build 软件包的更多信息,请参阅 第 1.3 节 “启用对 Software Collections 的支持”。
2.12.2. 避免 debuginfo 文件冲突 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当您构建指定了同一
Source 标签的两个 Software Collection 软件包(或传统的 RPM 软件包和 Software Collection 软件包),因此将源文件解包到 %_builddir 目录下的同一目录中,它们的 debuginfo 软件包将存在文件冲突。由于这些冲突,用户无法同时在同一系统中安装这两个软件包。
为避免这些文件冲突,必须更改其中一个软件包的 spec 文件,将其上游源解包到唯一的命名的根目录中。这会在
%_builddir 目录下的构建树中添加更多目录级别。这样,debuginfo 软件包生成脚本会生成 debuginfo 文件,该文件与其他 debuginfo 软件包中的文件不冲突。
要查看 diff 文件将原始 spec 文件与更改的 spec 文件进行比较,请参考以下示例: