[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]
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'):
|
如果你输入-1,etc-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用来下载档案文件的程序可以通过设置变量FETCHCOMMAND和RESUMECOMMAND来指定。在/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_proxy和ftp_proxy(注意是小写)来配置使用代理服务器。虽然你也可以在/etc/make.conf来做这个,但我们建议你是用一种更通用的方法如变量http_proxy和ftp_proxy(/etc/make.conf只用于Portage)请阅读有关环境变量这一章了解怎样声明系统范围的环境变量。
配置rsync
rsync是给emerge sync来更新你的Portage树。Portage用来改变rsync的行为的三个变量分别是:RSYNC_EXCLUDEFROM、RSYNC_RETRIES和RSYNC_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_OVERLAY。emerge 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)”),你可以设置变量AUTOCLEAN为no:
代码 27: 变量AUTOCLEAN |
AUTOCLEAN="no" |
编译相关的变量
我们已经朋到了大量的这种变量,但是我们还有些没有讨论过。安装Gentoo的人们都知道变量CHOST、CFLAGS和CXXFLAGS,这是编译器用来编译和优化软件包的。
更多有关这三个变脸的信息可以查看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在输出中使用色彩提高可读性。如果你不需要这个,你可以设置变量NOCOLOR为true:
代码 32: 变量NOCOLOR |
NOCOLOR="true" |
4.e. 资源列表
手册
如果你需要所有列出变量的快速参考,请查阅make.conf的手册:
代码 33: 查阅make.conf的手册 |
# man make.conf
|
注释的例子
文件/etc/make.conf包含了很多注释,其中包括了一些你可能感兴趣的样例。但是,绝大部分的人没有交互的升级/etc/make.conf而因此遗失了对这个文件的更新。你可以在我们的在线ViewCVS仓库找到最新的/etc/make.conf文件。
[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]