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)的区别在于,在构建 Software Collection 时必须将 --define 选项附加到 rpmbuild 命令中。
--define 选项定义 scl 宏,它使用 Software Collection spec 文件中配置的软件集合(软件包.spec)。
另外,要使用标准命令 rpmbuild -ba package.spec 来构建 Software Collection,请在 package.spec 文件中指定以下内容:
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 文件进行比较,请参考以下示例:
--- a/tbb.spec
+++ b/tbb.spec
@@ -66,11 +66,13 @@ PDF documentation for the user of the Threading Building Block (TBB)
 C++ library.
 
 %prep
-%setup -q -n %{sourcebasename}
+%setup -q -c -n %{name}
+cd %{sourcebasename}
 %patch1 -p1
 %patch2 -p1
 
 %build
+cd %{sourcebasename}
 %{?scl:scl enable %{scl} - << \EOF}
 make %{?_smp_mflags} CXXFLAGS="$RPM_OPT_FLAGS" tbb_build_prefix=obj
 %{?scl:EOF}
@@ -81,6 +83,7 @@ done
 
 %install
 rm -rf $RPM_BUILD_ROOT
+cd %{sourcebasename}
 mkdir -p $RPM_BUILD_ROOT/%{_libdir}
 mkdir -p $RPM_BUILD_ROOT/%{_includedir}
 
@@ -108,20 +111,20 @@ done
 
 %files
 %defattr(-,root,root,-)
-%doc COPYING doc/Release_Notes.txt
+%doc %{sourcebasename}/COPYING %{sourcebasename}/doc/Release_Notes.txt
 %{_libdir}/*.so.2
 
 %files devel
 %defattr(-,root,root,-)
-%doc CHANGES
+%doc %{sourcebasename}/CHANGES
 %{_includedir}/tbb
 %{_libdir}/*.so
 %{_libdir}/pkgconfig/*.pc
 
 %files doc
 %defattr(-,root,root,-)
-%doc doc/Release_Notes.txt
-%doc doc/html
+%doc %{sourcebasename}/doc/Release_Notes.txt
+%doc %{sourcebasename}/doc/html
 
 %changelog
 * Wed Nov 13 2013 John Doe <jdoe@example.com> - 4.1-5.20130314
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.