[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]


4. 控制Portage的行为

内容列表:

4.a. 配置文件的保护

保护?

       Portage有一个“保护文件”的概念,也就是说,当你更新软件时,它不会立即用新的版本覆盖这些文件,而是会先告诉你现在已经有了一个新的版本。这对配置文件(在/etc里的文件)来说当然是很有用的。

       它不会覆盖这些文件,反而会创建一个新的名为._cfg0000_<name>的文件,这里<name>是原文件名。然后就该用户自己来比较与已有文件的不同。用户也可以使用命令etc-update来简化这个程序。后面我们将会讲到etc-update

声明CONFIG_PROTECT

       Portage不会保护在文件的基础上保护一个文件,反而它只会保护整个文件夹。变量CONFIG_PROTECT列出了所有受保护的文件夹。所列文件夹里的子文件夹当然也是受保护的。我们在/etc/make.globals中定义变量CONFIG_PROTECT,但是如果你要修改的话,就应该在/etc/make.conf中声明它(为统一起见,/etc/make.conf是用作所有的Portage配置文件)。

代码 1: 一个CONFIG_PROTECT设置的样例

CONFIG_PROTECT="/etc /usr/share/config /usr/kde/3.1/share/config"

       如果你要保护某个文件夹,但不包括其所有的子文件,你可以通过将这些文件夹列表于变量CONFIG_PROTECT_MASK去掉保护。这个变量在/etc/make.globals中也有一个默认值,但是我们仍然应该在/etc/make.conf中声明:

代码 2: 一个CONFIG_PROTECT_MASK设置的样例

CONFIG_PROTECT_MASK="/etc/init.d"

       更多有关配置文件的保护的信息可以在emerge的在线帮助中找到:

代码 3: 获得有关配置文件保护的信息

# emerge --help config

etc-update

       etc-update是一个处理文件._cfg0000_<name>的工具。它提供了交互式的设置方式,也可以对一些微小的修改进行自动处理。

       运行etc-update是很直接的:

代码 4: 运行etc-update

# etc-update

       将微小的变化融入配置文件后,它会提示给你一系列的需要更新的受保护的文件。在底部你可能有几个可能的选择:

代码 5: etc-update选项

Please select a file to edit by entering the corresponding number.
              (-1 to exit) (-3 to auto merge all remaining files)
                           (-5 to auto-merge AND not use 'mv -i'): 

       如果你输入-1etc-update将不会作任何事情而退出。如果你输入-3或者-5所有的列出配置文件都将会被新的版本覆盖。因此很重要的一点,就是不要在开始学习选择不应该自动更新的配置文件。这个过程很简单,只是将输入处理配置文件办法的标号即可。

       作为一个例子,我们选择配置文件/etc/pear.conf

代码 6: 更新一个指定的配置文件

Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
[...]
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again

       现在你可以看到两个文件的不同之处。如果你肯定更新后的配置文件使用起来会没有问题,输入1。如果你肯定更新的配置文件不是很必要,或者并没有提供任何新的或者有用的信息,输入2。如果你要交互的更新你目前的配置文件,输入3

       在这里讲解太多的交互式合并并没多大用处。为了方便起见,我们着里将列出你可以在交互合并这两个文件所可能用到的命令。在这个程序里,你将会看到两行(原文件的和新文件的)和一个提示符,这里你可以输入下面的命令:

代码 7: Commands available for the interactive merging

ed:     编辑并使用这两个版本,每个都有一个头标识。
eb:     编辑并使用这两个版本。
el:     编辑并使用左边的版本。
er:     编辑并使用右边的版本。
e:      编辑一个新的版本。
l:      使用左边的版本。
r:      使用右边的版本。
s:      包含相同的行,并不给出具体信息。
v:      包含相同的行,并给出具体信息。
q:      退出。

       当你完成一个重要文件的更新时,你现在可以自动更新所有其他的配置文件了。如果找不到其他需要更新的配置文件,etc-update将会退出。

4.b. 网络选项

镜像

       随着Gentoo的日渐流行,镜像的使用应该受到极大的重视。Portage使用三个变量用于镜像:一个用于rsync镜像(这个用于更新你的Portage树),一个用于源文件(这个用于下载源代码),还有一个用于预编译软件包。

       所有可能的源文件镜像列表于Gentoo镜像页面。你也可以使用方便设置系统镜像的mirrorselect。但是首先,我们来一个个看看这些变量……

       变量SYNC包含了你希望使用的rsync镜像。比如,要使用rsync://rsync.namerica.gentoo.org/gentoo-portage,你可以在/etc/make.conf这样定义:

代码 8: 在/etc/make.conf里定义SYNC

SYNC="rsync://rsync.namerica.gentoo.org/gentoo-portage"

       变量GENTOO_MIRRORS包含了一系列的你希望使用的源代码镜像。比如,要使用ftp://ibiblio.org/pub/Linux/distributions/gentoo作为第一选择,使用http://www.gtlib.cc.gatech.edu/pub/gentoo作为第二选择,你可以在/etc/make.conf这样定义:

