gentoo:如何删除取消合并包上的所有配置文件(从其 ebuild)

gentoo: how delete all config files on unmerging package (from its ebuild)

我正在制作我自己的个人包以收集有用的程序和配置。主要想法是出现这个包并为我的偏好准备系统。主要是它有效(它只取决于我最喜欢的所有程序),但我这里有两个问题:

  1. 如何在安装受影响的程序之前安装 USE 标志、UNMASK 等?

  2. 如何卸载它(emerge --unmerge 不会删除 /etc 中的文件,因此即使在卸载软件包后,USE 标志(和其他标志)仍然保留 - 我的目的是删除它们,因此 world 的下一次重建将不再使用它们 - 是的,这意味着很多程序将失去一些功能,例如对某些语言的支持,对某些其他程序的支持等等,这是期望的结果)

目前我的解决方案是:

  1. 软件包在/etc/portage/package.*

    中有一些文件

    1.1。我用 --nodeps 出现那个包(因此安装了配置文件)

    1.2。我在没有那个标志的情况下再次出现它(因此安装了依赖项 使用正确的配置))

  2. 我创建(并安装)脚本来解析 /var/db/packages 我的包 CONTENTS 并删除所有 /etc/portage/something 文件 "manually" 我必须在取消合并包之前朗姆这个脚本

有更好的方法吗?

你刚才doing/understanding错了! (对不起:)

首先,除了metapackage(一个只有运行时依赖的空ebuild)还有其他方法:

  • 使用 sets 描述您的首选套餐。以常规方式管理您的 USE 标志(如果需要,包括每个包 USE)。
  • 中等复杂度的解决方案是编写元数据包 ebuild(您当前的情况)——但是,无论如何您都不能 mask/unmask USE 标记……
  • 如果您已经有了叠加层(显然)——定义您自己的配置文件将解决所有问题!在这里你可以随心所欲地管理一切:mask/unmask 任何 USE 标志,定义什么是 系统 预定义包对你意味着什么,等等......

不幸的是,我不使用 Gentoo portage(和 emerge)并且不知道是否可以有多个 additive 配置文件。我有 my own profiles here and it works perfectly with Paludis.

其次,从不卸载后删除任何配置文件(受配置保护)!没有软件包可以做到这一点,并且有很多原因......主要是用户可能修改了它们并且不想丢失他的更改。此外,就我个人而言,我更喜欢将我曾经接触过的所有配置都放在一个专用的 VCS 存储库中——如果有人,除了我,会删除 smth,那就不好了……

想象一个现实生活中的例子:用户想要重新安装一些包并且他有一堆配置文件,他花了一些时间来仔细编辑它们。简单的方法是 uninstall 然后再次 install -- 糟糕!他失去了他的配置! 此外,从 ebuild 的 POV 来看,你有 pkg_prermpkg_postrm 函数,但即使在升级时也会调用它们(即当 unmerge 后跟立即 合并阶段)。您必须非常小心地区分这些用例……更可怕的是,在任何包中都有任何 "hardcoded"(和唯一)规则,您对它们没有任何影响……

所以,请永远不要删除任何受配置保护的文件,让用户来处理它们(他是老板,而不是包管理员)...

更新:如果你真的想删除一些受配置保护的文件,设置你自己的配置文件看起来更好。您可以设置 CONFIG_PROTECT_MASK 强制执行 取消保护 文件 and/or 目录。这样你就不需要修改任何 ebuilds and/or 编写丑陋的清理代码。