![在 Gentoo 中的 portage 树中自定义 ebuild](https://linux22.com/image/46153/%E5%9C%A8%20Gentoo%20%E4%B8%AD%E7%9A%84%20portage%20%E6%A0%91%E4%B8%AD%E8%87%AA%E5%AE%9A%E4%B9%89%20ebuild.png)
如何在 Gentoo 中自定义 ebuild,而不在自己的覆盖层中维护自定义包?
情况是我需要用paxctl
.但这样的软件包大约有 100 个,我不想自己在本地覆盖中观看更新。
如果没有这样的标记,Portage ebuild 就不会被编译。现在我必须更改/etc/portage/package.env
目录中的编译标志。 PAX 标记是一个更好的解决方案,但我不知道如何在 Gentoo 的 portage 树中做到这一点。
答案1
使用 portage 你可以用 来做到这一点package.env
。查找文档的正确位置是http://dev.gentoo.org/~zmedico/portage/doc/portage.html#config-bashrc-ebuild-phase-hooks。基本上您使用它的方式如下。首先,您创建(假设没有自定义的标准设置ROOT
)一个/etc/portage/env
.例如,您可以创建一个文件/etc/portage/env/paxmark
#paxmark
#Set this to what you need it to be
PAXFLAGS="-p"
post_src_install() {
find "${INSTALL}" -type x -print0 |xargs -0 -n 1 paxctl $PAXFLAGS
}
然后,对于您希望应用此功能的所有软件包,添加一个条目/etc/portage/package.env
:
#package.env example for paxmark
sys-apps/gcc paxmark
这会将paxmark
脚本应用到指定它的包。或者,您也可以创建一个/etc/portage/bashrc
用于全局覆盖的脚本(对此要非常小心)。
将军警告但是,由于您可以向所有阶段添加前挂钩和后挂钩,这可能很危险。请小心您所做的事情,因为所有使用该钩子的包现在都变得不比您的钩子脚本更强大。 (上面的 pax 标记示例应该没问题)。