配置文件保护

Portage 包含一个配置文件保护系统,这意味着 ebuild 不用担心意外地覆盖 /etc 中的文件。这被称为“保护”,由 CONFIG_PROTECTCONFIG_PROTECT_MASK 变量控制。

任何在 CONFIG_PROTECT 中列出的目录(及其所有子目录),除了在 CONFIG_PROTECT_MASK 中列出的目录(及其子目录),都会在 Portage 将镜像从 DESTDIR 复制到 ROOT 时自动“保护”。Portage 不会直接安装受保护的文件,而是将其安装为 ._cfg0000_filename。然后,用户可以根据需要使用 etc-updatedispatch-conf 文件来处理这些文件。

软件包不得通过 pkg_postinst 或类似方法来尝试覆盖此系统。如果您需要以特定方式重命名、删除或更改文件,则应显示一条消息通知用户。

ebuild 可以使用 Portage 的 环境文件 机制来追加到 CONFIG_PROTECT_MASK 变量。ebuild 必须生成一个 env.d 文件,然后使用 doenvdnewenvd 安装它。 emerge 将调用 env-update 并生成适当的环境以继续其合并操作。以下代码片段(来自 src_install)将导致 /etc/test.cfg 自动合并,而无需在合并软件包后调用 etc-update

	newenvd - 99my-pkg <<< "CONFIG_PROTECT_MASK=\"/etc/test.cfg\""