分类: LINUX
2008-08-25 13:12:25
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服务器(运行distccd的机器)。这样它们每一个都能为客户端编译一部分源码。所导致的效果就是更短的编译时间。
您可以在里找到更多的关于distcc的信息(包括如何让它在Gentoo上工作)。
Distcc使用一个图形化监视器来监视您的机器发送出去的编译工作。如果您使用GNOME,那么将“gnome”放入您的USE设置中。但是,如果您不使用GNOME而仍然希望使用这个监视器,那么就把“gtk”放进您的USE设置中。
代码 2.1: 安装distcc |
# emerge distcc |
添加distcc到/etc/make.conf之中的FEATURES变量。然后,设定您合意的MAKEOPTS变量。一个众所周知的参数是"-jX",其中X为运行distccd主机(包含当前主机)的CPU数目加上一,但是您也可能用其他的数字来得到更好的结果。
现在运行distcc-config并输入已有的DistCC服务器。作为一个简单例子,我们假设已有的DistCC服务器是192.168.1.102(当前主机)、192.168.1.103和192.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 |
3.c. 缓冲编译结果
ccache是一个快速的编译器缓存。当您编译一个程序的时候,它会缓存中间的结果。这样,不论什么时候您重新编译同一个程序,编译所需要得时间将被大大缩短。对于普通的编译来说,这可以提高编译速度5到10倍。
如果您对ccache的工作机制有兴趣,请访问.
要安装ccache,只需要运行emerge ccache:
代码 3.1: 安装ccache |
# emerge ccache |
打开/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编译中使用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的更多信息请参阅.
尽管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变量里。
当您以root身份运行Portage,FEATURES="userfetch"可以让Portage在下载源码包的时候放弃root特权。这是一个小小的安全性的提高。