Ebuild 阶段函数

从源代码安装软件包时,阶段函数调用顺序为 pkg_pretendpkg_setupsrc_unpacksrc_preparesrc_configuresrc_compilesrc_test(可选,FEATURES="test")、src_installpkg_preinstpkg_postinst。从二进制文件安装软件包时,阶段函数调用顺序为 pkg_pretendpkg_setuppkg_preinstpkg_postinst。由于某些阶段并非从一开始就引入,您可以查看 EAPI 使用和描述 以了解概述,以及在哪个 EAPI 中引入了哪些阶段。

为了易读性,Ebuild 通常应按照上述调用顺序定义阶段。

How the ebuild phase functions are processed

pkg_pretend 函数用于执行各种早期健全性检查,例如确保启用了某些内核选项。务必记住,pkg_pretend 与其余阶段函数序列分开运行。因此,不会保存环境或传播到下一阶段。此外,在此阶段无法保证满足 ebuild 依赖关系。

pkg_prermpkg_postrm 函数在卸载软件包时调用。 pkg_config 函数用于任何特殊的软件包配置——仅在用户显式请求时运行。 pkg_nofetch 函数用于当 RESTRICT="fetch" 软件包需要获取某些 SRC_URI 组件时。

在从 pkg_preinstpkg_postinst 的转换过程中,文件从沙盒化临时安装位置复制到活动文件系统,并且 Portage 记录已安装文件的摘要。

在测试或调试时,您可以指示 Portage 执行 ebuild 的特定阶段函数,方法是使用 ebuild 命令,有关更多信息,请参阅 ebuild(1) 手册页。

下载软件包的源代码发生在任何这些阶段之前,因此 emerge --fetchonly 应该执行您需要的全部网络访问(除非您使用的是实时 ebuild)。此范围之外的网络访问不会缓存在本地(例如在 ${DISTDIR} 中,请参阅 预定义只读变量),这使得难以实现可重复构建(请参阅 VCS 源的缺点)。通过使用本地文件、扩展 SRC_URI(请参阅 Ebuild 定义的变量)等避免在任何阶段进行网络访问。

默认阶段函数

默认的 pkg_nofetchsrc_* 阶段函数可以通过名称以 default_ 开头并以相应阶段函数名称结尾的函数访问。例如,调用名为 default_src_compile 的函数等效于调用默认 src_compile 实现。

默认阶段函数为

  • default_pkg_nofetch
  • default_src_unpack
  • default_src_prepare
  • default_src_configure
  • default_src_compile
  • default_src_test
  • default_src_install

为上述每个阶段重新定义了一个名为 default 的函数,以便它将调用对应于当前阶段的 default_* 函数。例如,在 src_compile 阶段调用 default 函数等效于调用 default_src_compile 函数。