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

3. Portage特性

内容:

3.a. Portage特性

Portage有几个附加的特性,它们能够令您的Gentoo之旅更加愉快。这些特性中的大多数依赖于某些能够提高性能、可靠性、安全性等的软件工具。

为了打开或者关闭某一Portage特性您需要编辑/etc/make.conf中的FEATURES变量,这个变量包含不同的特性关键字,用空格分开。在一些情况下您可能还需要额外的安装被这个特性所依赖的工具。

并不是所有Portage所支持的特性都在这里列出。完整的概述,请查阅make.conf手册页。

代码 1.1: 查阅make.conf手册页

$ man make.conf

查看特性的默认设置,运行emerge --info并且查找FEATURE变量或者用grep显示它:

代码 1.2: 找出已经被设定的特性

$ emerge --info | grep FEATURE

3.b. 分布式编译

使用distcc

distcc是一个分布式编译程序,可以把编译任务分配给同一网络中的不同机器,这些机器的配置不必完全相同。distcc客户端发送所有必须的信息给所有可利用的distcc服务器(运行distccd的机器)。这样它们每一个都能为客户端编译一部分源码。所导致的效果就是更短的编译时间。

您可以在Gentoo Distcc文档里找到更多的关于distcc的信息(包括如何让它在Gentoo上工作)。

安装distcc

Distcc使用一个图形化监视器来监视您的机器发送出去的编译工作。如果您使用GNOME,那么将“gnome”放入您的USE设置中。但是,如果您不使用GNOME而仍然希望使用这个监视器,那么就把“gtk”放进您的USE设置中。

代码 2.1: 安装distcc

# emerge distcc

激活Portage支持

添加distcc/etc/make.conf之中的FEATURES变量。然后,设定您合意的MAKEOPTS变量。一个众所周知的参数是"-jX",其中X为运行distccd主机(包含当前主机)的CPU数目加上一,但是您也可能用其他的数字来得到更好的结果。

现在运行distcc-config并输入已有的DistCC服务器。作为一个简单例子,我们假设已有的DistCC服务器是192.168.1.102(当前主机)、192.168.1.103192.168.1.104(两个远端服务器):

代码 2.2: 配置Distcc,使用已有的三个DistCC服务器

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

当然,也不要忘了运行distccd系统服务:

代码 2.3: 开始Distcc系统服务

# rc-update add distccd default
# /etc/init.d/distccd start

3.c. 缓冲编译结果

关于ccache

ccache是一个快速的编译器缓存。当您编译一个程序的时候,它会缓存中间的结果。这样,不论什么时候您重新编译同一个程序,编译所需要得时间将被大大缩短。对于普通的编译来说,这可以提高编译速度5到10倍。

如果您对ccache的工作机制有兴趣,请访问ccache主页.

安装ccache

要安装ccache,只需要运行emerge ccache:

代码 3.1: 安装ccache

# emerge ccache

激活Portage支持

打开/etc/make.conf并添加ccache到FEATURES变量。然后添加一个新的变量CCACHE_SIZE并设置它为"2G":

代码 3.2: 在/etc/make.conf中设定CCACHE_SIZE

CCACHE_SIZE="2G"

要检查ccache是否运行,只需让它提供给您它的统计数据。因为Portage使用一个不同的ccache主目录,您需要设定CCACHE_DIR变量:

代码 3.3: 查看ccache统计数据

# CCACHE_DIR="/var/tmp/ccache" ccache -s

/var/tmp/ccache是Portage的默认ccache主目录;为了修改这个设置,您可以设定/etc/make.conf中的CCACHE_DIR参数。

不过,如果您运行ccache,它使用的默认目录是${HOME}/.ccache。这就是为什么当您查询(Portage)ccache统计数据的时候您需要设定CCACHE_DIR参数的原因。

非Portage C编译中使用ccache

如果您需要在非Portage编译中使用ccache,添加/usr/lib/ccache/bin到您PATH参数里靠前的位置(在/usr/bin之前)。这一点可以通过编辑在您用户主目录中的.bash_profile文件来实现。使用.bash_profile是定义PATH参数的一个方式.

代码 3.4: 编辑.bash_profile

PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"

3.d. 二进制包支持

创建预编译包

Portage支持用预编译包安装。尽管Gentoo本身并不提供预编译包(除GRP快照之外),Portage依然能够处理预编译包。

如果某个包已经被安装在您的系统上,您可以用quickpkg来创建一个预编译包。也可以用带有--buildpkg--buildpkgonly选项的emerge命令。

如果您希望Portage为您所安装的每一个单独的包创建预编译包,在FEATURES中添加buildpkg参数.

预编译包的更多扩展支持可以用catalyst得到。关于catalyst的更多信息请参阅Catalyst FAQ.

安装预编译包

尽管Gentoo并不提供,但是您可以自己建立一个“中心仓库”来存放预编译包。如果您希望使用这个仓库,您需要设定PORTAGE_BINHOST参数使Portage能够知道它。例如,如果预编译包在ftp://buildhost/gentoo上:

代码 4.1: 在/etc/make.conf中设定PORTAGE_BINHOST参数

PORTAGE_BINHOST="ftp://buildhost/gentoo"

当您需要安装预编译包的时候,在emerge命令后的--getbinpkg选项旁加入--usepkg选项。前者让emerge命令从预定的服务器上下载预编译包,后者让emerge首先试图安装预编译包,如果预编译包不存在,那么才下载并编译源码。

例如:用预编译包安装gnumeric

代码 4.2: 安装gnumeric的预编译包

# emerge --usepkg --getbinpkg gnumeric

关于emerge的预编译包的更多信息请参阅emerge手册页:

代码 4.3: 阅读emerge手册页

$ man emerge

3.e. 下载文件

并行下载

当您在编译一系列软件的时候,Portage能在编译某一个包的同时下载编译列表中后面的包的源码,这样就缩短了安装时间。如果您希望使用这种功能,添加“parallel-fetch”到您的FEATURES变量里。

Usersfetch

当您以root身份运行Portage,FEATURES="userfetch"可以让Portage在下载源码包的时候放弃root特权。这是一个小小的安全性的提高。