Ebuild 阶段函数
从源代码安装软件包时,阶段函数调用顺序为 pkg_pretend
、pkg_setup
、src_unpack
、src_prepare
、src_configure
、src_compile
、src_test
(可选,FEATURES="test"
)、src_install
、pkg_preinst
、pkg_postinst
。从二进制文件安装软件包时,阶段函数调用顺序为 pkg_pretend
、pkg_setup
、pkg_preinst
、pkg_postinst
。由于某些阶段并非从一开始就引入,您可以查看 EAPI 使用和描述 以了解概述,以及在哪个 EAPI 中引入了哪些阶段。
为了易读性,Ebuild 通常应按照上述调用顺序定义阶段。
pkg_pretend
函数用于执行各种早期健全性检查,例如确保启用了某些内核选项。务必记住,pkg_pretend
与其余阶段函数序列分开运行。因此,不会保存环境或传播到下一阶段。此外,在此阶段无法保证满足 ebuild 依赖关系。
pkg_prerm
和 pkg_postrm
函数在卸载软件包时调用。 pkg_config
函数用于任何特殊的软件包配置——仅在用户显式请求时运行。 pkg_nofetch
函数用于当 RESTRICT="fetch"
软件包需要获取某些 SRC_URI
组件时。
在从 pkg_preinst
到 pkg_postinst
的转换过程中,文件从沙盒化临时安装位置复制到活动文件系统,并且 Portage 记录已安装文件的摘要。
在测试或调试时,您可以指示 Portage 执行 ebuild 的特定阶段函数,方法是使用 ebuild
命令,有关更多信息,请参阅 ebuild(1)
手册页。
下载软件包的源代码发生在任何这些阶段之前,因此 emerge --fetchonly
应该执行您需要的全部网络访问(除非您使用的是实时 ebuild)。此范围之外的网络访问不会缓存在本地(例如在 ${DISTDIR}
中,请参阅 预定义只读变量),这使得难以实现可重复构建(请参阅 VCS 源的缺点)。通过使用本地文件、扩展 SRC_URI
(请参阅 Ebuild 定义的变量)等避免在任何阶段进行网络访问。
默认阶段函数
默认的 pkg_nofetch
和 src_*
阶段函数可以通过名称以 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
函数。