在 Gentoo 中的 portage 树中自定义 ebuild

在 Gentoo 中的 portage 树中自定义 ebuild

如何在 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 标记示例应该没问题)。

答案2

如果你切换到帕卢迪斯,这是 Gentoo 的替代包管理器(即 的替代品emerge),您可能可以设置一个要做到这一点。

相关内容