gentoo:如何删除取消合并包上的所有配置文件(从其 ebuild)
gentoo: how delete all config files on unmerging package (from its ebuild)
我正在制作我自己的个人包以收集有用的程序和配置。主要想法是出现这个包并为我的偏好准备系统。主要是它有效(它只取决于我最喜欢的所有程序),但我这里有两个问题:
如何在安装受影响的程序之前安装 USE 标志、UNMASK 等?
如何卸载它(emerge --unmerge 不会删除 /etc 中的文件,因此即使在卸载软件包后,USE 标志(和其他标志)仍然保留 - 我的目的是删除它们,因此 world
的下一次重建将不再使用它们 - 是的,这意味着很多程序将失去一些功能,例如对某些语言的支持,对某些其他程序的支持等等,这是期望的结果)
目前我的解决方案是:
软件包在/etc/portage/package.*
中有一些文件
1.1。我用 --nodeps
出现那个包(因此安装了配置文件)
1.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_prerm
和 pkg_postrm
函数,但即使在升级时也会调用它们(即当 unmerge 后跟立即 合并阶段)。您必须非常小心地区分这些用例……更可怕的是,在任何包中都有任何 "hardcoded"(和唯一)规则,您对它们没有任何影响……
所以,请永远不要删除任何受配置保护的文件,让用户来处理它们(他是老板,而不是包管理员)...
更新:如果你真的想删除一些受配置保护的文件,设置你自己的配置文件看起来更好。您可以设置 CONFIG_PROTECT_MASK
强制执行 取消保护 文件 and/or 目录。这样你就不需要修改任何 ebuilds and/or 编写丑陋的清理代码。
我正在制作我自己的个人包以收集有用的程序和配置。主要想法是出现这个包并为我的偏好准备系统。主要是它有效(它只取决于我最喜欢的所有程序),但我这里有两个问题:
如何在安装受影响的程序之前安装 USE 标志、UNMASK 等?
如何卸载它(emerge --unmerge 不会删除 /etc 中的文件,因此即使在卸载软件包后,USE 标志(和其他标志)仍然保留 - 我的目的是删除它们,因此
world
的下一次重建将不再使用它们 - 是的,这意味着很多程序将失去一些功能,例如对某些语言的支持,对某些其他程序的支持等等,这是期望的结果)
目前我的解决方案是:
软件包在
中有一些文件/etc/portage/package.*
1.1。我用
--nodeps
出现那个包(因此安装了配置文件)1.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_prerm
和 pkg_postrm
函数,但即使在升级时也会调用它们(即当 unmerge 后跟立即 合并阶段)。您必须非常小心地区分这些用例……更可怕的是,在任何包中都有任何 "hardcoded"(和唯一)规则,您对它们没有任何影响……
所以,请永远不要删除任何受配置保护的文件,让用户来处理它们(他是老板,而不是包管理员)...
更新:如果你真的想删除一些受配置保护的文件,设置你自己的配置文件看起来更好。您可以设置 CONFIG_PROTECT_MASK
强制执行 取消保护 文件 and/or 目录。这样你就不需要修改任何 ebuilds and/or 编写丑陋的清理代码。