手册:AMD64/使用Gentoo/Portage功能特性

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Working/Features and the translation is 100% complete.
AMD64 手册
安装
关于安装
选择安装媒介
配置网络
准备磁盘
安装 stage3
安装基础系统
配置内核
配置系统
安装系统工具
配置引导程序
安装收尾
使用 Gentoo
Portage 介绍
USE 标记
Portage 功能特性
Initscript 系统
环境变量
使用 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=gnomeUSE=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:

文件 /etc/portage/make.conf开启 Portage 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参数的一个方式

文件 ~/.bash_profile设置 ccache 路径 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 上:

文件 /etc/portage/make.conf添加 PORTAGE_BINHOST
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

文件 /etc/portage/make.conf只接受预编译包
ACCEPT_RESTRICT="* -bindist"

还可以通过将ACCEPT_RESTRICT选项用于emerge命令,来覆盖--accept-restrict 变量。 例如, --accept-restrict=-bindist将临时屏蔽带有bindist 限制的包。

还可以考虑在分发包时设置ACCEPT_LICENSE变量。 请参阅 授权许可

重要
每个 用户完全有责任遵守软件许可条款和每个用户国家的法律。 ebuilds(RESTRICTLICENSE)定义的元数据变量可以为禁止预编译文件分发提供指导。但是Portage的输出或Gentoo开发人员的回答 不是 法律声明,不应该依赖他们。 谨慎遵守您的当地的法律。

下载文件

验证源文件

要重新验证完整性并(可能)重新下载当前所有安装的软件包以前删除或损坏的 distfiles,请运行:

root #emerge --ask --fetchonly --emptytree @world