代码 9: 在/etc/make.conf里定义GENTOO_MIRRORS

GENTOO_MIRRORS="ftp://ibiblio.org/pub/Linux/distributions/gentoo
                http://www.gtlib.cc.gatech.edu/pub/gentoo"

       变量PORTAGE_BINHOST包含了一系里你希望使用的预编译软件包镜像。比如,要使用ftp://login:pass@grp.mirror.site/pub/grp/i686/athlon-xp,你可以在/etc/make.conf这样定义:

代码 10: 在/etc/make.conf里定义PORTAGE_BINHOST

PORTAGE_BINHOST="ftp://login:pass@grp.mirror.site/pub/grp/i686/athlon-xp"

Mirrorselect

       如果你要使用mirrorselect,首先安装它(如果你还没这样做的话)。

代码 11: 安装mirrorselect

# emerge mirrorselect

       现在你可以让mirrorselect自动为你选择最好的镜像,或者从一个列表中选择。有关更多怎样使用mirrorselect的信息,只需要在命令行运行mirrorselect,它将会给你一个有关mirrorselect的快速概述。

代码 12: 运行mirrorselect

# mirrorselect

下载

       Portage用来下载档案文件的程序可以通过设置变量FETCHCOMMANDRESUMECOMMAND来指定。在/etc/make.conf/etc/make.globals中有几个样例。默认情况下Portage将使用wget

代码 13: 默认的FETCHCOMMAND和RESUMECOMMAND

FETCHCOMMAND="/usr/bin/wget -t 5 --passive-ftp -P \${DISTDIR} \${URI}"
RESUMECOMMAND="/usr/bin/wget -c -t 5 --passive-ftp -P \${DISTDIR} \${URI}"

       变量${DISTDIR}将替换为下载文件保存的位置(/usr/portage/distfiles),而变量${URI}将替换为Portage要下载的文件。

       因为Portage默认情况下使用wget,你可以通过定义http_proxyftp_proxy(注意是小写)来配置使用代理服务器。虽然你也可以在/etc/make.conf来做这个,但我们建议你是用一种更通用的方法如变量http_proxyftp_proxy/etc/make.conf只用于Portage)请阅读有关环境变量这一章了解怎样声明系统范围的环境变量。

配置rsync

       rsync是给emerge sync来更新你的Portage树。Portage用来改变rsync的行为的三个变量分别是:RSYNC_EXCLUDEFROMRSYNC_RETRIESRSYNC_TIMEOUT

       一种用来“保护”ebuilds防止在运行emerge sync时将其升级或者删除的方法是使用变量RSYNC_EXCLUDEFROM。这个变量应该设置为rsync要使用的一个文件,用来排除指定文件,默认情况下这个文件是/etc/portage/rsync_excludes推荐使用这种方法,因为一不小心它可能破坏依赖性。我们稍后将讲到PORTDIR_OVERLAY,这是我们推荐使用的。有关更多这方面的信息,请阅读rsync的手册。

代码 14: 变量RSYNC_EXCLUDEFROM

RSYNC_EXCLUDEFROM="/etc/portage/rsync_excludes"

       当rsync失败后,它将测试一定的次数才转到另一个可能的rsync服务器。重试的此时是在RSYNC_RETRIES中定义,默认值为3

代码 15: 变量RSYNC_RETRIES

RSYNC_RETRIES="3"

       如果你使用一个(非常)慢的rsync服务器,如果没有流量rsync会超时终止。超时前等待的秒数可以在变量RSYNC_TIMEOUT中定义,默认值为180

代码 16: 变量RSYNC_TIMEOUT

RSYNC_TIMEOUT="180"

4.c. 文件夹位置

简介

       任何有关Portage的都可以配置,就是各种各样的任务和Poratage所需的文件等用的文件夹也如此。要改变这些默认位置(在/etc/make.globals中定义),你需要在/etc/make.conf中准确的定义这些变量。

警告: 如果你修改一个变量使其指向一个不同的位置,不要在路径后面加上/

Portage树

       Portage树的位置在变量PORTDIR中定义,默认值为/usr/portage

代码 17: 变量PORTDIR

PORTDIR="/usr/portage"

       如果你要在官方的Portage树后面紧接一个本地Portage树,你需要定义变量PORTDIR_OVERLAYemerge sync将不会影响这些文件夹位置:在这些位置中的ebuilds将不会更新和删除,但是也是你的Portage树的一部分。

代码 18: 变量PORTDIR_OVERLAY

PORTDIR_OVERLAY="/usr/local/portage"

源文件(distfiles)

       下载的源文件(因此成为distfiles)的位置在变量DISTDIR中定义,默认值为${PORTDIR}/distfiles

代码 19: 变量DISTDIR

DISTDIR="${PORTDIR}/distfiles"

软件包和RPMs

       预编译包的位置在变量PKGDIR中定义,默认值为${PORTDIR}/packages

代码 20: 变量PKGDIR

PKGDIR="${PORTDIR}/packages"

       RPMs(有一些软件包以RPM形式存在)的位置在变量RPMDIR中定义,默认值为${PORTDIR}/rpm

