当前位置: 首页 > 文档资料 > Gentoo Linux 手册 >

1. USE 标识 (Cure: flag, 标而识之, 以一些 "标记" 让 Portage 系统可以 "识别" 我们的意图)

优质
小牛编辑
130浏览
2023-12-01

1.a. 什么是 USE 标识?

USE 标识之缘由

当您在安装 Gentoo 的时候 (或是无论哪个发行版, 又或是别的什么操作系统 (or even operating system for that matter)), 您将基于工作环境的需求作出各种选择. 一个服务器的配置不同于一个工作站, 一个游戏目的的工作站不 同于一个用于 3D 渲染的工作站.

这不仅限于哪些包装或不装, 还涉及一个包到底有无必要支持某些功能特性. 如果您不需要 OpenGL, 那何必把 OpenGL 装上, 还让您的软件包们都编译加入对 OpenGL 功能特性的支持? 如果您不打算用 KDE, 那何必为您的软件包们加入 KDE 支持? 尤其 是当这些软件完全可以不要 KDE 支持而运作流畅的情况下.

为了帮助用户们决定哪些软件包装或不装, 哪些特性激活或不激活 (activate), 我们需要有一种简单的办法以让用户可以轻松 地指定他/她的工作环境. 这让用户们得去认真思考自己到底想要的是什么, 也同时让我们的包管理系统, Portage, 简化了作 出有用决定的过程.

USE 标识之定义

我们来看看 USE 标识本身. USE 标识是这样一个关键字, 它用来表达针对某个特定概念的支持与依赖性信息 (Such a flag is a keyword that embodies support and dependency-information for a certain concept). 如果您定义 了某个 USE 标识, Portage 就能知道您需要针对该关键字的相关支持. 自然, 这也将让一个软件包的依赖性发生变化.

下面举个例子: 关键字 kde. 如果您的 USE 变量里没有这一关键字, 那么所有包含可选 (optional) KDE 支持 的软件包在编译时都不会加入对 KDE 的支持. 所有包含可选 (optional) KDE 依赖性的软件包在安装时都 不会 安装 KDE 支持库 (不会作为依赖包安装进来). 如果您定义了 kde 关键字, 则这些软件包都 加入对 KDE 的支持, 也会把 KDE 支持库以依赖包形式安装进来.

恰当地定义这些关键字, 将得到一个为您所需完全度身订造的系统.

都有哪些 USE 标识?

有两种 USE 标识: 全局的局部的.

  • 全局 USE 标识为多个软件包所用, 有效范围是整个系统. 这是大部分用户所知道的 USE 标识.
  • 局部 USE 标识为单个软件包所用, 以进行单个软件包级别的定制 (to make package-specific decision).

所有可用的全局性 USE 标识可以在这里找到或在本机 的 /usr/portage/profiles/use.desc 里找到. 下面给出一个小片段 (很少的一部分):

代码清单 1: 可用 USE 标识小片段
gtk     - 加入对 x11-libs/gtk+ (The GIMP Toolkit) 的支持 
gtk2    - 当一个程序既支持 gtk+-2.0.0 也支持 gtk+-1.2 时, 只选择前者.
gtkhtml - 加入对 gnome-extra/gtkhtml 的支持.
guile   - 加入对 dev-util/guile (Scheme 解释器) 的支持.
icc     - 当一个软件包支持 Intel C++ 编译器时就使用它 (来编译)
icc-pgo - 使用 icc 时启用 PGO 数据的生成或使用 (Enable PGO data generation or use when use icc).
imap    - 加入对 IMAP 的支持.

1.b. 使用 USE 标识

声明持久性的 USE 标识

相信您现在已意识到 USE 标识的重要性, 下面我们将告诉您如何声明 USE 标识. (In the hope you are convinced of the importance of USE-flags we will now inform you how to declare USE-flags.)

我们前面提到, 所有的 USE 标识都是在 USE 变量里声明的. 为了方便用户对 USE 标识的搜索和选用, 我们已经提供了 一份默认的 USE 设定. 该设定包含了我们认为大部分 gentoo 用户会用到的 USE 标识. 该默认设定声明于 /etc/make.profile/make.defaults 文件中. 我们来看看默认设定:

代码清单 2: 一个 x86 系统上 /etc/make.profile/make.defaults 中的 USE 变量
USE="x86 oss apm arts avi berkdb crypt cups encode foomaticdb gdbm gif gpm
     gtk gtk2 imlib jpeg kde gnome libg++ libwww mad mikmod motif mpeg ncurses
     nls oggvorbis opengl pam pdflib png python qt quicktime readline sdl
     slang spell ssl svga tcpd truetype X xml2 xmms xv zlib"

如您所见, 该变量已包含不少的关键字. 请不要修改 /etc/make.profile/make.defaults 中的 USE 变量来定制系统: 因为当您更新了 Portage 之后, 这些修改就会被覆盖.

要更改默认设定, 您得在 USE 变量中添加或移去关键字. 全局性的修改是通过定义 /etc/make.conf 中的 USE 变量来进 行的. 在这个变量中, 您添上自己所需的 USE 标识或移去不想要的. 要移去 USE 标识, 只需在关键字前添加一个小减号 ("-").

例如, 不要 KDE 和 QT 的支持但要 ldap 的, 则将下述 USE 定义到 /etc/make.conf 中:

代码清单 3: /etc/make.conf 中的 USE 设定一例
USE="-kde -qt ldap"

有时, 您想为一个 (或几个) 应用程序定义一些特定的 USE 标识而非为整个系统范围的. 要做到这点, 您需要创建 /etc/portage 目录 (如果它不存在的话) 并编辑 /etc/portage/package.use.

例如, 您不想全局性地加入 berkdb 支持而只想为 mysql 加入, 则添加:

