手册:PPC/使用/USE标记
PPC Handbook |
---|
安装 |
关于安装 |
选择安装媒介 |
配置网络 |
准备磁盘 |
安装 Stage3 |
安装基本系统 |
配置内核 |
配置系统 |
安装系统工具 |
配置引导程序 |
安装收尾 |
使用Gentoo |
Portage 介绍 |
USE 标记 |
Portage 功能特性 |
Initscript 系统 |
环境变量 |
使用Portage |
文件和目录 |
变量 |
混合使用不同的软件分支 |
额外的工具 |
自定义软件包仓库 |
高级特性 |
网络配置 |
介绍 |
高级配置 |
模块化网络 |
无线 |
添加功能 |
动态管理 |
什么是USE 标记
USE 标记的指导思想
你在安装gentoo(或者是其他发行版,甚至于其他特定操作系统)的时候,你要依据你工作的环境做出选择。服务器跟工作站的组织结构不同,游戏机跟3D工作站也会不一样。
不单只是选择你想要安装的包时如此,选择某一个包需要的特性时同样如此。如果你不需要OpenGL,为什么还要花费时间安装OpenGL并在其他包中加入对OpenGL的支持?如果你不用KDE,而且软件包没有KDE也能完美运行,为什么还要在编译这些包的时候加入KDE支持?
为了帮用户判断什么需要安装或激活,什么不需要;我们希望用户能用简单的方式设定他们自己的环境。这能促使用户判断他真正需要的东西,并让Portage做出有用的决定的过程变得简单。
USE 标记的设定
我们来具体看看 USE 标记。每一个标记都是代表对某特定概念的支持和依赖关系信息的关键字。如果你设定了某个 USE 标记,Portage会明白他们需要支持所选关键字。当然这同时也改变了这个包的依赖关系信息。
让我们看一个特殊示例:关键字 kde
。如果你的 USE 变量里面没有这个关键字,所有具有可选KDE支持的包在编译时都 不会 编译KDE支持。所有具有可选KDE依赖关系的包在安装时都 不会 (做为一个依赖关系而)安装KDE库。如果你设定了kde关键字,这些包在安装时都 会 编译KDE支持,而且KDE库也 会 (作为一个依赖关系而)被安装。
通过正确设定关键字,你会得到一个根据你的需要而定制的系统。
使用 USE 标记
声明永久 USE 标记
就像前面提到的,所有 USE 标记都声明在 USE 变量里面。为了让用户能方便地查找和选择 USE 标记,我们提供了一份默认的 USE 设定。这些设定是我们觉得Gentoo用户通常都要用到的 USE 标记的集合。这个默认设置在make.defaults 文件──你的profile声明。
你的系统使用的profile是符号链接 /etc/portage/make.profile 所指向的目录。每个profile叠加于某个更大的profile之上,最终的结果是这些profile的并集。初始profile是base profile( /var/db/repos/gentoo/profiles/base)。
要查看当前正在使用的USE标记(完整的),请使用 emerge --info:
root #
emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."
就像你看到的那样,这个变量已经包括了非常多的关键字。不要通过修改make.defaults 文件里的 USE 变量来满足你的需要:在升级Portage的时候,这个文件将会被覆盖。
要改变这个默认设置,你需要在 USE 变量里添加或移去关键字。这是通过在/etc/portage/make.conf里定义USE全局变量来实现的。在这个变量里,添加你需要的额外的USE标记,或者移去你不需要的USE标记。后者可通过在标记前面加个负号 (-
).前缀来实现。
例如,要移除对 KDE 和 QT 的支持,并添加对 LDAP 的支持,可以在/etc/portage/make.conf里声明USE如下:
/etc/portage/make.conf
Updating USE in make.confUSE="-kde -qt4 -qt5 ldap"
为单个包声明 USE 标记
如果你不是想为整个系统声明 USE 标记,而是想要为一个(或者几个)程序声明USE标记,你需要编辑/etc/portage/package.use文件。package.use 通常是一个文件,不过它也可以是一个充满子文件的目录;请看下面的提示和 man 5 portage 以获得更多如何使用这个约定的信息。下面的例子假设 package.use 是一个文件。
比如说,如果你不想全局的启用 Blu-ray 支持,你只想把它应用到 VLC 包,你可以这样做:
/etc/portage/package.use
Enabling Blu-ray support for VLCmedia-video/vlc bluray
如果 package.use 是一个已经存在的“目录”(而不是一个单文件),只需简单地在 package.use/ 目录下创建文件,就可以修改软件包的本地USE标记。虽然任何文件命名规范都行,但是更明智的做法是统一命名方案。
有一种规范是简单地使用包名作为子文件的标题。比如说,可以用如下方式为 media-video/vlc 软件包设置 bluray
USE 标记。
root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
你当然也可以直接为某一个程序禁用 USE 标记。比如说,禁用PHP的bzip2支持(但通过make.conf中的 USE 标记为其他包提供支持):
/etc/portage/package.use
禁用 PHP 对 bzip2 的支持dev-lang/php -bzip2
声明临时 USE 标记
有时,你只想暂时改变一个USE设置。你可以仅仅把USE 变量声明成一个环境变量,而不必两次修改/etc/portage/make.conf 。但是要记住,当你重新emerge或者升级这个程序的时候(不管是单独地还是作为系统升级的一部分),你的修改会被重置。
下面的例子我们将在安装 SeaMonkey 的时候临时从 USE 变量中移去pulseaudio
值。
root #
USE="-pulseaudio" emerge www-client/seamonkey
优先级
当然,在什么设置优先于USE设置有一定的优先级。 USE设置的优先级,按优先级排序(第一优先级最低):
- make.defaults 里面的USE默认设定
- 用户在/etc/portage/make.conf里面的USE默认设定
- 用户在 /etc/portage/package.use里面的USE默认设定
- 用户作为环境变量的USE设定
运行 emerge --info可以看到Portage识别的最终的USE设定。它会列出Portage使用的所有相关变量(包括 USE 变量)。
root #
emerge --info
在整个系统上应用新的 USE 标记
如果你已经修改了你的 USE 标记,而且你想用新的 USE 标记更新你的系统,可以使用emerge的 --newuse
选项:
root #
emerge --update --deep --newuse @world
然后运行Portage的depclean来移除已经安装到你的"旧"系统里但是在新 USE 标记中被废除的条件依赖关系。
运行emerge --depclean是一项危险的操作,必须小心。请反复检查要删除的包的列表里确定没有你仍然需要的包。下面这个例子里,我们添加了
-p
选项──来只列出这些包而不删除他们:root #
emerge -p --depclean
depclean完成之后, emerge会针对可能是已经删除的软件包提供的共享对象动态链接的应用程序提示重新构建。此操作完成前,为了防止破坏应用程序,Portage 将会保存必要的库。它存储着需要在 preserved-rebuild
设置的重建内容。若要重建必要的包,请运行:
原文
root #
emerge @preserved-rebuild
这些都完成之后,你的系统就已经应用上了新的 USE 标记的设定。
软件包特有的 USE 标记
查看可用 USE 标记
让我们以 seamonkey 来作例子,看看它接收什么 USE 标记。我们可以以--pretend
和 --verbose
为选项执行 emerge来查看:
root #
emerge --pretend --verbose www-client/seamonkey
These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] www-client/seamonkey-2.48_beta1::gentoo USE="calendar chatzilla crypt dbus gmp-autoupdate ipc jemalloc pulseaudio roaming skia startup-notification -custom-cflags -custom-optimization -debug -gtk3 -jack -minimal (-neon) (-selinux) (-system-cairo) -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite {-test} -wifi" L10N="-ca -cs -de -en-GB -es-AR -es-ES -fi -fr -gl -hu -it -ja -lt -nb -nl -pl -pt-PT -ru -sk -sv -tr -uk -zh-CN -zh-TW" 216,860 KiB Total: 1 package (1 new), Size of downloads: 216,860 KiB
emerge 并不是做这件事的唯一工具。事实上,我们有一个专门的包信息工具叫equery,它属于app-portage/gentoolkit。
root #
emerge --ask app-portage/gentoolkit
现在以为参数执行 equery 来查看指定包的 USE 标记。例如:gnumeric包:
user $
equery --nocolor uses =gnumeric-1.12.31
[ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for app-office/gnumeric-1.12.31: U I + + introspection : Add support for GObject based introspection - - libgda : Enable database support through gnome-extra/libgda. - - perl : Enable perl plugin loader. + + python : Enable python plugin loader. + + python_targets_python2_7 : Build with Python 2.7
满足 REQUIRED_USE
一些 ebuild 需要或禁止 USE 标记的某些组合才能正常工作。这通过放置在 REQUIRED_USE ,用一组条件来表示。此条件确保所有功能和依赖性都已完成,并且构建将成功并按预期执行。 如果任何一个不符合,emerge 会提醒你,并要求你解决这个问题。
下面是 REQUIRED_USE 的一个例子:
示例 | 描述 |
---|---|
REQUIRED_USE="foo? ( bar )"
|
如果设定 foo ,则必须设定 bar 。
|
REQUIRED_USE="foo? ( !bar )"
|
如果设定 foo ,则不得设定 bar 。
|
REQUIRED_USE="foo? ( || ( bar baz ) )"
|
如果设定 foo ,则必须在 bar 或baz 中设定一个。
|
REQUIRED_USE="^^ ( foo bar baz )"
|
必须在 foo 、bar 或 baz 中设定一个。
|
REQUIRED_USE="|| ( foo bar baz )"
|
至少在 foo 、bar 或 baz 中设定一个。
|
REQUIRED_USE="?? ( foo bar baz )"
|
可以在 foo 、bar 或 baz 中设定一个或者都不设定。
|