声明: 本手册已经被新版本代替了,不再被维护。

5. 改造Portage树

内容:

5.a. 使用Portage树的一个子集

排除软件包/类别

你可以有选择地更新特定的类别/软件包并且忽略其他类别/软件包。我们通过让emerge --sync在执行rsync的时候排除个别类别/软件包来实现这个功能。

你需要在/etc/make.conf中赋予--exclude-from变量一个文件名,该文件应包含你想要排除的软件包。

代码 1.1: 在/etc/make.conf中指定包含排除软件包条目的文件

PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"

代码 1.2: 在/etc/portage/rsync_excludes中设定排除所有游戏

games-*/*

然而要注意的是这可能导致依赖性问题,因为新的、允许安装的软件包可能依赖于那些新的、但被排除的软件包。

5.b. 添加非官方Ebuild

定义一个Portage Overlay目录

可以让你的Portage使用官方Portage树里面没有的ebuild。创建一个新的目录(比如/usr/local/portage)用以存放第三方ebuild。请在新目录中使用跟官方Portage树一样的目录结构!

然后在/etc/make.conf中定义PORTDIR_OVERLAY变量,使它指向刚才创建的目录。现在,每当你用到Portage的时候,这些ebuilds也会被同时计算在内,并且当你下次运行emerge --sync时,不会删除/覆盖这些ebuild。

使用多个Overlay仓库

对于开发多个Overlay的许多高级用户而言,他们会在更新Portage树之前测试软件包或是想使用来源广泛的非官方ebuild。app-portage/gentoolkit-dev软件包提供了gensync工具,帮助你的overlay仓库时时都处于最新的状态。

可以用gensync一次更新所有的仓库,也可以选择更新其中的几个。每个仓库会有一个.syncsource文件于/etc/gensync/配置目录下,其内容包含仓库的存放位置、名字、ID等。

假设你有两个额外的仓库,分别名为java(存放开发中的java ebuild)和entapps(存放在家中为你给公司开发的应用程序)。那么可以通过以下命令来更新这些仓库:

代码 2.1: 使用gensync更新仓库

# gensync java entapps

5.c. 非Portage维护的软件

Portage环境下使用自己维护的软件

尽管Portage已经提供了某些软件,但是某些情况下你还是想自己配置、安装和维护这些软件,而不是希望Portage为你自动完成这些过程。典型的例子是内核源码和nvidia驱动程序。你可以配置一下Portage让它知道某个软件包已经通过手动安装到系统中了。这个过程叫做注入”,Portage是通过/etc/portage/profile/package.provided文件来实现这个功能的。

举个例子,如果你想告诉Portage已经手动安装了gentoo-sources-2.6.11.6,那么把下面一行添加到/etc/portage/profile/package.provided文件里:

代码 3.1: package.provided范例

sys-kernel/gentoo-sources-2.6.11.6