代码 21: 变量RPMDIR

RPMDIR="${PORTDIR}/rpm"

临时的Portage文件

       Poratage使用一个临时的文件夹来编译它的ebuilds,这个位置在变量PORTAGE_TMPDIR中定义,默认值为/var/tmp

代码 22: 变量PORTAGE_TMPDIR

PORTAGE_TMPDIR="/var/tmp"

       默认情况下,Portage将会在PORTAGE_TMPDIR下创建一个文件夹portage,这个是在变量BUILD_PREFIX中定义:

代码 23: 变量BUILD_PREFIX

BUILD_PREFIX="${PORTAGE_TMPDIR}/portage"

       如果你打算改变这个位置,确保这个临时文件夹是在一个有足够剩余空间的分区上:在编译大的软件时,这个文件夹可以超过2Gb的大小!

日志

       PORT_LOGDIR是一个特殊的变量,默认情况下没有设定。当你定义好后,Portage将会在这个指定的文件夹里创建每个ebuild的日志文件:

代码 24: 变量PORT_LOGDIR

PORT_LOGDIR="/var/log/portage"

4.d. 其他的Portage选项

优先值

       Portage支持在编译时有不同的优先值。如果你要Portage编译软件包时有一个较高的优先值(在编译时系统更稳定,但也增加了编译时间),你需要设置变量PORTAGE_NICENESS为一个正数:

代码 25: 变量PORTAGE_NICENESS

PORTAGE_NICENESS="3"

SLOT的软件包和自动清除

       在有些情况下,你需要一个软件包(包括库)的不同版本在你的系统上。Portage通过在ebuilds中定义变量SLOT来支持这个。作为一个用户,你不需要了解SLOT是怎样工作的,但是很必要知道它支持这个。

       如果你安装一个软件的新版本,Portage会检查变量SLOT是否在这个软件包中声明。如果已经声明,软件包(旧版和新版)之间的变量SLOT不同,Portage将不会改动这个软件包的旧版。

       但是,如果变量SLOT是一样的(大部分的情况下如此),默认情况下旧版的软件将会被删除。为了可以让用户打断这个删除,Portage将会倒计时一段时间。这个时间在变量CLEAN_DELAY中定义,默认值为5秒:

代码 26: 变量CLEAN_DELAY

CLEAN_DELAY="5"

       如果你不想要让Portage自动删除旧的版本(称作“清除(cleaning)”),你可以设置变量AUTOCLEANno

代码 27: 变量AUTOCLEAN

AUTOCLEAN="no"

编译相关的变量

       我们已经朋到了大量的这种变量,但是我们还有些没有讨论过。安装Gentoo的人们都知道变量CHOSTCFLAGSCXXFLAGS,这是编译器用来编译和优化软件包的。

       更多有关这三个变脸的信息可以查看gcc的帮助页面(info)或者在线的GCC在线手册.

代码 28: 获得有关CHOST, CFLAGS和CXXFLAGS的信息

# info gcc
(选择"Invoking gcc")
(选择"Optimize options")

       如果变量DEBUGBUILD已经定义,Portage将不会去掉程序和库文件来使得调试更件简单。这个会减缓你系统速度和增加文件大小。

代码 29: 变量DEBUGBUILD

# 不要设置这个为“false”,但可以删除这一行,Portage不会
# 检查这个值,它只会检查这个值是否定义
DEBUGBUILD="true"

       变量MAKEOPTS是给make使用的,用来简化一个软件包的编译。通常情况下是用来告诉make来并行运行几个编译(特别是你有一个多CPU系统,或者使用前面提到过的distcc)。

       要让make来同时并行运行三个编译,设置变量MAKEOPTS-j3

代码 30: 变量MAKEOPTS

MAKEOPTS="-j3"

       变量ROOT不应该在/etc/make.conf中设置,而是应该作为一个环境变量设置。Portage将会检查这个变量来确认软件包应该装在哪里。当然,这个默认为/。作为一个例子,我们给你展示一下怎样将gnumeric安装在/mnt/gentoo而不是你的当前系统:

代码 31: 变量ROOT

# ROOT="/mnt/gentoo" emerge gnumeric

输出的格式

       默认情况下,Portage在输出中使用色彩提高可读性。如果你不需要这个,你可以设置变量NOCOLORtrue

代码 32: 变量NOCOLOR

NOCOLOR="true"

4.e. 资源列表

手册

       如果你需要所有列出变量的快速参考,请查阅make.conf的手册:

代码 33: 查阅make.conf的手册

# man make.conf

注释的例子

       文件/etc/make.conf包含了很多注释,其中包括了一些你可能感兴趣的样例。但是,绝大部分的人没有交互的升级/etc/make.conf而因此遗失了对这个文件的更新。你可以在我们的在线ViewCVS仓库找到最新的/etc/make.conf文件。


[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]


本文档内容按照Creative Commons - Attribution / Share Alike协议发布。 Copyright 2004 Gentoo.LinuxSir.ORG 如果有什么问题、建议、意见、评论,请Email联系管理员