Gentoo Logo

声明: 本文档已经不再有效且不再被维护了。


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


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特权。这是一个小小的安全性的提高。


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


打印

查看全部

更新于2013年 2月 24日

本文档的原始版本最后更新于2014年 4月 12日

总结: 学习Portage所拥有的特性,比如对分布式编译的支持,以及ccache等等。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86开发人员

Tavis Ormandy
Gentoo Alpha开发人员

Jason Huebel
Gentoo AMD64开发人员

Guy Martin
Gentoo HPPA开发人员

Pieter Van den Abeele
Gentoo PPC开发人员

Joe Kallar
Gentoo SPARC开发人员

John P. Davis
编辑

Pierre-Henri Jondot
编辑

Eric Stockbridge
编辑

Rajiv Manglani
编辑

Jungmin Seo
编辑

Stoyan Zhekov
编辑

Jared Hudson
编辑

Colin Morey
编辑

Jorge Paulo
编辑

Carl Anderson
编辑

Jon Portnoy
编辑

Zack Gilburd
编辑

Jack Morgan
编辑

Benny Chuang
编辑

Erwin
编辑

Joshua Kinard
编辑

Tobias Scherbaum
编辑

Xavier Neys
编辑

Joshua Saddler
编辑

Gerald J. Normandin Jr.
审校

Donnie Berkholz
审校

Ken Nowack
审校

Lars Weiler
投稿

Hans Joanphan
译者

吴传文
译者

杨珂
译者

陈永骥
译者

娄东斌
译者

余雷
译者

叶宝泰
译者

杨小广
译者

vivian.ye
译者

王国辉
译者

贾震
译者

余鈺炜
译者

陈代焱
译者

范华
译者

张乐
译者

沈辰俊
译者

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.