手册:AMD64/使用Gentoo/Portage功能特性
Portage特性
Portage有几个附加的特性,它们能够令您的Gentoo之旅更加愉快。这些特性中的大多数依赖于某些能够提高性能、可靠性、安全性等的软件工具。
为了打开或者关闭某一Portage特性您需要编辑 /etc/portage/make.conf中的 FEATURES变量,这个变量包含不同的特性关键字,用空格分开。在一些情况下您可能还需要额外的安装被这个特性所依赖的工具。
并不是所有Portage所支持的特性都在这里列出。完整的概述,请查阅make.conf手册页:make.conf
user $
man make.conf
查看 FEATURES 的默认设置,运行emerge --info并且查找FEATURES变量或者用grep 显示它:
user $
emerge --info | grep ^FEATURES=
分布式编译
使用distcc
distcc 是一个分布式编译程序,可以把编译任务分配给同一网络中的不同机器,这些机器的配置不必完全相同。distcc客户端发送所有必须的信息给所有可利用的distcc服务器(运行distccd的机器)。这样它们每一个都能为客户端编译一部分源码。所获得的效果就是更短的编译时间。
您可以在Gentoo Distcc文档里找到更多的关于Distcc的信息(包括如何让它在Gentoo上工作)。
安装 distcc
Distcc使用一个图形化监视器来监视您的机器发送出去的编译工作。请把 USE=gnome
或 USE=gtk
放进您的USE设置中。
root #
emerge --ask sys-devel/distcc
激活Portage的distcc支持
将 distcc
添加到/etc/portage/make.conf.中的 FEATURES </ var>变量中。 接下来,编辑MAKEOPTS变量,并增加系统允许的并行构建的数量。 一个已知的方法是填写 -jN
其中N
是运行distccd(包括当前主机)的CPU数量+1(或者核心数+1),但这只是一个建议。
现在运行 distcc-config并输入已有的DistCC服务器。作为一个简单例子,我们假设已有的DistCC服务器是192.168.1.102(当前主机)、192.168.1.103和192.168.1.104(两个远端服务器):
root #
distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
当然,也不要忘了运行distccd系统服务:
root #
rc-update add distccd default
root #
/etc/init.d/distccd start
缓冲编译结果
关于ccache
ccache是一个快速编译器缓存。 无论何时编译应用程序,它都将缓存中间结果,以便每当重新编译相同的程序时,编译时间大大减少。 第一次运行ccache时,它会比正常编译慢得多。 但是后续的重新编译应该更快。 ccache只有在相同的应用程序将被重新编译多次(或相同应用程序的升级频繁发生)时才有用; 因此它通常只对软件开发人员有用。
如果您对ccache的工作机制有兴趣,请访问homepage主页.
已知ccache会导致大量的编译失败。 有时ccache会保留旧代码对象或损坏的文件,这可能导致无法破损的源码。 如果发生这种情况(例如"File not recognized: File truncated"出现在构建日志中),请尝试重新编译ccache导致错误的应用程序 (
FEATURES="-ccache"
到/etc/portage/make.conf)安装 ccache
要安装ccache,只需要:
root #
emerge --ask dev-util/ccache
激活Portage ccache 支持
打开 /etc/portage/make.conf并添加ccache
到FEATURES变量。然后添加一个新的变量ccache
并设置它为ccache
:
FEATURES="ccache"
CCACHE_SIZE="2G"
要检查ccache是否运行,只需让它提供给您它的统计数据。因为Portage使用一个不同的ccache主目录,您需要设定CCACHE_DIR变量:
root #
CCACHE_DIR="/var/tmp/ccache" ccache -s
/var/tmp/ccache/是Portage的默认ccache主目录;为了修改这个设置,您可以设定/etc/portage/make.conf中的CCACHE_DIR参数。
不过,如果您运行 ccache ,它使用的默认目录是${HOME}/.ccache/。这就是为什么当您查询(Portage)ccache统计数据的时候您需要设定 CCACHE_DIR参数的原因。
非Portage编译中使用ccache
如果您需要在非Portage编译中使用ccache,添加 /usr/lib/ccache/bin/到您 PATH参数里靠前的位置(在/usr/bin之前)。这一点可以通过编辑在您用户主目录中的~/.bash_profile文件来实现。使用~/.bash_profile是定义 PATH参数的一个方式
PATH="/usr/lib/ccache/bin:${PATH}"
二进制包支持
创建预编译包
Portage 也支持安装预编译软件包。尽管 Gentoo 本身并不提供预编译包,但 Portage 依然能够处理预编译包。
如果某个包已经被安装在您的系统上,您可以用 quickpkg 来创建预编译包。也可以用带有 --buildpkg
或 --buildpkgonly
选项的 emerge 命令。
如果您希望 Portage 为您所安装的每一个软件包创建预编译软件包,那么请在 FEATURES 中添加 buildpkg
变量。
预编译包的更多扩展支持可以用 catalyst 得到。关于catalyst的更多信息请参阅 Catalyst FAQ。
安装预编译包
尽管Gentoo并不提供,但是您可以自己建立一个“中心仓库”来存放预编译包。如果您希望使用这个仓库,您需要设定PORTAGE_BINHOST参数使Portage能够知道它。例如,如果预编译包在 ftp://buildhost/gentoo 上:
PORTAGE_BINHOST="ftp://buildhost/gentoo"
当您需要安装预编译包的时候,在emerge命令后的 --getbinpkg
选项旁加入 --usepkg
选项。前者让emerge命令从预定的服务器上下载预编译包,后者让emerge首先试图安装预编译包,如果预编译包不存在,那么才下载并编译源码。
例如:用预编译包安装gnumeric
root #
emerge --usepkg --getbinpkg gnumeric
关于emerge的预编译包的更多信息请参阅emerge手册页:
user $
man emerge
将预构建的软件包分发给他人
如果预构建的软件要分发给其他人,请确保这样做是被允许的。 检查上游软件包的分发要求。 例如,对于在GNU GPL协议下发布的软件,源代码必须与二进制文件一起提供。
如果构建的二进制程序不可分发,则Ebuild可以在其RESTRICT 变量中定义 bindist
限制。 有时,此限制取决于一个或多个USE标志。
默认情况下,Portage将不会屏蔽任何包,因为有限制。 这可以通过在/etc/portage/make.conf中设置ACCEPT_RESTRICT变量来全局更改。 例如,要掩盖具有bindist
限制的软件包,请将以下行添加到make.conf:
ACCEPT_RESTRICT="* -bindist"
还可以通过将ACCEPT_RESTRICT选项用于emerge命令,来覆盖--accept-restrict
变量。 例如, --accept-restrict=-bindist
将临时屏蔽带有bindist
限制的包。
还可以考虑在分发包时设置ACCEPT_LICENSE变量。 请参阅 授权许可。
每个 用户完全有责任遵守软件许可条款和每个用户国家的法律。 ebuilds(RESTRICT或LICENSE)定义的元数据变量可以为禁止预编译文件分发提供指导。但是Portage的输出或Gentoo开发人员的回答 不是 法律声明,不应该依赖他们。 谨慎遵守您的当地的法律。
下载文件
验证源文件
要重新验证完整性并(可能)重新下载当前所有安装的软件包以前删除或损坏的 distfiles,请运行:
root #
emerge --ask --fetchonly --emptytree @world