代码清单 4: /etc/portage/package.use 例一
dev-db/mysql berkdb

当然, 您还可以专门针对某个应用程序禁用掉某些 USE 标识. 如, 如果您不想要 PHP 对 java 的支持:

代码清单 5: /etc/portage/package.use 例二
dev-php/php -java

声明临时性 USE 标识

有时您只想要某种 USE 设定那么一次. 您完全可以把 USE 变量以环境变量形式声明, 而无需编辑 /etc/make.conf 两次 (一次修改, 一次恢复. (Cure: 如下例临时性地去掉对 java 的支持, 就需要在安装前编辑一次 make.conf 以加入 -java, 装完后又得编辑一次 make.conf 以删掉临时加入的 -java)). 请记住, 当你重新 emerge 或升级该应用程序的时候 (无论 单独升级或是系统升级中的一部分), 您的这些设定都会失效.

下例中我们在安装 mozilla 时临时性地从 USE 设定中移去对 java 的支持.

注: emerge 命令将在 Portage 与软件中进行详细 介绍.

代码清单 6:
# USE="-java" emerge mozilla

继承 (Inheriting) USE 标识

某些软件包不仅仅跟随 (don't only listen to) USE 标识, 它们自身还提供 USE 标识. 当您安装这样一个软件包时, 它们提供的 USE 标识会被自动地添加到您的 USE 设定中. 请查看 /etc/make.profile/use.defaults 以获得这些提供 USE 标识的软件包列表:

代码清单 7: /etc/make.profile/use.defaults 小片段
gnome           gnome-base/gnome
gtk             x11-libs/gtk+
qt              x11-libs/qt
kde             kde-base/kdebase
motif           x11-libs/openmotif

优先权 (Precedence)

当然, 各种 USE 设定方式间有一定的优先权问题 (Of course there is a certain precedence on what setting has priority over the USE setting). 您肯定不想遇到明明声明了 USE="-java" 而 java 还是加进来的尴尬. 各 种 USE 设定方式直接的优先情况如下, 以优先度为序 (越靠前的优先度越低):

  1. /etc/make.profile/make.defaults 中的默认 USE 设定
  2. /etc/make.profile/make.defaults 中某个软件包被安装时继承下来的 USE 设定
  3. /etc/make.conf 中用户自定义的 USE 设定
  4. /etc/portage/package.use 中用户自定义的 USE 设定
  5. 环境变量中用户自定义的 USE 设定

要查看最终 Portage 会用到的 USE 设定情况, 运行 emerge info 将列出 Portage 所使用的所有相关变量 (包括 USE 变量) 以及它们的值.

代码清单 8: 运行 emerge info
# emerge info

让您的整个系统使用新的 USE 标识

如果您修改了 USE 标识, 并想让整个系统都以新的 USE 标识更新一遍, 您可以下述步骤来完成这事. 请注意, 由于下述步骤 要用上很长时间才能完成, 一些工作已经开始投入到这方面对 Portage 进行调整以让这一过程自动化且更快完成 (? Note however that these steps will take a long time to finish and that work is on the way to adjust Portage to handle this behaviour quicker and automatically).

首先, 以新的 USE 标识重新编译整个系统:

代码清单 9: 重编译您的整个系统
# emerge --emptytree world

然后, 以 Portage 的 depclean 功能清除掉一些不用的依赖关系, 它们在您 "老" 系统中有依赖关系, 而在新的 USE 标识下, 则已经没用了 (Next, run Portage' depclean to remove the conditional dependencies that were emerged on your "old" system but that have been obsoleted by the new USE flags).

敬告: 运行 emerge depclean 是非常危险的一项操作, 请小心处理. 请反复检查会被清除的 "不用的 (obsoleted)" 软件包列表, 以防止您需要的包被误删. 下例我们以 -p 参数来让 depclean 仅列出要清除的软 件包而不进行实际的清除动作

代码清单 10: 清除不用的软件包
# emerge -p depclean

一旦 depclean 完成, 您的系统就用上了新的 USE 设定了.

1.c. 特定软件包的 USE 标识

查看可用的 USE 标识

下一章 Portage 和软件中, 我们将介绍如何管理您安装了的软件以及 如何使用 emerge. 不过呢, 我们下面先向您展示如何查看某个软件包所用的 USE 标识, 以让您对 emerge 有个初步的认识.

我们以 mozilla 为例: 它会用到哪些 USE 标识呢? 我们用 emerge 加上 --pretend (不做任何实际的操作) 以及 --verbose (输出更多详细内容) 参数来查看:

代码清单 11: 查看已用的 USE 标识
# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild  N    ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap 
+gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail
-moznocompose -moznoxft 

我们还有别的工具可以做同样的事情. 实际上, 我们提供了一个专门用于处理软件包信息的工具 etcat, 它包含在 gentoolkit 软件包中. 我们首先安装 gentoolkit:

代码清单 12: 安装 gentoolkit
# emerge --usepkg gentoolkit

接着以 use 为参数运行 etcat 来查看某个软件包所用的 USE 标识. 如, gnumeric 软件包:

代码清单 13: 使用 etcat 来查看已用的 USE 标识
# etcat uses gnumeric
[ Colour Code : set unset ]
[ Legend      : (U) Col 1 - Current USE flags        ]
[             : (I) Col 2 - Installed With USE flags ]
 U I [ Found these USE variables in : app-office/gnumeric-1.2.0 ]
 - - libgda  : Adds GNU Data Access (CORBA wrapper) support for gnumeric
 - - gnomedb : unknown
 + + python  : Adds support/bindings for the Python language
 + + bonobo  : Adds support for gnome-base/bonobo (Gnome CORBA interfaces)